]> git.sesse.net Git - vlc/commitdiff
Fix the update system now we can't close vlc and stop the download correctly.
authorRémi Duraffort <ivoire@videolan.org>
Wed, 25 Jun 2008 20:38:44 +0000 (22:38 +0200)
committerRémi Duraffort <ivoire@videolan.org>
Wed, 25 Jun 2008 20:44:54 +0000 (22:44 +0200)
Should fixe #1635

src/misc/update.c

index 4a19aec959815bd682c9eaa5069b85e5498c4941..51d6ecb0f8a4e3c376a673cf1f894ed263e3dc6e 100644 (file)
@@ -1524,9 +1524,12 @@ static void update_DownloadReal( update_download_thread_t *p_udt )
         free( psz_status );
     }
 
-    while( ( i_read = stream_Read( p_stream, p_buffer, 1 << 10 ) ) &&
-                                   !intf_ProgressIsCancelled( p_udt, i_progress ) )
+    vlc_object_lock( p_udt );
+    while( vlc_object_alive( p_udt ) &&
+           ( i_read = stream_Read( p_stream, p_buffer, 1 << 10 ) ) &&
+           !intf_ProgressIsCancelled( p_udt, i_progress ) )
     {
+        vlc_object_unlock( p_udt );
         if( fwrite( p_buffer, i_read, 1, p_file ) < 1 )
         {
             msg_Err( p_udt, "Failed to write into %s", psz_destfile );
@@ -1545,14 +1548,17 @@ static void update_DownloadReal( update_download_thread_t *p_udt )
             free( psz_status );
         }
         free( psz_downloaded );
+        vlc_object_lock( p_udt );
     }
 
     /* Finish the progress bar or delete the file if the user had canceled */
     fclose( p_file );
     p_file = NULL;
 
-    if( !intf_ProgressIsCancelled( p_udt, i_progress ) )
+    if( vlc_object_alive( p_udt ) &&
+        !intf_ProgressIsCancelled( p_udt, i_progress ) )
     {
+        vlc_object_unlock( p_udt );
         if( asprintf( &psz_status, "%s\nDone %s (100.0%%)",
             p_update->release.psz_url, psz_size ) != -1 )
         {
@@ -1562,6 +1568,7 @@ static void update_DownloadReal( update_download_thread_t *p_udt )
     }
     else
     {
+        vlc_object_unlock( p_udt );
         utf8_unlink( psz_destfile );
         goto end;
     }