X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a12698abb72c090dba6907506781ae979b0ef606..dc8c61bef78e406080de2be91bc6e8d746edb647:/src/unix/epolldispatcher.cpp?ds=sidebyside diff --git a/src/unix/epolldispatcher.cpp b/src/unix/epolldispatcher.cpp index b5b7a8cce6..47f4dd4f56 100644 --- a/src/unix/epolldispatcher.cpp +++ b/src/unix/epolldispatcher.cpp @@ -1,11 +1,11 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: src/common/epolldispatcher.cpp +// Name: src/unix/epolldispatcher.cpp // Purpose: implements dispatcher for epoll_wait() call // Author: Lukasz Michalski // Created: April 2007 // RCS-ID: $Id$ // Copyright: (c) 2007 Lukasz Michalski -// License: wxWindows licence +// Licence: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -42,29 +42,31 @@ // helper: return EPOLLxxx mask corresponding to the given flags (and also log // debugging messages about it) -static uint32_t GetEpollMask(int flags, int WXUNUSED_UNLESS_DEBUG(fd)) +static uint32_t GetEpollMask(int flags, int fd) { + wxUnusedVar(fd); // unused if wxLogTrace() disabled + uint32_t ep = 0; if ( flags & wxFDIO_INPUT ) { ep |= EPOLLIN; wxLogTrace(wxEpollDispatcher_Trace, - _T("Registered fd %d for input events"), fd); + wxT("Registered fd %d for input events"), fd); } if ( flags & wxFDIO_OUTPUT ) { ep |= EPOLLOUT; wxLogTrace(wxEpollDispatcher_Trace, - _T("Registered fd %d for output events"), fd); + wxT("Registered fd %d for output events"), fd); } if ( flags & wxFDIO_EXCEPTION ) { ep |= EPOLLERR | EPOLLHUP; wxLogTrace(wxEpollDispatcher_Trace, - _T("Registered fd %d for exceptional events"), fd); + wxT("Registered fd %d for exceptional events"), fd); } return ep; @@ -84,13 +86,13 @@ wxEpollDispatcher *wxEpollDispatcher::Create() return NULL; } wxLogTrace(wxEpollDispatcher_Trace, - _T("Epoll fd %d created"), epollDescriptor); + wxT("Epoll fd %d created"), epollDescriptor); return new wxEpollDispatcher(epollDescriptor); } wxEpollDispatcher::wxEpollDispatcher(int epollDescriptor) { - wxASSERT_MSG( epollDescriptor != -1, _T("invalid descriptor") ); + wxASSERT_MSG( epollDescriptor != -1, wxT("invalid descriptor") ); m_epollDescriptor = epollDescriptor; } @@ -118,7 +120,7 @@ bool wxEpollDispatcher::RegisterFD(int fd, wxFDIOHandler* handler, int flags) return false; } wxLogTrace(wxEpollDispatcher_Trace, - _T("Added fd %d (handler %p) to epoll %d"), fd, handler, m_epollDescriptor); + wxT("Added fd %d (handler %p) to epoll %d"), fd, handler, m_epollDescriptor); return true; } @@ -139,7 +141,7 @@ bool wxEpollDispatcher::ModifyFD(int fd, wxFDIOHandler* handler, int flags) } wxLogTrace(wxEpollDispatcher_Trace, - _T("Modified fd %d (handler: %p) on epoll %d"), fd, handler, m_epollDescriptor); + wxT("Modified fd %d (handler: %p) on epoll %d"), fd, handler, m_epollDescriptor); return true; } @@ -155,7 +157,7 @@ bool wxEpollDispatcher::UnregisterFD(int fd) fd, m_epollDescriptor); } wxLogTrace(wxEpollDispatcher_Trace, - _T("removed fd %d from %d"), fd, m_epollDescriptor); + wxT("removed fd %d from %d"), fd, m_epollDescriptor); return true; } @@ -194,7 +196,11 @@ wxEpollDispatcher::DoPoll(epoll_event *events, int numEvents, int timeout) const bool wxEpollDispatcher::HasPending() const { epoll_event event; - return DoPoll(&event, 1, 0) == 1; + + // NB: it's not really clear if epoll_wait() can return a number greater + // than the number of events passed to it but just in case it can, use + // >= instead of == here, see #10397 + return DoPoll(&event, 1, 0) >= 1; } int wxEpollDispatcher::Dispatch(int timeout) @@ -216,7 +222,7 @@ int wxEpollDispatcher::Dispatch(int timeout) wxFDIOHandler * const handler = (wxFDIOHandler *)(p->data.ptr); if ( !handler ) { - wxFAIL_MSG( _T("NULL handler in epoll_event?") ); + wxFAIL_MSG( wxT("NULL handler in epoll_event?") ); continue; }