wasapi: If device is marked as a zombie, don't try to resuscitate it.
parent
85923049a6
commit
ce3be02b48
|
@ -514,6 +514,7 @@ void SDL_AudioDeviceDisconnected(SDL_AudioDevice *device)
|
||||||
|
|
||||||
// on default devices, dump any logical devices that explicitly opened this device. Things that opened the system default can stay.
|
// on default devices, dump any logical devices that explicitly opened this device. Things that opened the system default can stay.
|
||||||
// on non-default devices, dump everything.
|
// on non-default devices, dump everything.
|
||||||
|
// (by "dump" we mean send a REMOVED event; the zombie will keep consuming audio data for these logical devices until explicitly closed.)
|
||||||
for (SDL_LogicalAudioDevice *logdev = device->logical_devices; logdev != NULL; logdev = logdev->next) {
|
for (SDL_LogicalAudioDevice *logdev = device->logical_devices; logdev != NULL; logdev = logdev->next) {
|
||||||
if (!is_default_device || !logdev->opened_as_default) { // if opened as a default, leave it on the zombie device for later migration.
|
if (!is_default_device || !logdev->opened_as_default) { // if opened as a default, leave it on the zombie device for later migration.
|
||||||
SDL_PendingAudioDeviceEvent *p = (SDL_PendingAudioDeviceEvent *) SDL_malloc(sizeof (SDL_PendingAudioDeviceEvent));
|
SDL_PendingAudioDeviceEvent *p = (SDL_PendingAudioDeviceEvent *) SDL_malloc(sizeof (SDL_PendingAudioDeviceEvent));
|
||||||
|
|
|
@ -397,6 +397,8 @@ static SDL_bool RecoverWasapiIfLost(SDL_AudioDevice *device)
|
||||||
WASAPI_DisconnectDevice(device);
|
WASAPI_DisconnectDevice(device);
|
||||||
SDL_assert(SDL_AtomicGet(&device->shutdown)); // so we don't come back through here.
|
SDL_assert(SDL_AtomicGet(&device->shutdown)); // so we don't come back through here.
|
||||||
return SDL_FALSE; // already failed.
|
return SDL_FALSE; // already failed.
|
||||||
|
} else if (SDL_AtomicGet(&device->zombie)) {
|
||||||
|
return SDL_FALSE; // we're already dead, so just leave and let the Zombie implementations take over.
|
||||||
} else if (!device->hidden->client) {
|
} else if (!device->hidden->client) {
|
||||||
return SDL_TRUE; // still waiting for activation.
|
return SDL_TRUE; // still waiting for activation.
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue