aboutsummaryrefslogtreecommitdiff
path: root/src/platform/posix
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2018-08-20 09:00:46 -0700
committerGarrett D'Amore <garrett@damore.org>2018-08-20 09:26:20 -0700
commit6e5f6a26beec0a44d25625cacb5095cdc7a94146 (patch)
tree7d6ef720b239a30d4906f1f2303fed77707b2761 /src/platform/posix
parent3e70013111b70f1439b2f9991211c887a8eefff3 (diff)
downloadnng-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/posix')
-rw-r--r--src/platform/posix/posix_ipcconn.c6
-rw-r--r--src/platform/posix/posix_ipcdial.c4
-rw-r--r--src/platform/posix/posix_ipclisten.c4
-rw-r--r--src/platform/posix/posix_resolv_gai.c13
-rw-r--r--src/platform/posix/posix_tcpconn.c4
-rw-r--r--src/platform/posix/posix_tcpdial.c4
-rw-r--r--src/platform/posix/posix_tcplisten.c4
-rw-r--r--src/platform/posix/posix_udp.c4
8 files changed, 22 insertions, 21 deletions
diff --git a/src/platform/posix/posix_ipcconn.c b/src/platform/posix/posix_ipcconn.c
index 5a56d23e..0dae8bae 100644
--- a/src/platform/posix/posix_ipcconn.c
+++ b/src/platform/posix/posix_ipcconn.c
@@ -247,9 +247,9 @@ ipc_conn_cb(nni_posix_pfd *pfd, int events, void *arg)
}
static void
-ipc_conn_cancel(nni_aio *aio, int rv)
+ipc_conn_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 (nni_aio_list_active(aio)) {
@@ -352,7 +352,7 @@ ipc_conn_peerid(nni_ipc_conn *c, uint64_t *euid, uint64_t *egid,
return (0);
#elif defined(NNG_HAVE_SOCKPEERCRED)
struct sockpeercred uc;
- socklen_t len = sizeof(uc);
+ socklen_t len = sizeof(uc);
if (getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &uc, &len) != 0) {
return (nni_plat_errno(errno));
}
diff --git a/src/platform/posix/posix_ipcdial.c b/src/platform/posix/posix_ipcdial.c
index 13732911..3d0ad0d8 100644
--- a/src/platform/posix/posix_ipcdial.c
+++ b/src/platform/posix/posix_ipcdial.c
@@ -78,9 +78,9 @@ nni_ipc_dialer_fini(nni_ipc_dialer *d)
}
static void
-ipc_dialer_cancel(nni_aio *aio, int rv)
+ipc_dialer_cancel(nni_aio *aio, void *arg, int rv)
{
- nni_ipc_dialer *d = nni_aio_get_prov_data(aio);
+ nni_ipc_dialer *d = arg;
nni_ipc_conn * c;
nni_mtx_lock(&d->mtx);
diff --git a/src/platform/posix/posix_ipclisten.c b/src/platform/posix/posix_ipclisten.c
index 7134c4e3..6ac3eaa8 100644
--- a/src/platform/posix/posix_ipclisten.c
+++ b/src/platform/posix/posix_ipclisten.c
@@ -172,9 +172,9 @@ ipc_listener_cb(nni_posix_pfd *pfd, int events, void *arg)
}
static void
-ipc_listener_cancel(nni_aio *aio, int rv)
+ipc_listener_cancel(nni_aio *aio, void *arg, int rv)
{
- nni_ipc_listener *l = nni_aio_get_prov_data(aio);
+ nni_ipc_listener *l = arg;
// This is dead easy, because we'll ignore the completion if there
// isn't anything to do the accept on!
diff --git a/src/platform/posix/posix_resolv_gai.c b/src/platform/posix/posix_resolv_gai.c
index aea823a0..1c56778e 100644
--- a/src/platform/posix/posix_resolv_gai.c
+++ b/src/platform/posix/posix_resolv_gai.c
@@ -57,17 +57,17 @@ 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)) {
// Already canceled?
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.
@@ -263,6 +263,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) {
@@ -310,7 +311,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.
@@ -321,7 +322,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/posix/posix_tcpconn.c b/src/platform/posix/posix_tcpconn.c
index c0352c55..788c4e9f 100644
--- a/src/platform/posix/posix_tcpconn.c
+++ b/src/platform/posix/posix_tcpconn.c
@@ -243,9 +243,9 @@ tcp_conn_cb(nni_posix_pfd *pfd, int events, void *arg)
}
static void
-tcp_conn_cancel(nni_aio *aio, int rv)
+tcp_conn_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 (nni_aio_list_active(aio)) {
diff --git a/src/platform/posix/posix_tcpdial.c b/src/platform/posix/posix_tcpdial.c
index 21f6ecfe..ab3f3545 100644
--- a/src/platform/posix/posix_tcpdial.c
+++ b/src/platform/posix/posix_tcpdial.c
@@ -78,9 +78,9 @@ nni_tcp_dialer_fini(nni_tcp_dialer *d)
}
static void
-tcp_dialer_cancel(nni_aio *aio, int rv)
+tcp_dialer_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/posix/posix_tcplisten.c b/src/platform/posix/posix_tcplisten.c
index 8c186885..bc414cd0 100644
--- a/src/platform/posix/posix_tcplisten.c
+++ b/src/platform/posix/posix_tcplisten.c
@@ -165,9 +165,9 @@ tcp_listener_cb(nni_posix_pfd *pfd, int events, void *arg)
}
static void
-tcp_listener_cancel(nni_aio *aio, int rv)
+tcp_listener_cancel(nni_aio *aio, void *arg, int rv)
{
- nni_tcp_listener *l = nni_aio_get_prov_data(aio);
+ nni_tcp_listener *l = arg;
// This is dead easy, because we'll ignore the completion if there
// isn't anything to do the accept on!
diff --git a/src/platform/posix/posix_udp.c b/src/platform/posix/posix_udp.c
index 873a02a1..6b1ef399 100644
--- a/src/platform/posix/posix_udp.c
+++ b/src/platform/posix/posix_udp.c
@@ -269,9 +269,9 @@ nni_plat_udp_close(nni_plat_udp *udp)
}
void
-nni_plat_udp_cancel(nni_aio *aio, int rv)
+nni_plat_udp_cancel(nni_aio *aio, void *arg, int rv)
{
- nni_plat_udp *udp = nni_aio_get_prov_data(aio);
+ nni_plat_udp *udp = arg;
nni_mtx_lock(&udp->udp_mtx);
if (nni_aio_list_active(aio)) {