[vlc-commits] mmdevice: fix opening of invalid device

2018-02-09 Thread Thomas Guillem
vlc/vlc-3.0 | branch: master | Thomas Guillem  | Fri Feb  9 
13:29:29 2018 +0100| [3475766f7a58bd7d28402d7184e5110e1fc8b091] | committer: 
Jean-Baptiste Kempf

mmdevice: fix opening of invalid device

CD 6f95511a-91a2-45de-bd43-735bf52a2185

And check sys->dev locked since it can be written from the MMSession thread.

(cherry picked from commit a715eaa04c611de267022964c59566779539d6e6)
Signed-off-by: Jean-Baptiste Kempf 

> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=3475766f7a58bd7d28402d7184e5110e1fc8b091
---

 modules/audio_output/mmdevice.c | 40 
 1 file changed, 24 insertions(+), 16 deletions(-)

diff --git a/modules/audio_output/mmdevice.c b/modules/audio_output/mmdevice.c
index e225eaab12..fddc9d4eb3 100644
--- a/modules/audio_output/mmdevice.c
+++ b/modules/audio_output/mmdevice.c
@@ -1086,9 +1086,6 @@ static int Start(audio_output_t *aout, 
audio_sample_format_t *restrict fmt)
 {
 aout_sys_t *sys = aout->sys;
 
-if (sys->dev == NULL)
-return -1;
-
 const bool b_spdif = AOUT_FMT_SPDIF(fmt);
 const bool b_hdmi = AOUT_FMT_HDMI(fmt);
 if (b_spdif || b_hdmi)
@@ -1116,6 +1113,14 @@ static int Start(audio_output_t *aout, 
audio_sample_format_t *restrict fmt)
 
 EnterMTA();
 EnterCriticalSection(&sys->lock);
+
+if (sys->dev == NULL)
+{
+LeaveCriticalSection(&sys->lock);
+LeaveMTA();
+return -1;
+}
+
 for (;;)
 {
 HRESULT hr;
@@ -1149,25 +1154,28 @@ static int Start(audio_output_t *aout, 
audio_sample_format_t *restrict fmt)
 break;
 }
 
-IPropertyStore *props;
-HRESULT hr = IMMDevice_OpenPropertyStore(sys->dev, STGM_READ, &props);
-if (SUCCEEDED(hr))
+if (sys->module != NULL)
 {
-PROPVARIANT v;
-PropVariantInit(&v);
-hr = IPropertyStore_GetValue(props, &PKEY_AudioEndpoint_FormFactor, 
&v);
+IPropertyStore *props;
+HRESULT hr = IMMDevice_OpenPropertyStore(sys->dev, STGM_READ, &props);
 if (SUCCEEDED(hr))
 {
-switch (v.uintVal)
+PROPVARIANT v;
+PropVariantInit(&v);
+hr = IPropertyStore_GetValue(props, 
&PKEY_AudioEndpoint_FormFactor, &v);
+if (SUCCEEDED(hr))
 {
-case Headphones:
-case Headset:
-aout->current_sink_info.headphones = true;
-break;
+switch (v.uintVal)
+{
+case Headphones:
+case Headset:
+aout->current_sink_info.headphones = true;
+break;
+}
+PropVariantClear(&v);
 }
-PropVariantClear(&v);
+IPropertyStore_Release(props);
 }
-IPropertyStore_Release(props);
 }
 
 LeaveCriticalSection(&sys->lock);

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits


[vlc-commits] mmdevice: fix opening of invalid device

2018-02-09 Thread Thomas Guillem
vlc | branch: master | Thomas Guillem  | Fri Feb  9 13:29:29 
2018 +0100| [a715eaa04c611de267022964c59566779539d6e6] | committer: Thomas 
Guillem

mmdevice: fix opening of invalid device

CD 6f95511a-91a2-45de-bd43-735bf52a2185

And check sys->dev locked since it can be written from the MMSession thread.

> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=a715eaa04c611de267022964c59566779539d6e6
---

 modules/audio_output/mmdevice.c | 40 
 1 file changed, 24 insertions(+), 16 deletions(-)

diff --git a/modules/audio_output/mmdevice.c b/modules/audio_output/mmdevice.c
index 40c03ee18f..2e3fdb30ab 100644
--- a/modules/audio_output/mmdevice.c
+++ b/modules/audio_output/mmdevice.c
@@ -1081,9 +1081,6 @@ static int Start(audio_output_t *aout, 
audio_sample_format_t *restrict fmt)
 {
 aout_sys_t *sys = aout->sys;
 
-if (sys->dev == NULL)
-return -1;
-
 const bool b_spdif = AOUT_FMT_SPDIF(fmt);
 const bool b_hdmi = AOUT_FMT_HDMI(fmt);
 if (b_spdif || b_hdmi)
@@ -,6 +1108,14 @@ static int Start(audio_output_t *aout, 
audio_sample_format_t *restrict fmt)
 
 EnterMTA();
 EnterCriticalSection(&sys->lock);
+
+if (sys->dev == NULL)
+{
+LeaveCriticalSection(&sys->lock);
+LeaveMTA();
+return -1;
+}
+
 for (;;)
 {
 char *modlist = var_InheritString(aout, "mmdevice-backend");
@@ -1146,25 +1151,28 @@ static int Start(audio_output_t *aout, 
audio_sample_format_t *restrict fmt)
 break;
 }
 
-IPropertyStore *props;
-HRESULT hr = IMMDevice_OpenPropertyStore(sys->dev, STGM_READ, &props);
-if (SUCCEEDED(hr))
+if (sys->module != NULL)
 {
-PROPVARIANT v;
-PropVariantInit(&v);
-hr = IPropertyStore_GetValue(props, &PKEY_AudioEndpoint_FormFactor, 
&v);
+IPropertyStore *props;
+HRESULT hr = IMMDevice_OpenPropertyStore(sys->dev, STGM_READ, &props);
 if (SUCCEEDED(hr))
 {
-switch (v.uintVal)
+PROPVARIANT v;
+PropVariantInit(&v);
+hr = IPropertyStore_GetValue(props, 
&PKEY_AudioEndpoint_FormFactor, &v);
+if (SUCCEEDED(hr))
 {
-case Headphones:
-case Headset:
-aout->current_sink_info.headphones = true;
-break;
+switch (v.uintVal)
+{
+case Headphones:
+case Headset:
+aout->current_sink_info.headphones = true;
+break;
+}
+PropVariantClear(&v);
 }
-PropVariantClear(&v);
+IPropertyStore_Release(props);
 }
-IPropertyStore_Release(props);
 }
 
 LeaveCriticalSection(&sys->lock);

___
vlc-commits mailing list
vlc-commits@videolan.org
https://mailman.videolan.org/listinfo/vlc-commits