diff options
author | tiptorrent development team <tiptorrent@soleta.eu> | 2021-09-09 12:41:27 +0200 |
---|---|---|
committer | tiptorrent development team <tiptorrent@soleta.eu> | 2021-09-29 15:48:03 +0200 |
commit | b07785d2d1b1ed42ea5f863c006f6ee60eceabc2 (patch) | |
tree | 19777c08b4ee4bf38b4db7aeb55540c7b575b1bb | |
parent | 1b890bd11b0a856bd2e4cd2377db8c6f3f656d3d (diff) |
activate pending clients only for large files
small files should not activate pending clients, otherwise max_clients
is not fulfilled.
-rw-r--r-- | src/core.c | 6 | ||||
-rw-r--r-- | src/core.h | 5 | ||||
-rw-r--r-- | src/handler.c | 2 |
3 files changed, 10 insertions, 3 deletions
@@ -47,10 +47,12 @@ static void tip_client_release(struct ev_loop *loop, struct tip_client *cli) free((void *)cli->uri); free((void *)cli->path); - free(cli); num_clients--; - tip_client_activate_pending(); + if (tip_client_large_file(cli)) + tip_client_activate_pending(); + + free(cli); } static int tip_client_payload_too_large(struct tip_client *cli) @@ -55,6 +55,11 @@ static inline int tip_client_socket(const struct tip_client *cli) return cli->io.fd; } +static inline bool tip_client_large_file(const struct tip_client *cli) +{ + return cli->size > FILE_SIZE_THRESHOLD; +} + void tip_client_pending(struct tip_client *cli); bool tip_client_redirect(struct tip_client *cli); diff --git a/src/handler.c b/src/handler.c index 9bcec71..ab9fdc4 100644 --- a/src/handler.c +++ b/src/handler.c @@ -101,7 +101,7 @@ int tip_client_state_process_payload(struct tip_client *cli) cli->allow_redirect = allow_redirect; num_clients++; - if (cli->size > FILE_SIZE_THRESHOLD && num_clients > max_clients) { + if (tip_client_large_file(cli) && num_clients > max_clients) { if (!tip_client_redirect(cli)) { tip_client_pending(cli); return 1; |