diff --git a/AudioScrobbler/AudioScrobbler.m b/AudioScrobbler/AudioScrobbler.m index c24c0b631..919a81265 100644 --- a/AudioScrobbler/AudioScrobbler.m +++ b/AudioScrobbler/AudioScrobbler.m @@ -192,7 +192,7 @@ escapeForLastFM(NSString *string) - (void) processAudioScrobblerCommands:(AudioScrobbler *)myself { - NSAutoreleasePool *pool = nil; + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; AudioScrobblerClient *client = [[AudioScrobblerClient alloc] init]; mach_timespec_t timeout = { 5, 0 }; NSEnumerator *enumerator = nil; @@ -201,9 +201,7 @@ escapeForLastFM(NSString *string) in_port_t port = 33367; while([myself keepProcessingAudioScrobblerCommands]) { - if (pool) - [pool release]; - pool = [[NSAutoreleasePool alloc] init]; + NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; // Get the first command to be sent @synchronized([myself queue]) { @@ -231,15 +229,15 @@ escapeForLastFM(NSString *string) @catch(NSException *exception) { [client shutdown]; // NSLog(@"Exception: %@",exception); + [pool release]; continue; } } - + semaphore_timedwait([myself semaphore], timeout); + [pool release]; } - [pool release]; - // Send a final stop command to cleanup @try { if([client connectToHost:@"localhost" port:port]) { @@ -259,7 +257,7 @@ escapeForLastFM(NSString *string) [client release]; [myself setAudioScrobblerThreadCompleted:YES]; - + [pool release]; } diff --git a/Plugins/CoreAudio/CoreAudioDecoder.m b/Plugins/CoreAudio/CoreAudioDecoder.m index 8b86974fe..6a0e00442 100644 --- a/Plugins/CoreAudio/CoreAudioDecoder.m +++ b/Plugins/CoreAudio/CoreAudioDecoder.m @@ -44,10 +44,11 @@ FSRef ref; NSURL *url = [source url]; + [source close]; //There's no room for your kind around here! + if (![[url scheme] isEqualToString:@"file"]) return NO; - [source close]; //There's no room for your kind around here! // Open the input file err = FSPathMakeRef((const UInt8 *)[[url path] UTF8String], &ref, NULL); diff --git a/Plugins/CoreAudio/CoreAudioPropertiesReader.m b/Plugins/CoreAudio/CoreAudioPropertiesReader.m index 30ed22f8f..3839a47eb 100644 --- a/Plugins/CoreAudio/CoreAudioPropertiesReader.m +++ b/Plugins/CoreAudio/CoreAudioPropertiesReader.m @@ -19,12 +19,14 @@ decoder = [[CoreAudioDecoder alloc] init]; if (![decoder open:source]) { + [decoder release]; return nil; } properties = [decoder properties]; [decoder close]; + [decoder release]; return properties; } diff --git a/Plugins/CueSheet/CueSheet.xcodeproj/project.pbxproj b/Plugins/CueSheet/CueSheet.xcodeproj/project.pbxproj index bd1210f87..e029cf9f2 100644 --- a/Plugins/CueSheet/CueSheet.xcodeproj/project.pbxproj +++ b/Plugins/CueSheet/CueSheet.xcodeproj/project.pbxproj @@ -98,12 +98,12 @@ 8E8D42360CBB0F9800135C1B /* CueSheetDecoder.m */, 17F3BB660CBC560700864489 /* CueSheetPropertiesReader.h */, 17F3BB670CBC560700864489 /* CueSheetPropertiesReader.m */, + 17DA346C0CC04FCD0003F6B2 /* CueSheetMetadataReader.h */, + 17DA346D0CC04FCD0003F6B2 /* CueSheetMetadataReader.m */, 8E8D424B0CBB11C600135C1B /* CueSheet.h */, 8E8D424C0CBB11C600135C1B /* CueSheet.m */, 8E8D43550CBB1AE900135C1B /* CueSheetTrack.h */, 8E8D43560CBB1AE900135C1B /* CueSheetTrack.m */, - 17DA346C0CC04FCD0003F6B2 /* CueSheetMetadataReader.h */, - 17DA346D0CC04FCD0003F6B2 /* CueSheetMetadataReader.m */, ); name = Classes; sourceTree = ""; diff --git a/Plugins/CueSheet/CueSheetPropertiesReader.m b/Plugins/CueSheet/CueSheetPropertiesReader.m index d68b3e070..180931d27 100755 --- a/Plugins/CueSheet/CueSheetPropertiesReader.m +++ b/Plugins/CueSheet/CueSheetPropertiesReader.m @@ -19,6 +19,7 @@ decoder = [[CueSheetDecoder alloc] init]; if (![decoder open:source]) { + [decoder release]; return nil; } diff --git a/Plugins/Dumb/DumbPropertiesReader.m b/Plugins/Dumb/DumbPropertiesReader.m index f49102e30..9cea5d8e1 100755 --- a/Plugins/Dumb/DumbPropertiesReader.m +++ b/Plugins/Dumb/DumbPropertiesReader.m @@ -20,6 +20,7 @@ if (![decoder open:source]) { NSLog(@"Could not open"); + [decoder release]; return nil; } diff --git a/Plugins/Flac/FlacDecoder.m b/Plugins/Flac/FlacDecoder.m index 7a54665ba..8fab12dde 100644 --- a/Plugins/Flac/FlacDecoder.m +++ b/Plugins/Flac/FlacDecoder.m @@ -240,6 +240,7 @@ void ErrorCallback(const FLAC__StreamDecoder *decoder, FLAC__StreamDecoderErrorS { free(buffer); } + [self setSource:nil]; decoder = NULL; buffer = NULL; diff --git a/Plugins/Flac/FlacPropertiesReader.m b/Plugins/Flac/FlacPropertiesReader.m index da78e3f7f..4babef88f 100644 --- a/Plugins/Flac/FlacPropertiesReader.m +++ b/Plugins/Flac/FlacPropertiesReader.m @@ -19,12 +19,14 @@ decoder = [[FlacDecoder alloc] init]; if (![decoder open:source]) { + [decoder release]; return nil; } properties = [decoder properties]; [decoder close]; + [decoder release]; return properties; } diff --git a/Plugins/GME/GamePropertiesReader.m b/Plugins/GME/GamePropertiesReader.m index 984a718db..d7f4ea156 100755 --- a/Plugins/GME/GamePropertiesReader.m +++ b/Plugins/GME/GamePropertiesReader.m @@ -20,6 +20,7 @@ if (![decoder open:source]) { NSLog(@"Could not open"); + [decoder release]; return nil; } diff --git a/Plugins/MAD/MADDecoder.m b/Plugins/MAD/MADDecoder.m index a35151381..c590cc3cc 100644 --- a/Plugins/MAD/MADDecoder.m +++ b/Plugins/MAD/MADDecoder.m @@ -554,6 +554,12 @@ static inline signed int scale (mad_fixed_t sample) [_source release]; _source = nil; } + + if (_outputBuffer) + { + free(_outputBuffer); + _outputBuffer = NULL; + } mad_synth_finish(&_synth); mad_frame_finish(&_frame); diff --git a/Plugins/MAD/MADPropertiesReader.m b/Plugins/MAD/MADPropertiesReader.m index 2c1fb536f..298c83991 100644 --- a/Plugins/MAD/MADPropertiesReader.m +++ b/Plugins/MAD/MADPropertiesReader.m @@ -19,12 +19,14 @@ decoder = [[MADDecoder alloc] init]; if (![decoder open:source]) { + [decoder release]; return nil; } properties = [decoder properties]; [decoder close]; + [decoder release]; return properties; } diff --git a/Plugins/MonkeysAudio/MonkeysAudioPropertiesReader.mm b/Plugins/MonkeysAudio/MonkeysAudioPropertiesReader.mm index d0eeea244..bec0241b4 100644 --- a/Plugins/MonkeysAudio/MonkeysAudioPropertiesReader.mm +++ b/Plugins/MonkeysAudio/MonkeysAudioPropertiesReader.mm @@ -19,12 +19,14 @@ decoder = [[MonkeysAudioDecoder alloc] init]; if (![decoder open:source]) { + [decoder release]; return nil; } properties = [decoder properties]; [decoder close]; + [decoder release]; return properties; } diff --git a/Plugins/Musepack/MusepackPropertiesReader.m b/Plugins/Musepack/MusepackPropertiesReader.m index 4266251f3..f4e104272 100644 --- a/Plugins/Musepack/MusepackPropertiesReader.m +++ b/Plugins/Musepack/MusepackPropertiesReader.m @@ -19,12 +19,14 @@ decoder = [[MusepackDecoder alloc] init]; if (![decoder open:source]) { + [decoder release]; return nil; } properties = [decoder properties]; [decoder close]; + [decoder release]; return properties; } diff --git a/Plugins/Shorten/ShortenDecoder.mm b/Plugins/Shorten/ShortenDecoder.mm index 624d4aeb7..6d81e1ec4 100644 --- a/Plugins/Shorten/ShortenDecoder.mm +++ b/Plugins/Shorten/ShortenDecoder.mm @@ -13,11 +13,11 @@ - (BOOL)open:(id)source { NSURL *url = [source url]; + [source close]; + if (![[url scheme] isEqualToString:@"file"]) return NO; - [source close]; - decoder = new shn_reader; if (!decoder) @@ -50,7 +50,7 @@ totalRead = 0; - //For some reason the busy loop is causing pops when output is set to 48000. Probably CPU starvation, since the SHN decoder seems to use a multithreaded approach. + //For some reason the busy loop is causing pops when output is set to 48000. Probably CPU starvation, since the SHN decoder seems to use a multithreaded nonblocking approach. // while (totalRead < size) { amountToRead = size - totalRead; if (amountToRead > bufferSize) { diff --git a/Plugins/Shorten/ShortenPropertiesReader.mm b/Plugins/Shorten/ShortenPropertiesReader.mm index 92ddf7d34..18f27cd06 100644 --- a/Plugins/Shorten/ShortenPropertiesReader.mm +++ b/Plugins/Shorten/ShortenPropertiesReader.mm @@ -19,12 +19,14 @@ decoder = [[ShortenDecoder alloc] init]; if (![decoder open:source]) { + [decoder release]; return nil; } properties = [decoder properties]; [decoder close]; + [decoder release]; return properties; } diff --git a/Plugins/Vorbis/VorbisPropertiesReader.m b/Plugins/Vorbis/VorbisPropertiesReader.m index ef7e7939a..5f120b90a 100644 --- a/Plugins/Vorbis/VorbisPropertiesReader.m +++ b/Plugins/Vorbis/VorbisPropertiesReader.m @@ -19,6 +19,7 @@ decoder = [[VorbisDecoder alloc] init]; if (![decoder open:source]) { + [decoder release]; return nil; } @@ -26,6 +27,7 @@ [decoder close]; [decoder release]; + NSLog(@"RELEASING"); return properties; } diff --git a/Plugins/WavPack/WavPackDecoder.m b/Plugins/WavPack/WavPackDecoder.m index a82c68a42..fac519172 100644 --- a/Plugins/WavPack/WavPackDecoder.m +++ b/Plugins/WavPack/WavPackDecoder.m @@ -229,6 +229,7 @@ int32_t WriteBytesProc(void *ds, void *data, int32_t bcount) - (void)close { + [source release]; WavpackCloseFile(wpc); } diff --git a/Plugins/WavPack/WavPackPropertiesReader.m b/Plugins/WavPack/WavPackPropertiesReader.m index c18360ccc..d2bf3bf7c 100644 --- a/Plugins/WavPack/WavPackPropertiesReader.m +++ b/Plugins/WavPack/WavPackPropertiesReader.m @@ -19,12 +19,14 @@ decoder = [[WavPackDecoder alloc] init]; if (![decoder open:source]) { + [decoder release]; return nil; } properties = [decoder properties]; [decoder close]; + [decoder release]; return properties; }