vlc | branch: master | Steve Lhomme <[email protected]> | Thu Jun  2 14:08:19 
2016 +0200| [17ca1cbf2511728ed4f45ba2d21cec827d500441] | committer: Thomas 
Guillem

upnp: do not delete the UpnpInstanceWrapper instance under s_lock

It calls UpnpFinish() which might wait for some callbacks to finish and they
may be locked with s_lock.

Signed-off-by: Thomas Guillem <[email protected]>

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

 modules/services_discovery/upnp.cpp |    7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/modules/services_discovery/upnp.cpp 
b/modules/services_discovery/upnp.cpp
index 09d94fc..3ea5bde 100644
--- a/modules/services_discovery/upnp.cpp
+++ b/modules/services_discovery/upnp.cpp
@@ -1298,7 +1298,8 @@ UpnpInstanceWrapper 
*UpnpInstanceWrapper::get(vlc_object_t *p_obj, services_disc
 
 void UpnpInstanceWrapper::release(bool isSd)
 {
-    vlc_mutex_locker lock( &s_lock );
+    UpnpInstanceWrapper *p_delete = NULL;
+    vlc_mutex_lock( &s_lock );
     if ( isSd )
     {
         delete UpnpInstanceWrapper::p_server_list;
@@ -1306,9 +1307,11 @@ void UpnpInstanceWrapper::release(bool isSd)
     }
     if (--s_instance->m_refcount == 0)
     {
-        delete s_instance;
+        p_delete = s_instance;
         s_instance = NULL;
     }
+    vlc_mutex_unlock( &s_lock );
+    delete p_delete;
 }
 
 UpnpClient_Handle UpnpInstanceWrapper::handle() const

_______________________________________________
vlc-commits mailing list
[email protected]
https://mailman.videolan.org/listinfo/vlc-commits

Reply via email to