Commit 85dfdfdd authored by Pierre d'Herbemont's avatar Pierre d'Herbemont

sap: Properly manage object memory.

Use an vlc_object_t destructor.
Don't use free, instead of vlc_object_release().
parent 00d044a3
...@@ -180,10 +180,8 @@ int announce_HandlerDestroy( announce_handler_t *p_announce ) ...@@ -180,10 +180,8 @@ int announce_HandlerDestroy( announce_handler_t *p_announce )
{ {
if( p_announce->p_sap ) if( p_announce->p_sap )
{ {
vlc_object_kill ((vlc_object_t *)p_announce->p_sap); /* Exit the SAP */
/* Wait for the SAP thread to exit */ vlc_object_release( p_announce->p_sap );
vlc_thread_join( (vlc_object_t *)p_announce->p_sap );
announce_SAPHandlerDestroy( p_announce->p_sap );
} }
/* Free the structure */ /* Free the structure */
......
...@@ -106,6 +106,8 @@ static int announce_SAPAnnounceAdd( sap_handler_t *p_sap, ...@@ -106,6 +106,8 @@ static int announce_SAPAnnounceAdd( sap_handler_t *p_sap,
static int announce_SAPAnnounceDel( sap_handler_t *p_sap, static int announce_SAPAnnounceDel( sap_handler_t *p_sap,
session_descriptor_t *p_session ); session_descriptor_t *p_session );
static void announce_SAPHandlerDestructor( vlc_object_t *p_this );
/** /**
* Create the SAP handler * Create the SAP handler
...@@ -140,24 +142,22 @@ sap_handler_t *announce_SAPHandlerCreate( announce_handler_t *p_announce ) ...@@ -140,24 +142,22 @@ sap_handler_t *announce_SAPHandlerCreate( announce_handler_t *p_announce )
VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) ) VLC_THREAD_PRIORITY_LOW, VLC_FALSE ) )
{ {
msg_Dbg( p_announce, "unable to spawn SAP handler thread"); msg_Dbg( p_announce, "unable to spawn SAP handler thread");
free( p_sap ); vlc_object_release( p_sap );
return NULL; return NULL;
}; }
vlc_object_set_destructor( p_sap, announce_SAPHandlerDestructor );
msg_Dbg( p_announce, "thread created, %i sessions", p_sap->i_sessions); msg_Dbg( p_announce, "thread created, %i sessions", p_sap->i_sessions);
return p_sap; return p_sap;
} }
/** static void announce_SAPHandlerDestructor( vlc_object_t * p_this )
* Destroy the SAP handler
* \param p_this the SAP Handler to destroy
* \return nothing
*/
void announce_SAPHandlerDestroy( sap_handler_t *p_sap )
{ {
sap_handler_t *p_sap = (sap_handler_t *)p_this;
int i; int i;
vlc_mutex_destroy( &p_sap->object_lock );
/* Free the remaining sessions */ /* Free the remaining sessions */
for( i = 0 ; i< p_sap->i_sessions ; i++) for( i = 0 ; i< p_sap->i_sessions ; i++)
{ {
...@@ -183,9 +183,6 @@ void announce_SAPHandlerDestroy( sap_handler_t *p_sap ) ...@@ -183,9 +183,6 @@ void announce_SAPHandlerDestroy( sap_handler_t *p_sap )
REMOVE_ELEM( p_sap->pp_addresses, p_sap->i_addresses, i ); REMOVE_ELEM( p_sap->pp_addresses, p_sap->i_addresses, i );
FREENULL( p_address ); FREENULL( p_address );
} }
/* Free the structure */
vlc_object_release( p_sap );
} }
/** /**
......
...@@ -98,7 +98,7 @@ struct announce_handler_t ...@@ -98,7 +98,7 @@ struct announce_handler_t
int announce_HandlerDestroy( 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 ); sap_handler_t *announce_SAPHandlerCreate( announce_handler_t *p_announce );
void announce_SAPHandlerDestroy( sap_handler_t *p_sap );
#endif #endif
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment