diff options
| author | Garrett D'Amore <garrett@damore.org> | 2018-08-20 09:00:46 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2018-08-20 09:26:20 -0700 |
| commit | 6e5f6a26beec0a44d25625cacb5095cdc7a94146 (patch) | |
| tree | 7d6ef720b239a30d4906f1f2303fed77707b2761 /src/transport | |
| parent | 3e70013111b70f1439b2f9991211c887a8eefff3 (diff) | |
| download | nng-6e5f6a26beec0a44d25625cacb5095cdc7a94146.tar.gz nng-6e5f6a26beec0a44d25625cacb5095cdc7a94146.tar.bz2 nng-6e5f6a26beec0a44d25625cacb5095cdc7a94146.zip | |
fixes #664 aio cancellation could be better
This changes the signature of the aio cancellation routines
to take the argument for cancellation directly, so we do not
need to lookup the argument using the nni_aio_get_prov_data.
We should probably consider eliminating nni_aio_get_prov_data,
and co, and changing the prov_extra to reflect prov_data. Later.
Diffstat (limited to 'src/transport')
| -rw-r--r-- | src/transport/inproc/inproc.c | 28 | ||||
| -rw-r--r-- | src/transport/ipc/ipc.c | 12 | ||||
| -rw-r--r-- | src/transport/tcp/tcp.c | 12 | ||||
| -rw-r--r-- | src/transport/tls/tls.c | 12 | ||||
| -rw-r--r-- | src/transport/ws/websocket.c | 16 | ||||
| -rw-r--r-- | src/transport/zerotier/zerotier.c | 12 |
6 files changed, 46 insertions, 46 deletions
diff --git a/src/transport/inproc/inproc.c b/src/transport/inproc/inproc.c index 89f9b024..3194a56d 100644 --- a/src/transport/inproc/inproc.c +++ b/src/transport/inproc/inproc.c @@ -245,10 +245,9 @@ nni_inproc_ep_fini(void *arg) } static void -nni_inproc_conn_finish(nni_aio *aio, int rv, nni_inproc_pipe *pipe) +inproc_conn_finish( + nni_aio *aio, int rv, nni_inproc_ep *ep, nni_inproc_pipe *pipe) { - nni_inproc_ep *ep = nni_aio_get_prov_data(aio); - nni_aio_list_remove(aio); if ((ep != NULL) && (!ep->listener) && nni_list_empty(&ep->aios)) { @@ -289,12 +288,12 @@ nni_inproc_ep_close(void *arg) // Notify any waiting clients that we are closed. while ((client = nni_list_first(&ep->clients)) != NULL) { while ((aio = nni_list_first(&client->aios)) != NULL) { - nni_inproc_conn_finish(aio, NNG_ECONNREFUSED, NULL); + inproc_conn_finish(aio, NNG_ECONNREFUSED, ep, NULL); } nni_list_remove(&ep->clients, client); } while ((aio = nni_list_first(&ep->aios)) != NULL) { - nni_inproc_conn_finish(aio, NNG_ECLOSED, NULL); + inproc_conn_finish(aio, NNG_ECLOSED, ep, NULL); } nni_mtx_unlock(&nni_inproc.mx); } @@ -322,8 +321,10 @@ nni_inproc_accept_clients(nni_inproc_ep *srv) } if ((pair = NNI_ALLOC_STRUCT(pair)) == NULL) { - nni_inproc_conn_finish(caio, NNG_ENOMEM, NULL); - nni_inproc_conn_finish(saio, NNG_ENOMEM, NULL); + inproc_conn_finish( + caio, NNG_ENOMEM, cli, NULL); + inproc_conn_finish( + saio, NNG_ENOMEM, srv, NULL); continue; } nni_mtx_init(&pair->mx); @@ -340,8 +341,8 @@ nni_inproc_accept_clients(nni_inproc_ep *srv) if (spipe != NULL) { nni_inproc_pipe_fini(spipe); } - nni_inproc_conn_finish(caio, rv, NULL); - nni_inproc_conn_finish(saio, rv, NULL); + inproc_conn_finish(caio, rv, cli, NULL); + inproc_conn_finish(saio, rv, srv, NULL); nni_inproc_pair_destroy(pair); continue; } @@ -357,8 +358,8 @@ nni_inproc_accept_clients(nni_inproc_ep *srv) nni_msgq_set_filter(spipe->rq, inproc_filter, spipe); nni_msgq_set_filter(cpipe->rq, inproc_filter, cpipe); - nni_inproc_conn_finish(caio, 0, cpipe); - nni_inproc_conn_finish(saio, 0, spipe); + inproc_conn_finish(caio, 0, cli, cpipe); + inproc_conn_finish(saio, 0, srv, spipe); } if (nni_list_first(&cli->aios) == NULL) { @@ -372,9 +373,9 @@ nni_inproc_accept_clients(nni_inproc_ep *srv) } static void -nni_inproc_ep_cancel(nni_aio *aio, int rv) +nni_inproc_ep_cancel(nni_aio *aio, void *arg, int rv) { - nni_inproc_ep *ep = nni_aio_get_prov_data(aio); + nni_inproc_ep *ep = arg; nni_mtx_lock(&nni_inproc.mx); if (nni_aio_list_active(aio)) { @@ -405,7 +406,6 @@ nni_inproc_ep_connect(void *arg, nni_aio *aio) } } if (server == NULL) { - // nni_inproc_conn_finish(aio, NNG_ECONNREFUSED, NULL); nni_mtx_unlock(&nni_inproc.mx); nni_aio_finish_error(aio, NNG_ECONNREFUSED); return; diff --git a/src/transport/ipc/ipc.c b/src/transport/ipc/ipc.c index 5d0064e5..05e0b895 100644 --- a/src/transport/ipc/ipc.c +++ b/src/transport/ipc/ipc.c @@ -451,9 +451,9 @@ error: } static void -ipctran_pipe_send_cancel(nni_aio *aio, int rv) +ipctran_pipe_send_cancel(nni_aio *aio, void *arg, int rv) { - ipctran_pipe *p = nni_aio_get_prov_data(aio); + ipctran_pipe *p = arg; nni_mtx_lock(&p->mtx); if (!nni_aio_list_active(aio)) { @@ -544,9 +544,9 @@ ipctran_pipe_send(void *arg, nni_aio *aio) } static void -ipctran_pipe_recv_cancel(nni_aio *aio, int rv) +ipctran_pipe_recv_cancel(nni_aio *aio, void *arg, int rv) { - ipctran_pipe *p = nni_aio_get_prov_data(aio); + ipctran_pipe *p = arg; nni_mtx_lock(&p->mtx); if (!nni_aio_list_active(aio)) { @@ -686,9 +686,9 @@ ipctran_pipe_get_peer_zoneid(void *arg, void *buf, size_t *szp, nni_opt_type t) } static void -ipctran_pipe_conn_cancel(nni_aio *aio, int rv) +ipctran_pipe_conn_cancel(nni_aio *aio, void *arg, int rv) { - ipctran_pipe *p = nni_aio_get_prov_data(aio); + ipctran_pipe *p = arg; nni_mtx_lock(&p->ep->mtx); if (aio == p->useraio) { diff --git a/src/transport/tcp/tcp.c b/src/transport/tcp/tcp.c index c58d66ec..3a4e018e 100644 --- a/src/transport/tcp/tcp.c +++ b/src/transport/tcp/tcp.c @@ -193,9 +193,9 @@ tcptran_pipe_init(tcptran_pipe **pipep, tcptran_ep *ep) } static void -tcptran_pipe_conn_cancel(nni_aio *aio, int rv) +tcptran_pipe_conn_cancel(nni_aio *aio, void *arg, int rv) { - tcptran_pipe *p = nni_aio_get_prov_data(aio); + tcptran_pipe *p = arg; nni_mtx_lock(&p->ep->mtx); if (aio == p->useraio) { @@ -483,9 +483,9 @@ recv_error: } static void -tcptran_pipe_send_cancel(nni_aio *aio, int rv) +tcptran_pipe_send_cancel(nni_aio *aio, void *arg, int rv) { - tcptran_pipe *p = nni_aio_get_prov_data(aio); + tcptran_pipe *p = arg; nni_mtx_lock(&p->mtx); if (!nni_aio_list_active(aio)) { @@ -576,9 +576,9 @@ tcptran_pipe_send(void *arg, nni_aio *aio) } static void -tcptran_pipe_recv_cancel(nni_aio *aio, int rv) +tcptran_pipe_recv_cancel(nni_aio *aio, void *arg, int rv) { - tcptran_pipe *p = nni_aio_get_prov_data(aio); + tcptran_pipe *p = arg; nni_mtx_lock(&p->mtx); if (!nni_aio_list_active(aio)) { diff --git a/src/transport/tls/tls.c b/src/transport/tls/tls.c index aff98c27..49bc932d 100644 --- a/src/transport/tls/tls.c +++ b/src/transport/tls/tls.c @@ -197,9 +197,9 @@ tlstran_pipe_reap(tlstran_pipe *p) } static void -tlstran_pipe_conn_cancel(nni_aio *aio, int rv) +tlstran_pipe_conn_cancel(nni_aio *aio, void *arg, int rv) { - tlstran_pipe *p = nni_aio_get_prov_data(aio); + tlstran_pipe *p = arg; nni_mtx_lock(&p->ep->mtx); if (aio == p->useraio) { @@ -493,9 +493,9 @@ recv_error: } static void -tlstran_pipe_send_cancel(nni_aio *aio, int rv) +tlstran_pipe_send_cancel(nni_aio *aio, void *arg, int rv) { - tlstran_pipe *p = nni_aio_get_prov_data(aio); + tlstran_pipe *p = arg; nni_mtx_lock(&p->mtx); if (!nni_aio_list_active(aio)) { @@ -578,9 +578,9 @@ tlstran_pipe_send(void *arg, nni_aio *aio) } static void -tlstran_pipe_recv_cancel(nni_aio *aio, int rv) +tlstran_pipe_recv_cancel(nni_aio *aio, void *arg, int rv) { - tlstran_pipe *p = nni_aio_get_prov_data(aio); + tlstran_pipe *p = arg; nni_mtx_lock(&p->mtx); if (!nni_aio_list_active(aio)) { diff --git a/src/transport/ws/websocket.c b/src/transport/ws/websocket.c index 81638d95..9b3f67f4 100644 --- a/src/transport/ws/websocket.c +++ b/src/transport/ws/websocket.c @@ -120,9 +120,9 @@ ws_pipe_recv_cb(void *arg) } static void -ws_pipe_recv_cancel(nni_aio *aio, int rv) +ws_pipe_recv_cancel(nni_aio *aio, void *arg, int rv) { - ws_pipe *p = nni_aio_get_prov_data(aio); + ws_pipe *p = arg; nni_mtx_lock(&p->mtx); if (p->user_rxaio != aio) { nni_mtx_unlock(&p->mtx); @@ -155,9 +155,9 @@ ws_pipe_recv(void *arg, nni_aio *aio) } static void -ws_pipe_send_cancel(nni_aio *aio, int rv) +ws_pipe_send_cancel(nni_aio *aio, void *arg, int rv) { - ws_pipe *p = nni_aio_get_prov_data(aio); + ws_pipe *p = arg; nni_mtx_lock(&p->mtx); if (p->user_txaio != aio) { nni_mtx_unlock(&p->mtx); @@ -299,9 +299,9 @@ ws_listener_bind(void *arg) } static void -ws_listener_cancel(nni_aio *aio, int rv) +ws_listener_cancel(nni_aio *aio, void *arg, int rv) { - ws_listener *l = nni_aio_get_prov_data(aio); + ws_listener *l = arg; nni_mtx_lock(&l->mtx); if (nni_aio_list_active(aio)) { @@ -337,9 +337,9 @@ ws_listener_accept(void *arg, nni_aio *aio) } static void -ws_dialer_cancel(nni_aio *aio, int rv) +ws_dialer_cancel(nni_aio *aio, void *arg, int rv) { - ws_dialer *d = nni_aio_get_prov_data(aio); + ws_dialer *d = arg; nni_mtx_lock(&d->mtx); if (nni_aio_list_active(aio)) { diff --git a/src/transport/zerotier/zerotier.c b/src/transport/zerotier/zerotier.c index d1072931..0a68c1ca 100644 --- a/src/transport/zerotier/zerotier.c +++ b/src/transport/zerotier/zerotier.c @@ -1840,9 +1840,9 @@ zt_pipe_send(void *arg, nni_aio *aio) } static void -zt_pipe_cancel_recv(nni_aio *aio, int rv) +zt_pipe_cancel_recv(nni_aio *aio, void *arg, int rv) { - zt_pipe *p = nni_aio_get_prov_data(aio); + zt_pipe *p = arg; nni_mtx_lock(&zt_lk); if (p->zp_user_rxaio == aio) { p->zp_user_rxaio = NULL; @@ -2331,9 +2331,9 @@ zt_ep_bind(void *arg) } static void -zt_ep_cancel(nni_aio *aio, int rv) +zt_ep_cancel(nni_aio *aio, void *arg, int rv) { - zt_ep *ep = nni_aio_get_prov_data(aio); + zt_ep *ep = arg; nni_mtx_lock(&zt_lk); if (nni_aio_list_active(aio)) { @@ -2417,9 +2417,9 @@ zt_ep_accept(void *arg, nni_aio *aio) } static void -zt_ep_conn_req_cancel(nni_aio *aio, int rv) +zt_ep_conn_req_cancel(nni_aio *aio, void *arg, int rv) { - zt_ep *ep = nni_aio_get_prov_data(aio); + zt_ep *ep = arg; // We don't have much to do here. The AIO will have been // canceled as a result of the "parent" AIO canceling. nni_mtx_lock(&zt_lk); |
