[Audio Player] Eliminate an avenue of lockups
Prevent the player from locking up in certain circumstances, by not locking chainQueue the entire time this function is processing. Signed-off-by: Christopher Snowhill <kode54@gmail.com>xcode15
parent
e37d1d15b1
commit
a1ea668a41
|
@ -357,15 +357,18 @@
|
|||
return YES;
|
||||
}
|
||||
|
||||
BufferChain *lastChain;
|
||||
|
||||
@synchronized(chainQueue) {
|
||||
newChain = [[BufferChain alloc] initWithController:self];
|
||||
|
||||
endOfInputReached = YES;
|
||||
|
||||
BufferChain *lastChain = [chainQueue lastObject];
|
||||
lastChain = [chainQueue lastObject];
|
||||
if(lastChain == nil) {
|
||||
lastChain = bufferChain;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL pathsEqual = NO;
|
||||
|
||||
|
@ -381,7 +384,9 @@
|
|||
if([lastChain setTrack:nextStream] && [newChain openWithInput:[lastChain inputNode] withUserInfo:nextStreamUserInfo withRGInfo:nextStreamRGInfo]) {
|
||||
[newChain setStreamURL:nextStream];
|
||||
|
||||
@synchronized(chainQueue) {
|
||||
[self addChainToQueue:newChain];
|
||||
}
|
||||
DLog(@"TRACK SET!!! %@", newChain);
|
||||
// Keep on-playin
|
||||
newChain = nil;
|
||||
|
@ -406,7 +411,9 @@
|
|||
newChain = [[BufferChain alloc] initWithController:self];
|
||||
}
|
||||
|
||||
@synchronized(chainQueue) {
|
||||
[self addChainToQueue:newChain];
|
||||
}
|
||||
|
||||
newChain = nil;
|
||||
|
||||
|
@ -420,7 +427,6 @@
|
|||
// - self.nextStream == next playlist entry's URL
|
||||
// - self.nextStreamUserInfo == next playlist entry
|
||||
// - head of chainQueue is the buffer chain for the next entry (which has launched its threads already)
|
||||
}
|
||||
|
||||
atomic_fetch_sub(&refCount, 1);
|
||||
return YES;
|
||||
|
|
Loading…
Reference in New Issue