]> git.sesse.net Git - vlc/commitdiff
activex: take lock before accessing libvlc_playlist_items_count().
authorJean-Paul Saman <jpsaman@videolan.org>
Wed, 11 Feb 2009 08:45:52 +0000 (09:45 +0100)
committerJean-Paul Saman <jpsaman@videolan.org>
Wed, 11 Feb 2009 08:48:16 +0000 (09:48 +0100)
Patch by jan-paul dinger (jpd at m2x dot nl).

include/vlc/deprecated.h
projects/activex/plugin.cpp
projects/activex/vlccontrol.cpp
projects/activex/vlccontrol2.cpp

index df0ba040c6481670fb407a0169555dd2f1b1b05f..e3c0d560573475587f7b74ac40cf257fe9431d73 100644 (file)
@@ -173,6 +173,8 @@ VLC_DEPRECATED_API int libvlc_playlist_isplaying( libvlc_instance_t *,
 /**
  * Get the number of items in the playlist
  *
+ * Expects the playlist instance to be locked already.
+ *
  * \param p_instance the playlist instance
  * \param p_e an initialized exception pointer
  * \return the number of items
index 6a8c3f8772ec63d1ffab4b5350763051c1b2c29d..ec8cc44f96429cbf3a8041d8819afa3aac4e01eb 100644 (file)
@@ -726,10 +726,16 @@ HRESULT VLCPlugin::onActivateInPlace(LPMSG lpMesg, HWND hwndParent, LPCRECT lprc
         libvlc_video_set_parent(p_libvlc,
             reinterpret_cast<libvlc_drawable_t>(_inplacewnd), NULL);
 
-        if( _b_autoplay & (libvlc_playlist_items_count(p_libvlc, NULL) > 0) )
+        if( _b_autoplay )
         {
-            libvlc_playlist_play(p_libvlc, 0, 0, NULL, NULL);
-            fireOnPlayEvent();
+            libvlc_playlist_lock(p_libvlc);
+            unsigned count = libvlc_playlist_items_count(p_libvlc, &ex);
+            if( count > 0 )
+            {
+              libvlc_playlist_play(p_libvlc, 0, 0, NULL, NULL);
+              fireOnPlayEvent();
+            }
+            libvlc_playlist_unlock(p_libvlc);
         }
     }
 
index 298a4495062d8db1d9805f31a8c11734ba1ecc76..75da2de8b9c440518564d2ca4d0678955409ad8f 100644 (file)
@@ -939,7 +939,9 @@ STDMETHODIMP VLCControl::get_PlaylistCount(int *count)
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
+        libvlc_playlist_lock(p_libvlc);
         *count = libvlc_playlist_items_count(p_libvlc, &ex);
+        libvlc_playlist_unlock(p_libvlc);
         if( libvlc_exception_raised(&ex) )
         {
             _p_instance->setErrorInfo(IID_IVLCControl,
index 2a3c62b7183a9bfbac643e609cff930a2ab2face..8e3957dbb9dfdedf4f55f401fee270e044a31bc2 100644 (file)
@@ -1526,7 +1526,9 @@ STDMETHODIMP VLCPlaylistItems::get_count(long* count)
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
+        libvlc_playlist_lock(p_libvlc);
         *count = libvlc_playlist_items_count(p_libvlc, &ex);
+        libvlc_playlist_unlock(p_libvlc);
         if( libvlc_exception_raised(&ex) )
         {
             _p_instance->setErrorInfo(IID_IVLCPlaylistItems,
@@ -1676,7 +1678,9 @@ STDMETHODIMP VLCPlaylist::get_itemCount(long* count)
         libvlc_exception_t ex;
         libvlc_exception_init(&ex);
 
+        libvlc_playlist_lock(p_libvlc);
         *count = libvlc_playlist_items_count(p_libvlc, &ex);
+        libvlc_playlist_unlock(p_libvlc);
         if( libvlc_exception_raised(&ex) )
         {
             _p_instance->setErrorInfo(IID_IVLCPlaylist,