Browse Source

audio: Don't let simplified audio streams bind to new devices.

This can happen if you close the stream's underlying device directly, which
removes the binding but doesn't destroy the object.

In this case, the stream remains valid until destroyed, but still should not
be able to be bound to a new device.
Ryan C. Gordon 1 year ago
parent
commit
40fb76196c
1 changed files with 2 additions and 0 deletions
  1. 2 0
      src/audio/SDL_audio.c

+ 2 - 0
src/audio/SDL_audio.c

@@ -1689,6 +1689,8 @@ int SDL_BindAudioStreams(SDL_AudioDeviceID devid, SDL_AudioStream **streams, int
             SDL_assert((stream->bound_device == NULL) == ((stream->prev_binding == NULL) || (stream->next_binding == NULL)));
             if (stream->bound_device) {
                 retval = SDL_SetError("Stream #%d is already bound to a device", i);
+            } else if (stream->simplified) {  // You can get here if you closed the device instead of destroying the stream.
+                retval = SDL_SetError("Cannot change binding on a stream created with SDL_OpenAudioDeviceStream");
             }
         }