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/platform/windows | |
| 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/platform/windows')
| -rw-r--r-- | src/platform/windows/win_iocp.c | 4 | ||||
| -rw-r--r-- | src/platform/windows/win_ipcconn.c | 8 | ||||
| -rw-r--r-- | src/platform/windows/win_ipcdial.c | 4 | ||||
| -rw-r--r-- | src/platform/windows/win_ipclisten.c | 4 | ||||
| -rw-r--r-- | src/platform/windows/win_resolv.c | 13 | ||||
| -rw-r--r-- | src/platform/windows/win_tcpconn.c | 8 | ||||
| -rw-r--r-- | src/platform/windows/win_tcpdial.c | 4 | ||||
| -rw-r--r-- | src/platform/windows/win_tcplisten.c | 4 |
8 files changed, 25 insertions, 24 deletions
diff --git a/src/platform/windows/win_iocp.c b/src/platform/windows/win_iocp.c index b8e95f6c..38807e30 100644 --- a/src/platform/windows/win_iocp.c +++ b/src/platform/windows/win_iocp.c @@ -87,9 +87,9 @@ nni_win_iocp_handler(void *arg) } static void -nni_win_event_cancel(nni_aio *aio, int rv) +nni_win_event_cancel(nni_aio *aio, void *arg, int rv) { - nni_win_event *evt = nni_aio_get_prov_data(aio); + nni_win_event *evt = arg; nni_mtx_lock(&evt->mtx); if (aio == evt->active) { diff --git a/src/platform/windows/win_ipcconn.c b/src/platform/windows/win_ipcconn.c index d8ef4e4e..d4e7f5ac 100644 --- a/src/platform/windows/win_ipcconn.c +++ b/src/platform/windows/win_ipcconn.c @@ -100,9 +100,9 @@ ipc_recv_cb(nni_win_io *io, int rv, size_t num) nni_aio_finish_synch(aio, rv, num); } static void -ipc_recv_cancel(nni_aio *aio, int rv) +ipc_recv_cancel(nni_aio *aio, void *arg, int rv) { - nni_ipc_conn *c = nni_aio_get_prov_data(aio); + nni_ipc_conn *c = arg; nni_mtx_lock(&c->mtx); if (aio == nni_list_first(&c->recv_aios)) { c->recv_rv = rv; @@ -226,9 +226,9 @@ ipc_send_cb(nni_win_io *io, int rv, size_t num) } static void -ipc_send_cancel(nni_aio *aio, int rv) +ipc_send_cancel(nni_aio *aio, void *arg, int rv) { - nni_ipc_conn *c = nni_aio_get_prov_data(aio); + nni_ipc_conn *c = arg; nni_mtx_lock(&c->mtx); if (aio == nni_list_first(&c->send_aios)) { c->send_rv = rv; diff --git a/src/platform/windows/win_ipcdial.c b/src/platform/windows/win_ipcdial.c index 429bcedf..67865687 100644 --- a/src/platform/windows/win_ipcdial.c +++ b/src/platform/windows/win_ipcdial.c @@ -134,10 +134,10 @@ ipc_dial_thr(void *arg) } static void -ipc_dial_cancel(nni_aio *aio, int rv) +ipc_dial_cancel(nni_aio *aio, void *arg, int rv) { + nni_ipc_dialer *d = arg; ipc_dial_work * w = &ipc_connecter; - nni_ipc_dialer *d = nni_aio_get_prov_data(aio); nni_mtx_lock(&w->mtx); if (nni_aio_list_active(aio)) { diff --git a/src/platform/windows/win_ipclisten.c b/src/platform/windows/win_ipclisten.c index 20bb8548..0fc1c9fc 100644 --- a/src/platform/windows/win_ipclisten.c +++ b/src/platform/windows/win_ipclisten.c @@ -222,9 +222,9 @@ nni_ipc_listener_listen(nni_ipc_listener *l, const nni_sockaddr *sa) } static void -ipc_accept_cancel(nni_aio *aio, int rv) +ipc_accept_cancel(nni_aio *aio, void *arg, int rv) { - nni_ipc_listener *l = nni_aio_get_prov_data(aio); + nni_ipc_listener *l = arg; nni_mtx_unlock(&l->mtx); if (aio == nni_list_first(&l->aios)) { diff --git a/src/platform/windows/win_resolv.c b/src/platform/windows/win_resolv.c index cc876d04..aca07ecb 100644 --- a/src/platform/windows/win_resolv.c +++ b/src/platform/windows/win_resolv.c @@ -45,16 +45,16 @@ struct resolv_item { }; static void -resolv_cancel(nni_aio *aio, int rv) +resolv_cancel(nni_aio *aio, void *arg, int rv) { - resolv_item *item; + resolv_item *item = arg; nni_mtx_lock(&resolv_mtx); - if ((item = nni_aio_get_prov_data(aio)) == NULL) { + if (item != nni_aio_get_prov_extra(aio, 0)) { nni_mtx_unlock(&resolv_mtx); return; } - nni_aio_set_prov_data(aio, NULL); + nni_aio_set_prov_extra(aio, 0, NULL); if (nni_aio_list_active(aio)) { // We have not been picked up by a resolver thread yet, // so we can just discard everything. @@ -236,6 +236,7 @@ resolv_ip(const char *host, const char *serv, int passive, int family, if (resolv_fini) { rv = NNG_ECLOSED; } else { + nni_aio_set_prov_extra(aio, 0, item); rv = nni_aio_schedule(aio, resolv_cancel, item); } if (rv != 0) { @@ -283,7 +284,7 @@ resolv_worker(void *notused) continue; } - item = nni_aio_get_prov_data(aio); + item = nni_aio_get_prov_extra(aio, 0); nni_aio_list_remove(aio); // Now attempt to do the work. This runs synchronously. @@ -294,7 +295,7 @@ resolv_worker(void *notused) // Check to make sure we were not canceled. if ((aio = item->aio) != NULL) { nng_sockaddr *sa = nni_aio_get_input(aio, 0); - nni_aio_set_prov_data(aio, NULL); + nni_aio_set_prov_extra(aio, 0, NULL); item->aio = NULL; memcpy(sa, &item->sa, sizeof(*sa)); nni_aio_finish(aio, rv, 0); diff --git a/src/platform/windows/win_tcpconn.c b/src/platform/windows/win_tcpconn.c index 08b759ca..68c72b9b 100644 --- a/src/platform/windows/win_tcpconn.c +++ b/src/platform/windows/win_tcpconn.c @@ -96,9 +96,9 @@ tcp_recv_cb(nni_win_io *io, int rv, size_t num) } static void -tcp_recv_cancel(nni_aio *aio, int rv) +tcp_recv_cancel(nni_aio *aio, void *arg, int rv) { - nni_tcp_conn *c = nni_aio_get_prov_data(aio); + nni_tcp_conn *c = arg; nni_mtx_lock(&c->mtx); if (aio == nni_list_first(&c->recv_aios)) { c->recv_rv = rv; @@ -186,9 +186,9 @@ again: } static void -tcp_send_cancel(nni_aio *aio, int rv) +tcp_send_cancel(nni_aio *aio, void *arg, int rv) { - nni_tcp_conn *c = nni_aio_get_prov_data(aio); + nni_tcp_conn *c = arg; nni_mtx_lock(&c->mtx); if (aio == nni_list_first(&c->send_aios)) { c->send_rv = rv; diff --git a/src/platform/windows/win_tcpdial.c b/src/platform/windows/win_tcpdial.c index 5283ea81..99308ceb 100644 --- a/src/platform/windows/win_tcpdial.c +++ b/src/platform/windows/win_tcpdial.c @@ -94,9 +94,9 @@ nni_tcp_dialer_fini(nni_tcp_dialer *d) } static void -tcp_dial_cancel(nni_aio *aio, int rv) +tcp_dial_cancel(nni_aio *aio, void *arg, int rv) { - nni_tcp_dialer *d = nni_aio_get_prov_data(aio); + nni_tcp_dialer *d = arg; nni_tcp_conn * c; nni_mtx_lock(&d->mtx); diff --git a/src/platform/windows/win_tcplisten.c b/src/platform/windows/win_tcplisten.c index 1f197246..f0e195be 100644 --- a/src/platform/windows/win_tcplisten.c +++ b/src/platform/windows/win_tcplisten.c @@ -236,9 +236,9 @@ nni_tcp_listener_listen(nni_tcp_listener *l, nni_sockaddr *sa) } static void -tcp_accept_cancel(nni_aio *aio, int rv) +tcp_accept_cancel(nni_aio *aio, void *arg, int rv) { - nni_tcp_listener *l = nni_aio_get_prov_data(aio); + nni_tcp_listener *l = arg; nni_tcp_conn * c; nni_mtx_lock(&l->mtx); |
