Fix this bug again
@@ -309,16 +309,17 @@ static void audioCallback(GB_gameboy_t *gb, GB_sample_t *sample)
GB_set_sample_rate(&gb, 96000);
self.audioClient = [[GBAudioClient alloc] initWithRendererBlock:^(UInt32 sampleRate, UInt32 nFrames, GB_sample_t *buffer) {
[audioLock lock];
- if (stopping) {
- memset(buffer, 0, nFrames * sizeof(*buffer));
- [audioLock unlock];
- }
if (audioBufferPosition < nFrames) {
audioBufferNeeded = nFrames;
[audioLock wait];
}
+ if (stopping) {
+ memset(buffer, 0, nFrames * sizeof(*buffer));
+ [audioLock unlock];
+ }
+
if (audioBufferPosition >= nFrames && audioBufferPosition < nFrames + 4800) {
memcpy(buffer, audioBuffer, nFrames * sizeof(*buffer));
memmove(audioBuffer, audioBuffer + nFrames, (audioBufferPosition - nFrames) * sizeof(*buffer));
@@ -376,6 +377,7 @@ static void audioCallback(GB_gameboy_t *gb, GB_sample_t *sample)
}
[audioLock lock];
stopping = true;
+ [audioLock signal];
[audioLock unlock];
running = false;
while (stopping);
