Commit 39a5661e authored by Jean-Paul Saman's avatar Jean-Paul Saman

mozilla: use locking wrapper

parent cc59f655
...@@ -37,13 +37,71 @@ ...@@ -37,13 +37,71 @@
#include <ctype.h> #include <ctype.h>
#if defined(XP_UNIX) #if defined(XP_UNIX)
# include <pthread.h> # include <pthread.h>
#elif defined(XP_WIN)
/* windows headers */
# include <winbase.h>
#else #else
#warning "locking not implemented for this platform" #warning "locking not implemented for this platform"
#endif #endif
#include <stdio.h> #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 constructor and destructor
*****************************************************************************/ *****************************************************************************/
...@@ -95,20 +153,13 @@ static bool boolValue(const char *value) { ...@@ -95,20 +153,13 @@ static bool boolValue(const char *value) {
bool EventObj::init() bool EventObj::init()
{ {
#if defined(XP_UNIX) plugin_lock_init(&lock);
return pthread_mutex_init(&mutex, NULL) == 0; return true;
#else
#warning "locking not implemented for this platform"
#endif
} }
EventObj::~EventObj() EventObj::~EventObj()
{ {
#if defined(XP_UNIX) plugin_lock_destroy(&lock);
pthread_mutex_destroy(&mutex);
#else
#warning "locking not implemented for this platform"
#endif
} }
void EventObj::deliver(NPP browser) void EventObj::deliver(NPP browser)
...@@ -116,11 +167,8 @@ void EventObj::deliver(NPP browser) ...@@ -116,11 +167,8 @@ void EventObj::deliver(NPP browser)
NPVariant result; NPVariant result;
NPVariant params[1]; NPVariant params[1];
#if defined(XP_UNIX) plugin_lock(&lock);
pthread_mutex_lock(&mutex);
#else
#warning "locking not implemented for this platform"
#endif
for( ev_l::iterator i=_elist.begin();i!=_elist.end();++i ) for( ev_l::iterator i=_elist.begin();i!=_elist.end();++i )
{ {
libvlc_event_type_t event = *i; libvlc_event_type_t event = *i;
...@@ -139,11 +187,8 @@ void EventObj::deliver(NPP browser) ...@@ -139,11 +187,8 @@ void EventObj::deliver(NPP browser)
} }
} }
_elist.clear(); _elist.clear();
#if defined(XP_UNIX)
pthread_mutex_unlock(&mutex); plugin_unlock(&lock);
#else
#warning "locking not implemented for this platform"
#endif
} }
void VlcPlugin::eventAsync(void *param) void VlcPlugin::eventAsync(void *param)
...@@ -154,18 +199,12 @@ void VlcPlugin::eventAsync(void *param) ...@@ -154,18 +199,12 @@ void VlcPlugin::eventAsync(void *param)
void EventObj::callback(const libvlc_event_t* event) void EventObj::callback(const libvlc_event_t* event)
{ {
#if defined(XP_UNIX) plugin_lock(&lock);
pthread_mutex_lock(&mutex);
#else
#warning "locking not implemented for this platform"
#endif
if( have_event(event->type) ) if( have_event(event->type) )
_elist.push_back(event->type); _elist.push_back(event->type);
#if defined(XP_UNIX)
pthread_mutex_unlock(&mutex); plugin_unlock(&lock);
#else
#warning "locking not implemented for this platform"
#endif
} }
void VlcPlugin::event_callback(const libvlc_event_t* event, void *param) 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) ...@@ -176,7 +215,7 @@ void VlcPlugin::event_callback(const libvlc_event_t* event, void *param)
NPN_PluginThreadAsyncCall(plugin->getBrowser(), eventAsync, plugin); NPN_PluginThreadAsyncCall(plugin->getBrowser(), eventAsync, plugin);
#else #else
#warning NPN_PluginThreadAsyncCall not implemented yet. #warning NPN_PluginThreadAsyncCall not implemented yet.
printf("%s","No NPN_PluginThreadAsyncCall(), doing nothing."); printf("No NPN_PluginThreadAsyncCall(), doing nothing.");
#endif #endif
} }
......
...@@ -30,7 +30,6 @@ ...@@ -30,7 +30,6 @@
#define __VLCPLUGIN_H__ #define __VLCPLUGIN_H__
#include <vlc/vlc.h> #include <vlc/vlc.h>
#include <pthread.h>
#include <npapi.h> #include <npapi.h>
#include <vector> #include <vector>
...@@ -44,6 +43,7 @@ ...@@ -44,6 +43,7 @@
#ifdef XP_WIN #ifdef XP_WIN
/* Windows stuff */ /* Windows stuff */
# include <winbase.h>
#endif #endif
#ifdef XP_MACOSX #ifdef XP_MACOSX
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
#endif #endif
#ifdef XP_UNIX #ifdef XP_UNIX
# include <pthread.h>
/* X11 stuff */ /* X11 stuff */
# include <X11/Xlib.h> # include <X11/Xlib.h>
# include <X11/Intrinsic.h> # include <X11/Intrinsic.h>
...@@ -70,6 +71,17 @@ ...@@ -70,6 +71,17 @@
# define __MIN(a, b) ( ((a) < (b)) ? (a) : (b) ) # define __MIN(a, b) ( ((a) < (b)) ? (a) : (b) )
#endif #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 { typedef enum vlc_toolbar_clicked_e {
clicked_Unknown = 0, clicked_Unknown = 0,
clicked_Play, clicked_Play,
...@@ -151,9 +163,7 @@ private: ...@@ -151,9 +163,7 @@ private:
lr_l _llist; lr_l _llist;
ev_l _elist; ev_l _elist;
#if defined(XP_UNIX) plugin_lock_t lock;
pthread_mutex_t mutex;
#endif
bool ask_for_event(event_t e); bool ask_for_event(event_t e);
void unask_for_event(event_t e); void unask_for_event(event_t e);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment