summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoseph Henry <[email protected]>2023-08-04 08:49:11 -0700
committerGitHub <[email protected]>2023-08-04 08:49:11 -0700
commit624038dd93ca0d416bb20102e41ca67ea51335d4 (patch)
treeabea0dc728d2c13dc8851fb2cc55005ce61e7e19
parentdd0d606422b19f89029a3664bf6bc723efceef21 (diff)
parentdd45f9fb45c491b65e93743ae48788845ff2fc5e (diff)
Merge pull request #243 from zerotier/bugfix/242
Fix https://github.com/zerotier/libzt/issues/242
-rw-r--r--src/Events.cpp2
-rw-r--r--test/ExitTest.java77
2 files changed, 79 insertions, 0 deletions
diff --git a/src/Events.cpp b/src/Events.cpp
index dd62f3e..57cdc20 100644
--- a/src/Events.cpp
+++ b/src/Events.cpp
@@ -197,6 +197,8 @@ void Events::sendToUser(zts_event_msg_t* msg)
id = msg->peer ? msg->peer->peer_id : 0;
}
env->CallVoidMethod(javaCbObjRef, javaCbMethodId, id, msg->event_code);
+
+ jvm->DetachCurrentThread();
}
#endif // ZTS_ENABLE_JAVA
#ifdef ZTS_ENABLE_PINVOKE
diff --git a/test/ExitTest.java b/test/ExitTest.java
new file mode 100644
index 0000000..be5b28e
--- /dev/null
+++ b/test/ExitTest.java
@@ -0,0 +1,77 @@
+import com.zerotier.sockets.*;
+
+//
+// Test for:
+// Java process does not exit after finishing libzt work
+// https://github.com/zerotier/libzt/issues/242
+//
+// Run and ensure that process exits
+//
+public class ExitTest {
+
+ public static void main(String[] args) throws InterruptedException {
+
+ long networkId = Long.parseUnsignedLong("ebe7fbd445e76ac6", 16);
+ String storagePath = "exittest_storage";
+
+ ZeroTierNode node = new ZeroTierNode();
+ node.initFromStorage(storagePath);
+ node.initSetEventHandler(new ZeroTierEventListener() {
+ @Override
+ public void onZeroTierEvent(long l, int eventCode) {
+ if (eventCode == ZeroTierNative.ZTS_EVENT_NODE_UP) {
+ System.err.println("ZTS_EVENT_NODE_UP");
+ }
+ if (eventCode == ZeroTierNative.ZTS_EVENT_NODE_ONLINE) {
+ System.err.println("ZTS_EVENT_NODE_ONLINE");
+ }
+ if (eventCode == ZeroTierNative.ZTS_EVENT_NODE_OFFLINE) {
+ System.err.println("ZTS_EVENT_NODE_OFFLINE");
+ }
+ if (eventCode == ZeroTierNative.ZTS_EVENT_NODE_DOWN) {
+ System.err.println("ZTS_EVENT_NODE_DOWN");
+ }
+ if (eventCode == ZeroTierNative.ZTS_EVENT_NETWORK_READY_IP4) {
+ System.err.println("ZTS_EVENT_NETWORK_READY_IP4");
+ }
+ if (eventCode == ZeroTierNative.ZTS_EVENT_NETWORK_READY_IP6) {
+ System.err.println("ZTS_EVENT_NETWORK_READY_IP6");
+ }
+ if (eventCode == ZeroTierNative.ZTS_EVENT_NETWORK_DOWN) {
+ System.err.println("ZTS_EVENT_NETWORK_DOWN");
+ }
+ if (eventCode == ZeroTierNative.ZTS_EVENT_NETWORK_OK) {
+ System.err.println("ZTS_EVENT_NETWORK_OK");
+ }
+ if (eventCode == ZeroTierNative.ZTS_EVENT_NETWORK_ACCESS_DENIED) {
+ System.err.println("ZTS_EVENT_NETWORK_ACCESS_DENIED");
+ }
+ if (eventCode == ZeroTierNative.ZTS_EVENT_NETWORK_NOT_FOUND) {
+ System.err.println("ZTS_EVENT_NETWORK_NOT_FOUND");
+ }
+ }
+ });
+
+ System.err.println("start");
+ node.start();
+
+ System.err.println("delay until online");
+ while (!node.isOnline()) {
+ ZeroTierNative.zts_util_delay(50);
+ }
+ System.err.println("done delaying");
+
+ System.out.println("join");
+ node.join(networkId);
+
+ System.out.println("delaying until transport ready");
+ while (! node.isNetworkTransportReady(networkId)) {
+ ZeroTierNative.zts_util_delay(50);
+ }
+
+ System.err.println("stop");
+ node.stop();
+
+ System.err.println("exiting");
+ }
+}