]> git.seodisparate.com - UDPConnection/commitdiff
Fix UDPC destruct order when using thread
authorStephen Seo <seo.disparate@gmail.com>
Thu, 7 Mar 2019 03:16:03 +0000 (12:16 +0900)
committerStephen Seo <seo.disparate@gmail.com>
Thu, 7 Mar 2019 03:16:03 +0000 (12:16 +0900)
src/UDPConnection.c

index 0c9dd5ed83e3d0139498f7e747bb330f15b49b49..7f1fcbc2053e22590c181a1583794774c0045776 100644 (file)
@@ -157,6 +157,20 @@ UDPC_Context* UDPC_init_threaded_update(uint16_t listenPort, uint32_t listenAddr
 
 void UDPC_destroy(UDPC_Context *ctx)
 {
+    if(ctx->isThreaded != 0)
+    {
+        mtx_lock(&ctx->tflagsMtx);
+        ctx->threadFlags |= 0x1;
+        mtx_unlock(&ctx->tflagsMtx);
+        cnd_broadcast(&ctx->threadCV);
+
+        thrd_join(ctx->threadHandle, NULL);
+
+        mtx_destroy(&ctx->tCVMtx);
+        mtx_destroy(&ctx->tflagsMtx);
+        cnd_destroy(&ctx->threadCV);
+    }
+
     CleanupSocket(ctx->socketHandle);
     UDPC_HashMap_itercall(ctx->conMap, UDPC_INTERNAL_destroy_conMap, NULL);
     UDPC_HashMap_destroy(ctx->conMap);
@@ -172,20 +186,6 @@ void UDPC_destroy(UDPC_Context *ctx)
     }
     UDPC_Deque_destroy(ctx->receivedPackets);
 
-    if(ctx->isThreaded != 0)
-    {
-        mtx_lock(&ctx->tflagsMtx);
-        ctx->threadFlags |= 0x1;
-        mtx_unlock(&ctx->tflagsMtx);
-        cnd_broadcast(&ctx->threadCV);
-
-        thrd_join(ctx->threadHandle, NULL);
-
-        mtx_destroy(&ctx->tCVMtx);
-        mtx_destroy(&ctx->tflagsMtx);
-        cnd_destroy(&ctx->threadCV);
-    }
-
     free(ctx);
 }