Refactor: extract code to make an fd non-clocking into a function.

Simply extract part of the code from evtloopunix.cpp into a reusable
wxPipe::MakeNonBlocking() function to be able to reuse it elsewhere.

See #12636.

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@65992 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2010-11-02 11:57:19 +00:00
parent 4445d0357b
commit b835320170
2 changed files with 12 additions and 5 deletions

View File

@@ -52,6 +52,16 @@ public:
return true; return true;
} }
// switch the given end of the pipe to non-blocking IO
bool MakeNonBlocking(Direction which)
{
const int flags = fcntl(m_fds[which], F_GETFL, 0);
if ( flags == -1 )
return false;
return fcntl(m_fds[which], F_SETFL, flags | O_NONBLOCK) == 0;
}
// return TRUE if we were created successfully // return TRUE if we were created successfully
bool IsOk() const { return m_fds[Read] != INVALID_FD; } bool IsOk() const { return m_fds[Read] != INVALID_FD; }

View File

@@ -88,17 +88,14 @@ bool PipeIOHandler::Create()
return false; return false;
} }
const int fdRead = GetReadFd(); if ( !m_pipe.MakeNonBlocking(wxPipe::Read) )
int flags = fcntl(fdRead, F_GETFL, 0);
if ( flags == -1 || fcntl(fdRead, F_SETFL, flags | O_NONBLOCK) == -1 )
{ {
wxLogSysError(_("Failed to switch wake up pipe to non-blocking mode")); wxLogSysError(_("Failed to switch wake up pipe to non-blocking mode"));
return false; return false;
} }
wxLogTrace(TRACE_EVENTS, wxT("Wake up pipe (%d, %d) created"), wxLogTrace(TRACE_EVENTS, wxT("Wake up pipe (%d, %d) created"),
fdRead, m_pipe[wxPipe::Write]); m_pipe[wxPipe::Read], m_pipe[wxPipe::Write]);
return true; return true;
} }