From 6beebca44374597991aae775ba74038b48db2bb0 Mon Sep 17 00:00:00 2001 From: Thong Nguyen Date: Mon, 27 Jan 2014 16:28:38 +0000 Subject: [PATCH] Fixed deadlock on stopThread and dataSourceEof not always setting currentlReadingEntry to nil --- StreamingKit/StreamingKit/STKAudioPlayer.m | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/StreamingKit/StreamingKit/STKAudioPlayer.m b/StreamingKit/StreamingKit/STKAudioPlayer.m index b445dbd..7cfac01 100644 --- a/StreamingKit/StreamingKit/STKAudioPlayer.m +++ b/StreamingKit/StreamingKit/STKAudioPlayer.m @@ -2785,10 +2785,6 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ } } } - - OSSpinLockLock(¤tEntryReferencesLock); - currentlyReadingEntry = nil; - OSSpinLockUnlock(¤tEntryReferencesLock); } else { @@ -2796,6 +2792,11 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ self.internalState = AudioPlayerInternalStateStopped; } + OSSpinLockLock(¤tEntryReferencesLock); + currentlyReadingEntry = nil; + OSSpinLockUnlock(¤tEntryReferencesLock); + + pthread_mutex_unlock(&playerMutex); } @@ -2920,7 +2921,7 @@ static void AudioQueueIsRunningCallbackProc(void* userData, AudioQueueRef audioQ [self invokeOnPlaybackThread:^ { - pthread_mutex_lock(&playerMutex); + pthread_mutex_lock(&queueBuffersMutex); disposeWasRequested = YES; pthread_mutex_unlock(&queueBuffersMutex); }];