From 5bed376e5cbc412db156b5046099b560a244d8f3 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Fri, 4 Sep 2015 01:48:24 -0700 Subject: [PATCH] GBA Video: Clean up thread proxy a bit --- src/gba/renderers/thread-proxy.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/gba/renderers/thread-proxy.c b/src/gba/renderers/thread-proxy.c index 5ec49042f..74ec22651 100644 --- a/src/gba/renderers/thread-proxy.c +++ b/src/gba/renderers/thread-proxy.c @@ -69,7 +69,7 @@ void GBAVideoThreadProxyRendererInit(struct GBAVideoRenderer* renderer) { ConditionInit(&proxyRenderer->fromThreadCond); ConditionInit(&proxyRenderer->toThreadCond); MutexInit(&proxyRenderer->mutex); - RingFIFOInit(&proxyRenderer->dirtyQueue, 0x200000, 0x1000); + RingFIFOInit(&proxyRenderer->dirtyQueue, 0x40000, 0x1000); proxyRenderer->threadState = PROXY_THREAD_STOPPED; proxyRenderer->vramProxy = anonymousMemoryMap(SIZE_VRAM); @@ -299,16 +299,23 @@ static THREAD_ENTRY _proxyThread(void* renderer) { break; default: // FIFO was corrupted - abort(); + proxyRenderer->threadState = PROXY_THREAD_STOPPED; break; } } MutexLock(&proxyRenderer->mutex); - proxyRenderer->threadState = PROXY_THREAD_IDLE; ConditionWake(&proxyRenderer->fromThreadCond); + if (proxyRenderer->threadState != PROXY_THREAD_STOPPED) { + proxyRenderer->threadState = PROXY_THREAD_IDLE; + } else { + break; + } } MutexUnlock(&proxyRenderer->mutex); +#ifdef _3DS + svcExitThread(); +#endif return 0; }