GBA Thread: Fix uses of videoFrameOn being overridden

This commit is contained in:
Jeffrey Pfau 2015-06-07 14:26:43 -07:00
parent 982408281e
commit 870417d46e
2 changed files with 9 additions and 3 deletions

View File

@ -619,11 +619,12 @@ void GBARunOnThread(struct GBAThread* threadContext, void (*run)(struct GBAThrea
}
void GBAThreadPause(struct GBAThread* threadContext) {
bool frameOn = true;
bool frameOn = threadContext->sync.videoFrameOn;
MutexLock(&threadContext->stateMutex);
_waitOnInterrupt(threadContext);
if (threadContext->state == THREAD_RUNNING) {
_pauseThread(threadContext, false);
threadContext->frameWasOn = frameOn;
frameOn = false;
}
MutexUnlock(&threadContext->stateMutex);
@ -632,15 +633,17 @@ void GBAThreadPause(struct GBAThread* threadContext) {
}
void GBAThreadUnpause(struct GBAThread* threadContext) {
bool frameOn = threadContext->sync.videoFrameOn;
MutexLock(&threadContext->stateMutex);
_waitOnInterrupt(threadContext);
if (threadContext->state == THREAD_PAUSED || threadContext->state == THREAD_PAUSING) {
threadContext->state = THREAD_RUNNING;
ConditionWake(&threadContext->stateCond);
frameOn = threadContext->frameWasOn;
}
MutexUnlock(&threadContext->stateMutex);
_changeVideoSync(&threadContext->sync, true);
_changeVideoSync(&threadContext->sync, frameOn);
}
bool GBAThreadIsPaused(struct GBAThread* threadContext) {
@ -653,14 +656,16 @@ bool GBAThreadIsPaused(struct GBAThread* threadContext) {
}
void GBAThreadTogglePause(struct GBAThread* threadContext) {
bool frameOn = true;
bool frameOn = threadContext->sync.videoFrameOn;
MutexLock(&threadContext->stateMutex);
_waitOnInterrupt(threadContext);
if (threadContext->state == THREAD_PAUSED || threadContext->state == THREAD_PAUSING) {
threadContext->state = THREAD_RUNNING;
ConditionWake(&threadContext->stateCond);
frameOn = threadContext->frameWasOn;
} else if (threadContext->state == THREAD_RUNNING) {
_pauseThread(threadContext, false);
threadContext->frameWasOn = frameOn;
frameOn = false;
}
MutexUnlock(&threadContext->stateMutex);

View File

@ -91,6 +91,7 @@ struct GBAThread {
Condition stateCond;
enum ThreadState savedState;
int interruptDepth;
bool frameWasOn;
GBALogHandler logHandler;
int logLevel;