]> git.sesse.net Git - vlc/blobdiff - src/input/vlm.c
Use NULL for pointer
[vlc] / src / input / vlm.c
index db53c3881c1cc913ad6a2260c34439e1245211c2..7e1721fdcfb6a33d42ca9e6a9328f9159dc61c13 100644 (file)
@@ -62,7 +62,7 @@
  *****************************************************************************/
 
 static void vlm_Destructor( vlm_t *p_vlm );
-static void* Manage( vlc_object_t * );
+static void* Manage( void * );
 static int vlm_MediaVodControl( void *, vod_media_t *, const char *, int, va_list );
 
 /*****************************************************************************
@@ -85,7 +85,7 @@ vlm_t *__vlm_New ( vlc_object_t *p_this )
     p_vlm = *pp_vlm;
     if( p_vlm )
     {   /* VLM already exists */
-        vlc_object_yield( p_vlm );
+        vlc_object_hold( p_vlm );
         vlc_mutex_unlock( lockval.p_address );
         return p_vlm;
     }
@@ -108,8 +108,7 @@ vlm_t *__vlm_New ( vlc_object_t *p_this )
     p_vlm->p_vod = NULL;
     vlc_object_attach( p_vlm, p_this->p_libvlc );
 
-    if( vlc_thread_create( p_vlm, "vlm thread",
-                           Manage, VLC_THREAD_PRIORITY_LOW, false ) )
+    if( vlc_clone( &p_vlm->thread, Manage, p_vlm, VLC_THREAD_PRIORITY_LOW ) )
     {
         vlc_mutex_destroy( &p_vlm->lock );
         vlc_object_release( p_vlm );
@@ -172,6 +171,9 @@ static void vlm_Destructor( vlm_t *p_vlm )
     vlm_ControlInternal( p_vlm, VLM_CLEAR_SCHEDULES );
     TAB_CLEAN( p_vlm->schedule, p_vlm->schedule );
 
+    vlc_object_kill( p_vlm );
+    /*vlc_cancel( p_vlm->thread ); */
+    vlc_join( p_vlm->thread, NULL );
     vlc_mutex_destroy( &p_vlm->lock );
 }
 
@@ -193,7 +195,7 @@ int vlm_ExecuteCommand( vlm_t *p_vlm, const char *psz_command,
 
 int64_t vlm_Date(void)
 {
-#ifdef WIN32
+#if defined (WIN32) && !defined (UNDER_CE)
     struct timeb tm;
     ftime( &tm );
     return ((int64_t)tm.time) * 1000000 + ((int64_t)tm.millitm) * 1000;
@@ -300,13 +302,14 @@ static int vlm_MediaVodControl( void *p_private, vod_media_t *p_vod_media,
 /*****************************************************************************
  * Manage:
  *****************************************************************************/
-static void* Manage( vlc_object_t* p_object )
+static void* Manage( void* p_object )
 {
     vlm_t *vlm = (vlm_t*)p_object;
     int i, j;
     mtime_t i_lastcheck;
     mtime_t i_time;
 
+    int canc = vlc_savecancel ();
     i_lastcheck = vlm_Date();
 
     while( !vlm->b_die )
@@ -410,6 +413,7 @@ static void* Manage( vlc_object_t* p_object )
         msleep( 100000 );
     }
 
+    vlc_restorecancel (canc);
     return NULL;
 }
 
@@ -517,7 +521,7 @@ static int vlm_OnMediaUpdate( vlm_t *p_vlm, vlm_media_sys_t *p_media )
 
             for( i = 0; i < p_cfg->i_option; i++ )
                 input_item_AddOption( p_media->vod.p_item,
-                                     p_cfg->ppsz_option[i] );
+                                      p_cfg->ppsz_option[i] );
 
             if( asprintf( &psz_header, _("Media: %s"), p_cfg->psz_name ) == -1 )
                 psz_header = NULL;
@@ -528,6 +532,7 @@ static int vlm_OnMediaUpdate( vlm_t *p_vlm, vlm_media_sys_t *p_media )
                     msleep( 100000 );
 
                 input_StopThread( p_input );
+                vlc_thread_join( p_input );
                 vlc_object_release( p_input );
             }
             free( psz_header );
@@ -603,13 +608,13 @@ static int vlm_ControlMediaAdd( vlm_t *p_vlm, vlm_media_t *p_cfg, int64_t *p_id
         p_vlm->p_vod = vlc_custom_create( VLC_OBJECT(p_vlm), sizeof( vod_t ),
                                           VLC_OBJECT_GENERIC, "vod server" );
         vlc_object_attach( p_vlm->p_vod, p_vlm );
-        p_vlm->p_vod->p_module = module_Need( p_vlm->p_vod, "vod server", 0, 0 );
+        p_vlm->p_vod->p_module = module_need( p_vlm->p_vod, "vod server", 0, 0 );
         if( !p_vlm->p_vod->p_module )
         {
             msg_Err( p_vlm, "cannot find vod server" );
             vlc_object_detach( p_vlm->p_vod );
             vlc_object_release( p_vlm->p_vod );
-            p_vlm->p_vod = 0;
+            p_vlm->p_vod = NULL;
             return VLC_EGENERIC;
         }
 
@@ -671,7 +676,7 @@ static int vlm_ControlMediaDel( vlm_t *p_vlm, int64_t id )
     /* Check if we need to unload the VOD server */
     if( p_vlm->p_vod && p_vlm->i_vod <= 0 )
     {
-        module_Unneed( p_vlm->p_vod, p_vlm->p_vod->p_module );
+        module_unneed( p_vlm->p_vod, p_vlm->p_vod->p_module );
         vlc_object_detach( p_vlm->p_vod );
         vlc_object_release( p_vlm->p_vod );
         p_vlm->p_vod = NULL;
@@ -759,11 +764,13 @@ static vlm_media_instance_sys_t *vlm_MediaInstanceNew( vlm_t *p_vlm, const char
 }
 static void vlm_MediaInstanceDelete( vlm_media_instance_sys_t *p_instance )
 {
-    if( p_instance->p_input )
+    input_thread_t *p_input = p_instance->p_input;
+    if( p_input )
     {
-        input_StopThread( p_instance->p_input );
-        p_instance->p_sout = input_DetachSout( p_instance->p_input );
-        vlc_object_release( p_instance->p_input );
+        input_StopThread( p_input );
+        vlc_thread_join( p_input );
+        p_instance->p_sout = input_DetachSout( p_input );
+        vlc_object_release( p_input );
     }
     if( p_instance->p_sout )
         sout_DeleteInstance( p_instance->p_sout );
@@ -827,19 +834,21 @@ static int vlm_ControlMediaInstanceStart( vlm_t *p_vlm, int64_t id, const char *
     }
 
     /* Stop old instance */
-    if( p_instance->p_input )
+    input_thread_t *p_input = p_instance->p_input;
+    if( p_input )
     {
         if( p_instance->i_index == i_input_index &&
-            !p_instance->p_input->b_eof && !p_instance->p_input->b_error )
+            !p_input->b_eof && !p_input->b_error )
         {
-            if( var_GetInteger( p_instance->p_input, "state" ) == PAUSE_S )
-                var_SetInteger( p_instance->p_input, "state",  PLAYING_S );
+            if( var_GetInteger( p_input, "state" ) == PAUSE_S )
+                var_SetInteger( p_input, "state",  PLAYING_S );
             return VLC_SUCCESS;
         }
 
-        input_StopThread( p_instance->p_input );
-        p_instance->p_sout = input_DetachSout( p_instance->p_input );
-        vlc_object_release( p_instance->p_input );
+        input_StopThread( p_input );
+        vlc_thread_join( p_input );
+        p_instance->p_sout = input_DetachSout( p_input );
+        vlc_object_release( p_input );
         if( !p_instance->b_sout_keep && p_instance->p_sout )
         {
             sout_DeleteInstance( p_instance->p_sout );