diff options
| author | Garrett D'Amore <garrett@damore.org> | 2017-08-11 13:58:06 -0700 |
|---|---|---|
| committer | Garrett D'Amore <garrett@damore.org> | 2017-08-11 13:58:06 -0700 |
| commit | 674a3ed159c0a6ec9b62208837c388502ed80088 (patch) | |
| tree | 11a2764a8f205ffc230971949108daec80b59f0b | |
| parent | 69e8b1517c6d84f30367c5c32e7426d81dc28265 (diff) | |
| download | nng-674a3ed159c0a6ec9b62208837c388502ed80088.tar.gz nng-674a3ed159c0a6ec9b62208837c388502ed80088.tar.bz2 nng-674a3ed159c0a6ec9b62208837c388502ed80088.zip | |
Windows fixes; especially idempotent init/fini.
This fixes one major problem, which was that if nni_fini() was called
once on Windows, it would not be further possible to call nni_init().
While here fixed a few compilation issues.
| -rw-r--r-- | src/core/socket.c | 1 | ||||
| -rw-r--r-- | src/platform/windows/win_thread.c | 10 | ||||
| -rw-r--r-- | tests/device.c | 1 | ||||
| -rw-r--r-- | tests/message.c | 1 | ||||
| -rw-r--r-- | tests/pair1.c | 3 | ||||
| -rw-r--r-- | tests/sock.c | 3 |
6 files changed, 9 insertions, 10 deletions
diff --git a/src/core/socket.c b/src/core/socket.c index 711cd57a..9471e56e 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -403,6 +403,7 @@ void nni_sock_sys_fini(void) { nni_idhash_fini(nni_sock_hash); + nni_sock_hash = NULL; nni_mtx_fini(&nni_sock_lk); } diff --git a/src/platform/windows/win_thread.c b/src/platform/windows/win_thread.c index f78bfd9a..c01ec782 100644 --- a/src/platform/windows/win_thread.c +++ b/src/platform/windows/win_thread.c @@ -141,20 +141,21 @@ nni_plat_thr_fini(nni_plat_thr *thr) } } +static LONG plat_inited = 0; + int nni_plat_init(int (*helper)(void)) { - static LONG inited = 0; int rv; static SRWLOCK lock = SRWLOCK_INIT; - if (inited) { + if (plat_inited) { return (0); // fast path } AcquireSRWLockExclusive(&lock); - if (!inited) { + if (!plat_inited) { if ((rv = nni_win_iocp_sysinit()) != 0) { goto out; } @@ -169,7 +170,7 @@ nni_plat_init(int (*helper)(void)) } helper(); - inited = 1; + plat_inited = 1; } out: @@ -186,6 +187,7 @@ nni_plat_fini(void) nni_win_tcp_sysfini(); nni_win_iocp_sysfini(); WSACleanup(); + plat_inited = 0; } #else diff --git a/tests/device.c b/tests/device.c index 2d3958ea..e5239f25 100644 --- a/tests/device.c +++ b/tests/device.c @@ -47,7 +47,6 @@ Main({ int raw; uint64_t tmo; nng_msg * msg; - int rv; void * thr; So(nng_pair1_open(&dev1) == 0); diff --git a/tests/message.c b/tests/message.c index 95954dc0..2dfa67fb 100644 --- a/tests/message.c +++ b/tests/message.c @@ -15,7 +15,6 @@ static uint8_t dat123[] = { 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3 }; TestMain("Message Tests", { - int rv; nng_msg *msg; Convey("Given an empty message", { diff --git a/tests/pair1.c b/tests/pair1.c index 51ba38a3..2ccbe2e7 100644 --- a/tests/pair1.c +++ b/tests/pair1.c @@ -48,7 +48,6 @@ TestMain("PAIRv1 protocol", { Convey("Monogamous cooked mode works", { nng_msg *msg; - int rv; So(nng_listen(s1, addr, NULL, NNG_FLAG_SYNCH) == 0); So(nng_dial(c1, addr, NULL, NNG_FLAG_SYNCH) == 0); @@ -113,7 +112,6 @@ TestMain("PAIRv1 protocol", { Convey("Polyamorous cooked mode works", { nng_msg *msg; - int rv; int poly; nng_pipe p1; nng_pipe p2; @@ -183,7 +181,6 @@ TestMain("PAIRv1 protocol", { Convey("Polyamorous raw mode works", { nng_msg *msg; - int rv; int poly; int raw; uint32_t hops; diff --git a/tests/sock.c b/tests/sock.c index bec62817..4ac2fe35 100644 --- a/tests/sock.c +++ b/tests/sock.c @@ -175,7 +175,8 @@ Main({ So(rmax == 6550); if (sizeof(size_t) == 8) { - rmax = 0x1000000000000ull; + rmax = 0x10000; + rmax <<= 30; So(nng_setopt(sock, NNG_OPT_RCVMAXSZ, &rmax, sizeof(rmax)) == |
