sap: Properly manage object memory.
authorPierre d'Herbemont <pdherbemont@videolan.org>
Wed, 26 Mar 2008 22:56:18 +0000 (23:56 +0100)
committerPierre d'Herbemont <pdherbemont@videolan.org>
Wed, 26 Mar 2008 22:58:05 +0000 (23:58 +0100)
Use an vlc_object_t destructor.
Don't use free, instead of vlc_object_release().

src/stream_output/announce.c
src/stream_output/sap.c
src/stream_output/stream_output.h

index c1bb2da..a8b383b 100644 (file)
@@ -180,10 +180,8 @@ int announce_HandlerDestroy( announce_handler_t *p_announce )
 {
     if( p_announce->p_sap )
     {
-        vlc_object_kill ((vlc_object_t *)p_announce->p_sap);
-        /* Wait for the SAP thread to exit */
-        vlc_thread_join( (vlc_object_t *)p_announce->p_sap );
-        announce_SAPHandlerDestroy( p_announce->p_sap );
+        /* Exit the SAP */
+        vlc_object_release( p_announce->p_sap );
     }
 
     /* Free the structure */
index c0caf43..c234ee8 100644 (file)
@@ -106,6 +106,8 @@ static int announce_SAPAnnounceAdd( sap_handler_t *p_sap,
 static int announce_SAPAnnounceDel( sap_handler_t *p_sap,
                              session_descriptor_t *p_session );
 
+static void announce_SAPHandlerDestructor( vlc_object_t *p_this );
+
 
 /**
  * Create the SAP handler
@@ -140,24 +142,22 @@ sap_handler_t *announce_SAPHandlerCreate( announce_handler_t *p_announce )
                        VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) )
     {
         msg_Dbg( p_announce, "unable to spawn SAP handler thread");
-        free( p_sap );
+        vlc_object_release( p_sap );
         return NULL;
-    };
+    }
+
+    vlc_object_set_destructor( p_sap, announce_SAPHandlerDestructor );
+
     msg_Dbg( p_announce, "thread created, %i sessions", p_sap->i_sessions);
+
     return p_sap;
 }
 
-/**
- *  Destroy the SAP handler
- *  \param p_this the SAP Handler to destroy
- *  \return nothing
- */
-void announce_SAPHandlerDestroy( sap_handler_t *p_sap )
+static void announce_SAPHandlerDestructor( vlc_object_t * p_this )
 {
+    sap_handler_t *p_sap = (sap_handler_t *)p_this;
     int i;
 
-    vlc_mutex_destroy( &p_sap->object_lock );
-
     /* Free the remaining sessions */
     for( i = 0 ; i< p_sap->i_sessions ; i++)
     {
@@ -183,9 +183,6 @@ void announce_SAPHandlerDestroy( sap_handler_t *p_sap )
         REMOVE_ELEM( p_sap->pp_addresses, p_sap->i_addresses, i );
         FREENULL( p_address );
     }
-
-    /* Free the structure */
-    vlc_object_release( p_sap );
 }
 
 /**
index 723f628..073de80 100644 (file)
@@ -98,7 +98,7 @@ struct announce_handler_t
 
 int announce_HandlerDestroy( announce_handler_t * );
 
+/* Release it with vlc_object_release() */
 sap_handler_t *announce_SAPHandlerCreate( announce_handler_t *p_announce );
-void announce_SAPHandlerDestroy( sap_handler_t *p_sap );
 
 #endif