Skip to content

Commit 17ca1cb

Browse files
robUx4tguillem
authored andcommitted
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]>
1 parent 8c653ca commit 17ca1cb

File tree

1 file changed

+5
-2
lines changed

1 file changed

+5
-2
lines changed

modules/services_discovery/upnp.cpp

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1298,17 +1298,20 @@ UpnpInstanceWrapper *UpnpInstanceWrapper::get(vlc_object_t *p_obj, services_disc
12981298

12991299
void UpnpInstanceWrapper::release(bool isSd)
13001300
{
1301-
vlc_mutex_locker lock( &s_lock );
1301+
UpnpInstanceWrapper *p_delete = NULL;
1302+
vlc_mutex_lock( &s_lock );
13021303
if ( isSd )
13031304
{
13041305
delete UpnpInstanceWrapper::p_server_list;
13051306
UpnpInstanceWrapper::p_server_list = NULL;
13061307
}
13071308
if (--s_instance->m_refcount == 0)
13081309
{
1309-
delete s_instance;
1310+
p_delete = s_instance;
13101311
s_instance = NULL;
13111312
}
1313+
vlc_mutex_unlock( &s_lock );
1314+
delete p_delete;
13121315
}
13131316

13141317
UpnpClient_Handle UpnpInstanceWrapper::handle() const

0 commit comments

Comments
 (0)