Paul Adenot 5098817b4c Bug 1127213 - Fix various issues with the device change notification in the WASAPI cubeb backend. r=kinetik
This patch does the following:
- Introduces an owned_critical_section object to be able to assert that a
  current thread owns a critical section
- Change the auto_lock to use the above, add auto_unlock (basically like the
  Gecko AutoEnter/AutoExit things)
- Fix an issue during audio output device switch where the clock would use the
  old sample rate. Apparently I did not notice this because my headset and the
  sound card on this laptop have the same rate
- Check that we could acquire a device_enumerator in the ctor before
  deallocating in the dtor, as that can happen if a ton of streams are running at
  once (I had this issue running the full mochitest suite)
- Stop getting another device_enumator in unregister_notification_client, fixing a leak
- Assert that setup_wasapi_stream and close_wasapi_stream are called with the lock held, this was the cause of the crash for this bug
- Make close_wasapi_stream clear out its state to make sure setup_wasapi_stream
  and close_wasapi_stream are called in the right order (especially, not two
  setup_wasapi_stream without close in between, since that would leak stuff)
- In wasapi_stream_destroy, unregister the notification client before destroying
  the CRITICAL_SECTION (this was the cause of a crash I duped against this bug)
2015-02-09 14:42:43 +01:00
..