MatrixSynapse/synapse/util
Sean Quah 772e8c2385
Fix stack overflow in `_PerHostRatelimiter` due to synchronous requests (#14812)
When there are many synchronous requests waiting on a
`_PerHostRatelimiter`, each request will be started recursively just
after the previous request has completed. Under the right conditions,
this leads to stack exhaustion.

A common way for requests to become synchronous is when the remote
client disconnects early, because the homeserver is overloaded and slow
to respond.

Avoid stack exhaustion under these conditions by deferring subsequent
requests until the next reactor tick.

Fixes #14480.

Signed-off-by: Sean Quah <seanq@matrix.org>
2023-01-13 00:16:21 +00:00
..
caches Add missing type hints to tests.config. (#14681) 2022-12-16 08:53:28 -05:00
__init__.py Always close _all_ `ijson` coroutines, even if doing so raises Exceptions (#14065) 2022-10-06 18:17:50 +00:00
async_helpers.py Batch up replication requests to request the resyncing of remote users's devices. (#14716) 2023-01-10 11:17:59 +00:00
batching_queue.py Add types to synapse.util. (#10601) 2021-09-10 17:03:18 +01:00
cancellation.py Generalise the `@cancellable` annotation so it can be used on functions other than just servlet methods. (#13662) 2022-08-31 11:16:05 +00:00
check_dependencies.py Don't require `setuptools_rust` at runtime (#13952) 2022-09-29 20:16:08 +00:00
daemonize.py Upgrade mypy to version 0.931 (#12030) 2022-02-18 15:57:26 +00:00
distributor.py Use `ParamSpec` in a few places (#12667) 2022-05-09 10:27:39 +00:00
file_consumer.py Add missing type hints to `synapse.logging.context` (#11556) 2021-12-14 17:35:28 +00:00
frozenutils.py Consistently use collections.abc.Mapping to check frozendict. (#12564) 2022-04-27 09:00:07 -04:00
gai_resolver.py Add most missing type hints to synapse.util (#11328) 2021-11-16 08:47:36 -05:00
hash.py Add missing type hints to synapse.util (#9982) 2021-05-24 15:32:01 -04:00
httpresourcetree.py Respond with proper error responses on unknown paths. (#14621) 2022-12-08 11:37:05 -05:00
iterutils.py Encode JSON responses on a thread in C, mk2 (#10905) 2021-09-28 09:37:58 +00:00
linked_list.py Eliminate a few `Any`s in `LruCache` type hints (#11453) 2021-11-30 15:39:07 +00:00
logcontext.py Improve the backwards compatibility re-exports of synapse.logging.context (#5617) 2019-07-05 02:32:02 +10:00
logformatter.py Improve the backwards compatibility re-exports of synapse.logging.context (#5617) 2019-07-05 02:32:02 +10:00
macaroons.py Support RFC7636 PKCE in the OAuth 2.0 flow. (#14750) 2023-01-04 14:58:08 -05:00
manhole.py Add missing type hints to `synapse.app`. (#11287) 2021-11-10 15:06:54 -05:00
metrics.py Fix a memory leak when running the unit tests. (#13798) 2022-09-14 15:29:05 +00:00
module_loader.py Standardise the module interface (#10062) 2021-06-18 12:15:52 +01:00
msisdn.py Add missing type hints to synapse.util (#9982) 2021-05-24 15:32:01 -04:00
patch_inline_callbacks.py Use `ParamSpec` in a few places (#12667) 2022-05-09 10:27:39 +00:00
ratelimitutils.py Fix stack overflow in `_PerHostRatelimiter` due to synchronous requests (#14812) 2023-01-13 00:16:21 +00:00
retryutils.py Refactor MSC3030 `/timestamp_to_event` to move away from our snowflake pull from `destination` pattern (#14096) 2022-10-26 16:10:55 -05:00
rlimit.py Add types to synapse.util. (#10601) 2021-09-10 17:03:18 +01:00
rust.py Check if Rust lib needs rebuilding. (#13759) 2022-09-12 10:03:42 +00:00
stringutils.py Making parse_server_name more consistent (#14007) 2022-10-11 12:42:11 +00:00
templates.py Implement a Jinja2 filter to extract localparts from email addresses (#12212) 2022-03-11 15:15:11 +00:00
threepids.py Remove redundant types from comments. (#14412) 2022-11-16 15:25:24 +00:00
wheel_timer.py Remove redundant types from comments. (#14412) 2022-11-16 15:25:24 +00:00