aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGarrett D'Amore <garrett@damore.org>2017-08-11 13:58:06 -0700
committerGarrett D'Amore <garrett@damore.org>2017-08-11 13:58:06 -0700
commit674a3ed159c0a6ec9b62208837c388502ed80088 (patch)
tree11a2764a8f205ffc230971949108daec80b59f0b
parent69e8b1517c6d84f30367c5c32e7426d81dc28265 (diff)
downloadnng-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.c1
-rw-r--r--src/platform/windows/win_thread.c10
-rw-r--r--tests/device.c1
-rw-r--r--tests/message.c1
-rw-r--r--tests/pair1.c3
-rw-r--r--tests/sock.c3
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)) ==