summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortiptorrent development team <tiptorrent@soleta.eu>2021-09-09 12:41:27 +0200
committertiptorrent development team <tiptorrent@soleta.eu>2021-09-29 15:48:03 +0200
commitb07785d2d1b1ed42ea5f863c006f6ee60eceabc2 (patch)
tree19777c08b4ee4bf38b4db7aeb55540c7b575b1bb
parent1b890bd11b0a856bd2e4cd2377db8c6f3f656d3d (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.c6
-rw-r--r--src/core.h5
-rw-r--r--src/handler.c2
3 files changed, 10 insertions, 3 deletions
diff --git a/src/core.c b/src/core.c
index d086dfe..95bb614 100644
--- a/src/core.c
+++ b/src/core.c
@@ -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)
diff --git a/src/core.h b/src/core.h
index c1ce388..4b35f82 100644
--- a/src/core.h
+++ b/src/core.h
@@ -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;