[vlc-devel] commit: UPnP Intel: remove useless and harmful SD thread ( Rémi Denis-Courmont )

git version control git at videolan.org
Thu Aug 28 21:23:40 CEST 2008


vlc | branch: master | Rémi Denis-Courmont <rdenis at simphalempin.com> | Thu Aug 28 22:25:23 2008 +0300| [b4f9defc0c05466974896d48ebdf593e22da4e3e] | committer: Rémi Denis-Courmont 

UPnP Intel: remove useless and harmful SD thread

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

 modules/services_discovery/upnp_intel.cpp |   87 ++++++++++++----------------
 1 files changed, 37 insertions(+), 50 deletions(-)

diff --git a/modules/services_discovery/upnp_intel.cpp b/modules/services_discovery/upnp_intel.cpp
index 6463329..5bfef20 100644
--- a/modules/services_discovery/upnp_intel.cpp
+++ b/modules/services_discovery/upnp_intel.cpp
@@ -66,16 +66,6 @@ vlc_module_end();
  * Local prototypes
  *****************************************************************************/
 
-// VLC handle
-
-struct services_discovery_sys_t
-{
-    playlist_t *p_playlist;
-    playlist_item_t *p_node_cat;
-    playlist_item_t *p_node_one;
-};
-
-
 // Constants
 
 const char* MEDIA_SERVER_DEVICE_TYPE = "urn:schemas-upnp-org:device:MediaServer:1";
@@ -272,7 +262,6 @@ private:
 
 // VLC callback prototypes
 
-static void Run( services_discovery_t *p_sd );
 static playlist_t *pl_Get( services_discovery_t *p_sd )
 {
     return p_sd->p_sys->p_playlist;
@@ -286,6 +275,17 @@ const char* xml_getChildElementValue( IXML_Element* parent, const char* tagName
 IXML_Document* parseBrowseResult( IXML_Document* doc );
 
 
+
+// VLC handle
+
+struct services_discovery_sys_t
+{
+    playlist_t *p_playlist;
+    playlist_item_t *p_node_cat;
+    playlist_item_t *p_node_one;
+    Cookie cookie;
+};
+
 // VLC callbacks...
 
 static int Open( vlc_object_t *p_this )
@@ -294,7 +294,6 @@ static int Open( vlc_object_t *p_this )
     services_discovery_sys_t *p_sys  = ( services_discovery_sys_t * )
     malloc( sizeof( services_discovery_sys_t ) );
 
-    p_sd->pf_run = Run;
     p_sd->p_sys = p_sys;
     p_sys->p_playlist = pl_Yield( p_sd );
 
@@ -305,40 +304,17 @@ static int Open( vlc_object_t *p_this )
                               true );
     vlc_object_unlock( p_sys->p_playlist );
 
-    return VLC_SUCCESS;
-}
-
-static void Close( vlc_object_t *p_this )
-{
-    services_discovery_t *p_sd = ( services_discovery_t* )p_this;
-    services_discovery_sys_t *p_sys = p_sd->p_sys;
+    p_sys->cookie.serviceDiscovery = p_sd;
+    p_sys->cookie.serverList = new MediaServerList( &cookie );
+    p_sys->cookie.lock = new Lockable();
 
-    vlc_object_lock( p_sys->p_playlist );
-    playlist_NodeDelete( pl_Get( p_sd ), p_sys->p_node_one, true,
-                         true );
-    playlist_NodeDelete( pl_Get( p_sd ), p_sys->p_node_cat, true,
-                         true );
-    vlc_object_unlock( p_sys->p_playlist );
-    pl_Release( p_sd );
-    free( p_sys );
-}
-
-static void Run( services_discovery_t* p_sd )
-{
-    int res;
-
-    res = UpnpInit( 0, 0 );
+    int res = UpnpInit( 0, 0 );
     if( res != UPNP_E_SUCCESS )
     {
         msg_Err( p_sd, "%s", UpnpGetErrorMessage( res ) );
-        return;
+        goto shutDown;
     }
 
-    Cookie cookie;
-    cookie.serviceDiscovery = p_sd;
-    cookie.serverList = new MediaServerList( &cookie );
-    cookie.lock = new Lockable();
-
     res = UpnpRegisterClient( Callback, &cookie, &cookie.clientHandle );
     if( res != UPNP_E_SUCCESS )
     {
@@ -353,20 +329,31 @@ static void Run( services_discovery_t* p_sd )
         goto shutDown;
     }
 
-    msg_Dbg( p_sd, "UPnP discovery started" );
-    while( vlc_object_alive (p_sd) )
-    {
-        msleep( 500 );
-    }
-
-    msg_Dbg( p_sd, "UPnP discovery stopped" );
+    return VLC_SUCCESS;
 
  shutDown:
-    UpnpFinish();
-    delete cookie.serverList;
-    delete cookie.lock;
+    Close( p_this );
+    return VLC_EGENERIC;
 }
 
+static void Close( vlc_object_t *p_this )
+{
+    services_discovery_t *p_sd = ( services_discovery_t* )p_this;
+    services_discovery_sys_t *p_sys = p_sd->p_sys;
+
+    UpnpFinish();
+    delete p_sys->cookie.serverList;
+    delete p_sys->cookie.lock;
+
+    vlc_object_lock( p_sys->p_playlist );
+    playlist_NodeDelete( pl_Get( p_sd ), p_sys->p_node_one, true,
+                         true );
+    playlist_NodeDelete( pl_Get( p_sd ), p_sys->p_node_cat, true,
+                         true );
+    vlc_object_unlock( p_sys->p_playlist );
+    pl_Release( p_sd );
+    free( p_sys );
+}
 
 // XML utility functions:
 




More information about the vlc-devel mailing list