[vlc-devel] [PATCH 2/3] npapi: fixed event delivery reentrancy problem
Sergey Radionov
rsatom at gmail.com
Sat Dec 24 08:31:16 CET 2011
---
npapi/vlcplugin_base.cpp | 5 +++++
npapi/vlcplugin_base.h | 3 ++-
2 files changed, 7 insertions(+), 1 deletions(-)
diff --git a/npapi/vlcplugin_base.cpp b/npapi/vlcplugin_base.cpp
index c100583..d4ed630 100644
--- a/npapi/vlcplugin_base.cpp
+++ b/npapi/vlcplugin_base.cpp
@@ -203,7 +203,11 @@ EventObj::~EventObj()
void EventObj::deliver(NPP browser)
{
+ if(_already_in_deliver)
+ return;
+
plugin_lock(&lock);
+ _already_in_deliver = true;
for( ev_l::iterator iter = _elist.begin(); iter != _elist.end(); ++iter )
{
@@ -237,6 +241,7 @@ void EventObj::deliver(NPP browser)
}
_elist.clear();
+ _already_in_deliver = false;
plugin_unlock(&lock);
}
diff --git a/npapi/vlcplugin_base.h b/npapi/vlcplugin_base.h
index c9c8a59..67ffc3d 100644
--- a/npapi/vlcplugin_base.h
+++ b/npapi/vlcplugin_base.h
@@ -153,7 +153,7 @@ private:
};
libvlc_event_manager_t *_em; /* libvlc media_player event manager */
public:
- EventObj(): _em(NULL) { /* deferred to init() */ }
+ EventObj(): _em(NULL), _already_in_deliver(false) { /* deferred to init() */ }
bool init();
~EventObj();
@@ -172,6 +172,7 @@ private:
ev_l _elist; /* scheduled events list for delivery to browser */
plugin_lock_t lock;
+ bool _already_in_deliver;
};
typedef enum vlc_toolbar_clicked_e {
--
1.7.7.1.msysgit.0
More information about the vlc-devel
mailing list