From 9686f6942fe505dfcc62447a923726be3c3f54a8 Mon Sep 17 00:00:00 2001 From: Cameron Gutman Date: Sat, 17 Feb 2024 18:14:03 -0600 Subject: [PATCH] Consolidate PltCloseThread() and PltJoinThread() --- src/AudioStream.c | 7 ------- src/ControlStream.c | 18 ------------------ src/InputStream.c | 1 - src/Platform.c | 29 +++++++---------------------- src/PlatformThreads.h | 1 - src/VideoStream.c | 15 --------------- 6 files changed, 7 insertions(+), 64 deletions(-) diff --git a/src/AudioStream.c b/src/AudioStream.c index 80e012c..5bc5946 100644 --- a/src/AudioStream.c +++ b/src/AudioStream.c @@ -128,7 +128,6 @@ void destroyAudioStream(void) { if (pingThreadStarted) { PltInterruptThread(&udpPingThread); PltJoinThread(&udpPingThread); - PltCloseThread(&udpPingThread); } closeSocket(rtpSocket); @@ -416,11 +415,6 @@ void stopAudioStream(void) { PltJoinThread(&decoderThread); } - PltCloseThread(&receiveThread); - if ((AudioCallbacks.capabilities & CAPABILITY_DIRECT_SUBMIT) == 0) { - PltCloseThread(&decoderThread); - } - AudioCallbacks.cleanup(); } @@ -463,7 +457,6 @@ int startAudioStream(void* audioContext, int arFlags) { AudioCallbacks.stop(); PltInterruptThread(&receiveThread); PltJoinThread(&receiveThread); - PltCloseThread(&receiveThread); closeSocket(rtpSocket); AudioCallbacks.cleanup(); return err; diff --git a/src/ControlStream.c b/src/ControlStream.c index fd94242..d86f4ca 100644 --- a/src/ControlStream.c +++ b/src/ControlStream.c @@ -1552,16 +1552,10 @@ int stopControlStream(void) { PltJoinThread(&controlReceiveThread); PltJoinThread(&asyncCallbackThread); - PltCloseThread(&lossStatsThread); - PltCloseThread(&requestIdrFrameThread); - PltCloseThread(&controlReceiveThread); - PltCloseThread(&asyncCallbackThread); - // We will only have an RFI thread if RFI is enabled if (isReferenceFrameInvalidationEnabled()) { PltInterruptThread(&invalidateRefFramesThread); PltJoinThread(&invalidateRefFramesThread); - PltCloseThread(&invalidateRefFramesThread); } if (peer != NULL) { @@ -1778,7 +1772,6 @@ int startControlStream(void) { PltInterruptThread(&controlReceiveThread); PltJoinThread(&controlReceiveThread); - PltCloseThread(&controlReceiveThread); if (ctlSock != INVALID_SOCKET) { closeSocket(ctlSock); @@ -1813,7 +1806,6 @@ int startControlStream(void) { PltInterruptThread(&controlReceiveThread); PltJoinThread(&controlReceiveThread); - PltCloseThread(&controlReceiveThread); if (ctlSock != INVALID_SOCKET) { closeSocket(ctlSock); @@ -1841,7 +1833,6 @@ int startControlStream(void) { PltInterruptThread(&controlReceiveThread); PltJoinThread(&controlReceiveThread); - PltCloseThread(&controlReceiveThread); if (ctlSock != INVALID_SOCKET) { closeSocket(ctlSock); @@ -1869,11 +1860,9 @@ int startControlStream(void) { PltInterruptThread(&lossStatsThread); PltJoinThread(&lossStatsThread); - PltCloseThread(&lossStatsThread); PltInterruptThread(&controlReceiveThread); PltJoinThread(&controlReceiveThread); - PltCloseThread(&controlReceiveThread); if (ctlSock != INVALID_SOCKET) { closeSocket(ctlSock); @@ -1903,15 +1892,12 @@ int startControlStream(void) { PltInterruptThread(&lossStatsThread); PltJoinThread(&lossStatsThread); - PltCloseThread(&lossStatsThread); PltInterruptThread(&controlReceiveThread); PltJoinThread(&controlReceiveThread); - PltCloseThread(&controlReceiveThread); PltInterruptThread(&requestIdrFrameThread); PltJoinThread(&requestIdrFrameThread); - PltCloseThread(&requestIdrFrameThread); if (ctlSock != INVALID_SOCKET) { closeSocket(ctlSock); @@ -1944,19 +1930,15 @@ int startControlStream(void) { PltInterruptThread(&lossStatsThread); PltJoinThread(&lossStatsThread); - PltCloseThread(&lossStatsThread); PltInterruptThread(&controlReceiveThread); PltJoinThread(&controlReceiveThread); - PltCloseThread(&controlReceiveThread); PltInterruptThread(&requestIdrFrameThread); PltJoinThread(&requestIdrFrameThread); - PltCloseThread(&requestIdrFrameThread); PltInterruptThread(&asyncCallbackThread); PltJoinThread(&asyncCallbackThread); - PltCloseThread(&asyncCallbackThread); if (ctlSock != INVALID_SOCKET) { closeSocket(ctlSock); diff --git a/src/InputStream.c b/src/InputStream.c index 51feed8..e61e2be 100644 --- a/src/InputStream.c +++ b/src/InputStream.c @@ -736,7 +736,6 @@ int stopInputStream(void) { // input packets before shutting down. LbqSignalQueueDrain(&packetQueue); PltJoinThread(&inputSendThread); - PltCloseThread(&inputSendThread); if (inputSock != INVALID_SOCKET) { shutdownTcpSocket(inputSock); diff --git a/src/Platform.c b/src/Platform.c index 625b924..1d6e064 100644 --- a/src/Platform.c +++ b/src/Platform.c @@ -186,25 +186,25 @@ void PltUnlockMutex(PLT_MUTEX* mutex) { } void PltJoinThread(PLT_THREAD* thread) { + activeThreads--; + #if defined(LC_WINDOWS) WaitForSingleObjectEx(thread->handle, INFINITE, FALSE); + CloseHandle(thread->handle); #elif defined(__vita__) - while(thread->alive) { - PltSleepMs(10); - } - if (thread->context != NULL) - free(thread->context); + sceKernelWaitThreadEnd(thread->handle, NULL, NULL); + sceKernelDeleteThread(thread->handle); #elif defined(__WIIU__) OSJoinThread(&thread->thread, NULL); #elif defined(__3DS__) threadJoin(thread->thread, U64_MAX); + threadFree(thread->thread); #else pthread_join(thread->thread, NULL); #endif } -void PltDetachThread(PLT_THREAD* thread) -{ +void PltDetachThread(PLT_THREAD* thread) { // Assume detached threads are no longer active activeThreads--; @@ -223,21 +223,6 @@ void PltDetachThread(PLT_THREAD* thread) #endif } -void PltCloseThread(PLT_THREAD* thread) { - activeThreads--; -#if defined(LC_WINDOWS) - CloseHandle(thread->handle); -#elif defined(__vita__) - sceKernelDeleteThread(thread->handle); -#elif defined(__WIIU__) - // Thread is automatically closed after join -#elif defined(__3DS__) - threadFree(thread->thread); -#else - // Thread is automatically closed after join -#endif -} - bool PltIsThreadInterrupted(PLT_THREAD* thread) { return thread->cancelled; } diff --git a/src/PlatformThreads.h b/src/PlatformThreads.h index 75d1980..a8ca351 100644 --- a/src/PlatformThreads.h +++ b/src/PlatformThreads.h @@ -62,7 +62,6 @@ void PltLockMutex(PLT_MUTEX* mutex); void PltUnlockMutex(PLT_MUTEX* mutex); int PltCreateThread(const char* name, ThreadEntry entry, void* context, PLT_THREAD* thread); -void PltCloseThread(PLT_THREAD* thread); void PltInterruptThread(PLT_THREAD* thread); bool PltIsThreadInterrupted(PLT_THREAD* thread); void PltJoinThread(PLT_THREAD* thread); diff --git a/src/VideoStream.c b/src/VideoStream.c index 28be7cb..a2def84 100644 --- a/src/VideoStream.c +++ b/src/VideoStream.c @@ -302,12 +302,6 @@ void stopVideoStream(void) { if ((VideoCallbacks.capabilities & (CAPABILITY_DIRECT_SUBMIT | CAPABILITY_PULL_RENDERER)) == 0) { PltJoinThread(&decoderThread); } - - PltCloseThread(&udpPingThread); - PltCloseThread(&receiveThread); - if ((VideoCallbacks.capabilities & (CAPABILITY_DIRECT_SUBMIT | CAPABILITY_PULL_RENDERER)) == 0) { - PltCloseThread(&decoderThread); - } if (firstFrameSocket != INVALID_SOCKET) { closeSocket(firstFrameSocket); @@ -360,7 +354,6 @@ int startVideoStream(void* rendererContext, int drFlags) { VideoCallbacks.stop(); PltInterruptThread(&receiveThread); PltJoinThread(&receiveThread); - PltCloseThread(&receiveThread); closeSocket(rtpSocket); VideoCallbacks.cleanup(); return err; @@ -382,10 +375,6 @@ int startVideoStream(void* rendererContext, int drFlags) { if ((VideoCallbacks.capabilities & (CAPABILITY_DIRECT_SUBMIT | CAPABILITY_PULL_RENDERER)) == 0) { PltJoinThread(&decoderThread); } - PltCloseThread(&receiveThread); - if ((VideoCallbacks.capabilities & (CAPABILITY_DIRECT_SUBMIT | CAPABILITY_PULL_RENDERER)) == 0) { - PltCloseThread(&decoderThread); - } closeSocket(rtpSocket); VideoCallbacks.cleanup(); return LastSocketError(); @@ -406,10 +395,6 @@ int startVideoStream(void* rendererContext, int drFlags) { if ((VideoCallbacks.capabilities & (CAPABILITY_DIRECT_SUBMIT | CAPABILITY_PULL_RENDERER)) == 0) { PltJoinThread(&decoderThread); } - PltCloseThread(&receiveThread); - if ((VideoCallbacks.capabilities & (CAPABILITY_DIRECT_SUBMIT | CAPABILITY_PULL_RENDERER)) == 0) { - PltCloseThread(&decoderThread); - } closeSocket(rtpSocket); if (firstFrameSocket != INVALID_SOCKET) { closeSocket(firstFrameSocket);