mozilla: protect calls to libvlc_playlist_isplaying()
authorJean-Paul Saman <jean-paul.saman@m2x.nl>
Tue, 17 Feb 2009 11:02:31 +0000 (12:02 +0100)
committerJean-Paul Saman <jean-paul.saman@m2x.nl>
Tue, 17 Feb 2009 11:40:15 +0000 (12:40 +0100)
projects/mozilla/control/npolibvlc.cpp
projects/mozilla/vlcplugin.cpp
projects/mozilla/vlcshell.cpp

index c8ab15d..110a885 100644 (file)
@@ -1349,7 +1349,9 @@ RuntimeNPObject::InvokeResult LibvlcPlaylistNPObject::getProperty(int index, NPV
             }
             case ID_playlist_isplaying:
             {
+                libvlc_playlist_lock(p_plugin->getVLC());
                 int val = libvlc_playlist_isplaying(p_plugin->getVLC(), &ex);
+                libvlc_playlist_unlock(p_plugin->getVLC());
                 if( libvlc_exception_raised(&ex) )
                 {
                     NPN_SetException(this, libvlc_exception_get_message(&ex));
index b0484f5..84e9a6e 100644 (file)
@@ -583,7 +583,9 @@ void VlcPlugin::redrawToolbar()
     if( p_md )
     {
         /* get isplaying */
+        libvlc_playlist_lock( getVLC() );
         is_playing = libvlc_playlist_isplaying( getVLC(), &ex );
+        libvlc_playlist_unlock( getVLC() );
         libvlc_exception_clear( &ex );
 
         /* get movie position in % */
@@ -696,7 +698,9 @@ vlc_toolbar_clicked_t VlcPlugin::getToolbarButtonClicked( int i_xpos, int i_ypos
 
     /* get isplaying */
     libvlc_exception_init( &ex );
+    libvlc_playlist_lock( getVLC() );
     is_playing = libvlc_playlist_isplaying( getVLC(), &ex );
+    libvlc_playlist_unlock( getVLC() );
     libvlc_exception_clear( &ex );
 
     /* get mute info */
index 7adfca6..3fb3472 100644 (file)
@@ -184,7 +184,11 @@ int16 NPP_HandleEvent( NPP instance, void * event )
                 libvlc_instance_t *p_vlc = p_plugin->getVLC();
                 if( p_vlc )
                 {
-                    if( libvlc_playlist_isplaying(p_vlc, NULL) )
+                    int is_playing;
+                    libvlc_playlist_lock(p_vlc);
+                    is_playing = libvlc_playlist_isplaying(p_vlc, NULL);
+                    libvlc_playlist_lunock(p_vlc);
+                    if( is_playing )
                     {
                         libvlc_media_player_t *p_md =
                             libvlc_playlist_get_media_player(p_vlc, NULL);
@@ -215,7 +219,11 @@ int16 NPP_HandleEvent( NPP instance, void * event )
 
                 if( p_vlc )
                 {
-                    if( libvlc_playlist_isplaying(p_vlc, NULL) )
+                    int is_playing;
+                    libvlc_playlist_lock(p_vlc);
+                    is_playing = libvlc_playlist_isplaying(p_vlc, NULL);
+                    libvlc_playlist_unlock(p_vlc);
+                    if( is_playing )
                     {
                         libvlc_media_player_t *p_md =
                             libvlc_playlist_get_media_player(p_vlc, NULL);
@@ -846,7 +854,9 @@ static void ControlHandler( Widget w, XtPointer closure, XEvent *event )
             fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex));
         libvlc_exception_clear( &ex );
 
+        libvlc_playlist_lock( p_plugin->getVLC() );
         i_playing = libvlc_playlist_isplaying( p_plugin->getVLC(), &ex );
+        libvlc_playlist_unlock( p_plugin->getVLC() );
         if( libvlc_exception_raised(&ex) )
             fprintf( stderr, "%s\n", libvlc_exception_get_message(&ex));
         libvlc_exception_clear( &ex );