diff options
author | default <nobody@localhost> | 2023-02-06 19:23:35 +0100 |
---|---|---|
committer | default <nobody@localhost> | 2023-02-06 19:23:35 +0100 |
commit | 8b465a586d7d8e6e10e2c69e91767e0d1ff9477a (patch) | |
tree | f87134c005619833723e22b66fdb9523858ca791 /httpd.c | |
parent | 451d964c0c5d4b2d6b40c2d3d79bf502baea3500 (diff) |
Incoming connections are processed by the pool of threads.
Diffstat (limited to 'httpd.c')
-rw-r--r-- | httpd.c | 28 |
1 files changed, 13 insertions, 15 deletions
@@ -312,14 +312,6 @@ static void *background_thread(void *arg) } -static void *connection_thread(void *arg) -/* connection thread */ -{ - httpd_connection((FILE *)arg); - return NULL; -} - - /** job control **/ /* mutex to access the lists of jobs */ @@ -376,25 +368,32 @@ void job_wait(xs_val **job) static void *job_thread(void *arg) /* job thread */ { -// httpd_connection((FILE *)arg); - srv_debug(0, xs_fmt("job thread started")); + int pid = pthread_self(); + + srv_debug(0, xs_fmt("job thread %x started", pid)); for (;;) { xs *job = NULL; job_wait(&job); - srv_debug(0, xs_fmt("job thread wake up")); + srv_debug(0, xs_fmt("job thread %x wake up", pid)); if (job == NULL) break; if (xs_type(job) == XSTYPE_DATA) { /* it's a socket */ + FILE *f = NULL; + + xs_data_get(job, &f); + + if (f != NULL) + httpd_connection(f); } } - srv_debug(0, xs_fmt("job thread stopped")); + srv_debug(0, xs_fmt("job thread %x stopped", pid)); return NULL; } @@ -455,10 +454,9 @@ void httpd(void) for (;;) { FILE *f = xs_socket_accept(rs); - pthread_t cth; + xs *job = xs_data_new(&f, sizeof(FILE *)); - pthread_create(&cth, NULL, connection_thread, f); - pthread_detach(cth); + job_post(job); } } |