From: Stephen Seo Date: Thu, 7 Mar 2019 03:16:03 +0000 (+0900) Subject: Fix UDPC destruct order when using thread X-Git-Tag: 1.0~212 X-Git-Url: https://git.seodisparate.com/stephenseo/client_config?a=commitdiff_plain;h=05ece7c6261275bb0764c205f224104e14a5ace7;p=UDPConnection Fix UDPC destruct order when using thread --- diff --git a/src/UDPConnection.c b/src/UDPConnection.c index 0c9dd5e..7f1fcbc 100644 --- a/src/UDPConnection.c +++ b/src/UDPConnection.c @@ -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); }