[vlc-commits] commit: mozilla: use locking wrapper (Jean-Paul Saman )
git version control
git at videolan.org
Thu Mar 4 13:15:37 CET 2010
vlc | branch: master | Jean-Paul Saman <jean-paul.saman at m2x.nl> | Wed Mar 3 10:02:12 2010 +0100| [b1b4acfe68816641337603ef9e836d9117c0f8ca] | committer: Jean-Paul Saman
mozilla: use locking wrapper
Conflicts:
projects/mozilla/vlcplugin.cpp
> http://git.videolan.org/gitweb.cgi/vlc.git/?a=commit;h=b1b4acfe68816641337603ef9e836d9117c0f8ca
---
projects/mozilla/vlcplugin.cpp | 103 +++++++++++++++++++++++++++------------
projects/mozilla/vlcplugin.h | 18 +++++--
2 files changed, 85 insertions(+), 36 deletions(-)
diff --git a/projects/mozilla/vlcplugin.cpp b/projects/mozilla/vlcplugin.cpp
index 895d7a2..bdcc2e7 100644
--- a/projects/mozilla/vlcplugin.cpp
+++ b/projects/mozilla/vlcplugin.cpp
@@ -37,7 +37,10 @@
#include <ctype.h>
#if defined(XP_UNIX)
-# include <pthread.h>
+# include <pthread.h>
+#elif defined(XP_WIN)
+ /* windows headers */
+# include <winbase.h>
#else
#warning "locking not implemented for this platform"
#endif
@@ -45,6 +48,61 @@
#include <stdio.h>
/*****************************************************************************
+ * utilitiy functions
+ *****************************************************************************/
+static void plugin_lock_init(plugin_lock_t *lock)
+{
+ assert(lock);
+
+#if defined(XP_UNIX)
+ pthread_mutex_init(&lock->mutex, NULL);
+#elif defined(XP_WIN)
+ InitializeCriticalSection(&lock->cs);
+#else
+#warning "locking not implemented in this platform"
+#endif
+}
+
+static void plugin_lock_destroy(plugin_lock_t *lock)
+{
+ assert(lock);
+
+#if defined(XP_UNIX)
+ pthread_mutex_destroy(&lock->mutex);
+#elif defined(XP_WIN)
+ DeleteCriticalSection(&lock->cs);
+#else
+#warning "locking not implemented in this platform"
+#endif
+}
+
+static void plugin_lock(plugin_lock_t *lock)
+{
+ assert(lock);
+
+#if defined(XP_UNIX)
+ pthread_mutex_lock(&lock->mutex);
+#elif defined(XP_WIN)
+ EnterCriticalSection(&lock->cs);
+#else
+#warning "locking not implemented in this platform"
+#endif
+}
+
+static void plugin_unlock(plugin_lock_t *lock)
+{
+ assert(lock);
+
+#if defined(XP_UNIX)
+ pthread_mutex_unlock(&lock->mutex);
+#elif defined(XP_WIN)
+ LeaveCriticalSection(&lock->cs);
+#else
+#warning "locking not implemented in this platform"
+#endif
+}
+
+/*****************************************************************************
* VlcPlugin constructor and destructor
*****************************************************************************/
VlcPlugin::VlcPlugin( NPP instance, uint16 mode ) :
@@ -95,20 +153,13 @@ static bool boolValue(const char *value) {
bool EventObj::init()
{
-#if defined(XP_UNIX)
- return pthread_mutex_init(&mutex, NULL) == 0;
-#else
-#warning "locking not implemented for this platform"
-#endif
+ plugin_lock_init(&lock);
+ return true;
}
EventObj::~EventObj()
{
-#if defined(XP_UNIX)
- pthread_mutex_destroy(&mutex);
-#else
-#warning "locking not implemented for this platform"
-#endif
+ plugin_lock_destroy(&lock);
}
void EventObj::deliver(NPP browser)
@@ -116,11 +167,8 @@ void EventObj::deliver(NPP browser)
NPVariant result;
NPVariant params[1];
-#if defined(XP_UNIX)
- pthread_mutex_lock(&mutex);
-#else
-#warning "locking not implemented for this platform"
-#endif
+ plugin_lock(&lock);
+
for( ev_l::iterator i=_elist.begin();i!=_elist.end();++i )
{
libvlc_event_type_t event = *i;
@@ -139,11 +187,8 @@ void EventObj::deliver(NPP browser)
}
}
_elist.clear();
-#if defined(XP_UNIX)
- pthread_mutex_unlock(&mutex);
-#else
-#warning "locking not implemented for this platform"
-#endif
+
+ plugin_unlock(&lock);
}
void VlcPlugin::eventAsync(void *param)
@@ -154,18 +199,12 @@ void VlcPlugin::eventAsync(void *param)
void EventObj::callback(const libvlc_event_t* event)
{
-#if defined(XP_UNIX)
- pthread_mutex_lock(&mutex);
-#else
-#warning "locking not implemented for this platform"
-#endif
+ plugin_lock(&lock);
+
if( have_event(event->type) )
_elist.push_back(event->type);
-#if defined(XP_UNIX)
- pthread_mutex_unlock(&mutex);
-#else
-#warning "locking not implemented for this platform"
-#endif
+
+ plugin_unlock(&lock);
}
void VlcPlugin::event_callback(const libvlc_event_t* event, void *param)
@@ -176,7 +215,7 @@ void VlcPlugin::event_callback(const libvlc_event_t* event, void *param)
NPN_PluginThreadAsyncCall(plugin->getBrowser(), eventAsync, plugin);
#else
#warning NPN_PluginThreadAsyncCall not implemented yet.
- printf("%s","No NPN_PluginThreadAsyncCall(), doing nothing.");
+ printf("No NPN_PluginThreadAsyncCall(), doing nothing.");
#endif
}
diff --git a/projects/mozilla/vlcplugin.h b/projects/mozilla/vlcplugin.h
index 4c9a11c..a14007f 100644
--- a/projects/mozilla/vlcplugin.h
+++ b/projects/mozilla/vlcplugin.h
@@ -30,7 +30,6 @@
#define __VLCPLUGIN_H__
#include <vlc/vlc.h>
-#include <pthread.h>
#include <npapi.h>
#include <vector>
@@ -44,6 +43,7 @@
#ifdef XP_WIN
/* Windows stuff */
+# include <winbase.h>
#endif
#ifdef XP_MACOSX
@@ -52,6 +52,7 @@
#endif
#ifdef XP_UNIX
+# include <pthread.h>
/* X11 stuff */
# include <X11/Xlib.h>
# include <X11/Intrinsic.h>
@@ -70,6 +71,17 @@
# define __MIN(a, b) ( ((a) < (b)) ? (a) : (b) )
#endif
+typedef struct {
+#if defined(XP_UNIX)
+ pthread_mutex_t mutex;
+#elif defined(XP_WIN)
+ CRITICAL_SECTION cs;
+#else
+#warning "locking not implemented in this platform"
+#endif
+} plugin_lock_t;
+
+
typedef enum vlc_toolbar_clicked_e {
clicked_Unknown = 0,
clicked_Play,
@@ -151,9 +163,7 @@ private:
lr_l _llist;
ev_l _elist;
-#if defined(XP_UNIX)
- pthread_mutex_t mutex;
-#endif
+ plugin_lock_t lock;
bool ask_for_event(event_t e);
void unask_for_event(event_t e);
More information about the vlc-commits
mailing list