From: Christian P. <cp...@us...> - 2005-02-11 12:00:19
|
Update of /cvsroot/pclasses/pclasses2/src/System In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv4090/src/System Modified Files: EventQueue.cpp FdListener.posix.cpp Log Message: Added missing export-macros. Made write-end of wakeup-pipe also non-blocking. Index: FdListener.posix.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/FdListener.posix.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- FdListener.posix.cpp 10 Feb 2005 19:13:42 -0000 1.2 +++ FdListener.posix.cpp 11 Feb 2005 12:00:09 -0000 1.3 @@ -98,7 +98,9 @@ if(ret == -1) throw SystemError(errno, "Could not create wakeup pipe", P_SOURCEINFO); + // make pipe nonblocking ... ::fcntl(_wakeupPipe[0], F_SETFL, O_NONBLOCK); + ::fcntl(_wakeupPipe[1], F_SETFL, O_NONBLOCK); _wakeupListener = new WakeupListener(_wakeupPipe[0]); _listeners.insert(_wakeupListener); @@ -210,7 +212,7 @@ Private::get_timeout(&timeout, timeout_ms, Private::TIMEOUT_RELATIVE); int ret = ::select(highest_fd + 1, &read_fds, &write_fds, &error_fds, - &timeout); + &timeout); if(ret == -1) { Index: EventQueue.cpp =================================================================== RCS file: /cvsroot/pclasses/pclasses2/src/System/EventQueue.cpp,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- EventQueue.cpp 10 Feb 2005 19:13:43 -0000 1.2 +++ EventQueue.cpp 11 Feb 2005 12:00:09 -0000 1.3 @@ -81,7 +81,9 @@ EventQueue::EventQueue() { +#ifndef WIN32 _private = (void*)&FdListenerList::instance(*this); +#endif } EventQueue::~EventQueue() @@ -98,9 +100,11 @@ CriticalSection::ScopedLock lck(_eventQueueCs); _eventQueue.push(ev); +#ifndef WIN32 // wakeup the FdListener FdListenerList* lst = (FdListenerList*)_private; lst->wakeup(); +#endif } void EventQueue::wait(Event& ev) @@ -113,10 +117,12 @@ _eventQueueCs.lock(); if(_eventQueue.empty()) { - FdListenerList* lst = (FdListenerList*)_private; _eventQueueCs.unlock(); +#ifndef WIN32 + FdListenerList* lst = (FdListenerList*)_private; lst->wait(100000); +#endif _eventQueueCs.lock(); if(_eventQueue.empty()) |