From: Christian P. <cp...@us...> - 2005-06-06 12:01:35
|
Update of /cvsroot/pclasses/pclasses2/src/System In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv24622/src/System Modified Files: FdListener.h FdListener.posix.cpp Log Message: - Added some code to not wakeup the FdListener if running in the same thread Index: FdListener.posix.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/FdListener.posix.cpp,v retrieving revision 1.6 retrieving revision 1.7 diff -u -d -r1.6 -r1.7 --- FdListener.posix.cpp 20 May 2005 14:21:58 -0000 1.6 +++ FdListener.posix.cpp 6 Jun 2005 12:01:19 -0000 1.7 @@ -19,6 +19,7 @@ ***************************************************************************/ #include "pclasses/Trace.h" +#include "pclasses/System/Thread.h" #include "FdListener.h" #include "timeout.h" @@ -93,7 +94,7 @@ InstMap FdListenerList::_theLists; FdListenerList::FdListenerList(EventQueue& evq) throw(SystemError) -: _eventQueue(evq) +: _eventQueue(evq), _threadId(Thread::threadId()) { // we use a pipe for wakeup signaling ... int ret = ::pipe(_wakeupPipe); @@ -131,8 +132,15 @@ void FdListenerList::wakeup() { - P_TRACE(FdListenerList) << "wakeup(): waking up FdListenerList..."; - ::write(_wakeupPipe[1], "W", 1); + if(Thread::threadId() != _threadId) + { + P_TRACE(FdListenerList) << "wakeup(): waking up FdListenerList..."; + ::write(_wakeupPipe[1], "W", 1); + } + else + { + P_TRACE(FdListenerList) << "wakeup(): not needed, called in same thread"; + } } FdListenerList& FdListenerList::instance(EventQueue& evq) Index: FdListener.h =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/FdListener.h,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- FdListener.h 23 Apr 2005 17:47:07 -0000 1.3 +++ FdListener.h 6 Jun 2005 12:01:19 -0000 1.4 @@ -93,6 +93,7 @@ ListenerSet _listeners; CriticalSection _listenersCs; + unsigned long _threadId; static std::map< EventQueue*, |