diff options
| author | Garrett D'Amore <garrett@damore.org> | 2020-12-19 10:21:54 -0800 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2020-12-19 12:50:05 -0800 |
| commit | d12e169c1e733b255d146847ed57037b74681285 (patch) | |
| tree | e4a59142a6cf097dfdda8620635f173f53db9e7a /src/supplemental/http/http_server.c | |
| parent | 2033988343bce413763d3e9664e3e8372da48591 (diff) | |
| download | nng-d12e169c1e733b255d146847ed57037b74681285.tar.gz nng-d12e169c1e733b255d146847ed57037b74681285.tar.bz2 nng-d12e169c1e733b255d146847ed57037b74681285.zip | |
fixes #1372 nni_reap could be smaller
Diffstat (limited to 'src/supplemental/http/http_server.c')
| -rw-r--r-- | src/supplemental/http/http_server.c | 38 |
1 files changed, 26 insertions, 12 deletions
diff --git a/src/supplemental/http/http_server.c b/src/supplemental/http/http_server.c index e1f51e52..1ebc8907 100644 --- a/src/supplemental/http/http_server.c +++ b/src/supplemental/http/http_server.c @@ -64,7 +64,7 @@ typedef struct http_sconn { nni_aio * rxaio; nni_aio * txaio; nni_aio * txdataio; - nni_reap_item reap; + nni_reap_node reap; } http_sconn; typedef struct http_error { @@ -90,7 +90,21 @@ struct nng_http_server { char * hostname; nni_list errors; nni_mtx errors_mtx; - nni_reap_item reap; + nni_reap_node reap; +}; + +static void http_sc_reap(void *); + +static nni_reap_list http_sc_reap_list = { + .rl_offset = offsetof(http_sconn, reap), + .rl_func = http_sc_reap, +}; + +static void http_server_fini(nni_http_server *); + +static nni_reap_list http_server_reap_list = { + .rl_offset = offsetof(nni_http_server, reap), + .rl_func = (nni_cb) http_server_fini, }; int @@ -269,7 +283,7 @@ static nni_list http_servers; static nni_mtx http_servers_lk; static void -http_sconn_reap(void *arg) +http_sc_reap(void *arg) { http_sconn * sc = arg; nni_http_server *s = sc->server; @@ -304,7 +318,7 @@ http_sconn_reap(void *arg) } static void -http_sconn_close_locked(http_sconn *sc) +http_sc_close_locked(http_sconn *sc) { nni_http_conn *conn; @@ -322,7 +336,7 @@ http_sconn_close_locked(http_sconn *sc) if ((conn = sc->conn) != NULL) { nni_http_conn_close(conn); } - nni_reap(&sc->reap, http_sconn_reap, sc); + nni_reap(&http_sc_reap_list, sc); } static void @@ -332,7 +346,7 @@ http_sconn_close(http_sconn *sc) s = sc->server; nni_mtx_lock(&s->mtx); - http_sconn_close_locked(sc); + http_sc_close_locked(sc); nni_mtx_unlock(&s->mtx); } @@ -704,7 +718,7 @@ http_sconn_rxdone(void *arg) if ((h->getbody) && ((cls = nni_http_req_get_header(req, "Content-Length")) != NULL)) { uint64_t len; - char *end; + char * end; len = strtoull(cls, &end, 10); if ((end == NULL) || (*end != '\0') || (len > h->maxbody)) { @@ -900,9 +914,9 @@ http_server_fini(nni_http_server *s) nni_mtx_lock(&s->mtx); if (!nni_list_empty(&s->conns)) { - // Try to reap later, after the sconns are done reaping. - // (Note, sconns will all have been closed already.) - nni_reap(&s->reap, (nni_cb) http_server_fini, s); + // Try to reap later, after the connections are done reaping. + // (Note, connections will all have been closed already.) + nni_reap(&http_server_reap_list, s); nni_mtx_unlock(&s->mtx); return; } @@ -1059,7 +1073,7 @@ http_server_stop(nni_http_server *s) // Stopping the server is a hard stop -- it aborts any work // being done by clients. (No graceful shutdown). NNI_LIST_FOREACH (&s->conns, sc) { - http_sconn_close_locked(sc); + http_sc_close_locked(sc); } while (!nni_list_empty(&s->conns)) { @@ -1904,7 +1918,7 @@ nni_http_server_fini(nni_http_server *s) http_server_stop(s); nni_mtx_unlock(&s->mtx); nni_list_remove(&http_servers, s); - nni_reap(&s->reap, (nni_cb) http_server_fini, s); + nni_reap(&http_server_reap_list, s); } nni_mtx_unlock(&http_servers_lk); } |
