coreaudio: simplify memory leak fix.

I _did_ appreciate the explanation, but it doesn't have to live in the
source code; also we can just release `devuid` and then check for error with
the usual macro, since SDL is done with it either way at this point.
This commit is contained in:
Ryan C. Gordon
2024-06-15 11:42:44 -04:00
parent 7c2329cd78
commit 17af09f3a9

View File

@@ -713,34 +713,8 @@ static int AssignDeviceToAudioQueue(SDL_AudioDevice *device)
result = AudioObjectGetPropertyData(device->hidden->deviceID, &prop, 0, NULL, &devuidsize, &devuid);
CHECK_RESULT("AudioObjectGetPropertyData (kAudioDevicePropertyDeviceUID)");
result = AudioQueueSetProperty(device->hidden->audioQueue, kAudioQueueProperty_CurrentDevice, &devuid, devuidsize);
/*
If AudioObjectGetPropertyData succeeds and AudioQueueSetProperty fails,
calling CHECK_RESULT("AudioQueueSetProperty (kAudioQueueProperty_CurrentDevice)");
will cause a memory leak since it returns
*/
// !!! FIXME: do we need to CFRelease(devuid)
/* Yes
CFStringRef is passed to AudioObjectGetPropertyData as an argument of type
UnsafeMutableRawPointer. As stated in the Apple Developer Documentation,
"The UnsafeMutableRawPointer type provides no automated memory management,
no type safety, and no alignment guarantees. You are responsible for
handling the life cycle of any memory you work with through
unsafe pointers, to avoid leaks or undefined behavior"
*/
//This is the quickest fix
if (result != noErr) {
const char* msg = "AudioQueueSetProperty (kAudioQueueProperty_CurrentDevice)";
SDL_Log("COREAUDIO: Got error %d from '%s'!\n", (int)result, msg);
CFRelease(devuid);
return SDL_SetError("CoreAudio error (%s): %d", msg, (int)result);
}
//Release once you've finished using CFStringRef
CFRelease(devuid);
CFRelease(devuid); // Release devuid; we're done with it and AudioQueueSetProperty should have retained if it wants to keep it.
CHECK_RESULT("AudioQueueSetProperty (kAudioQueueProperty_CurrentDevice)");
return 0;
}
#endif