do not create a kqueue everytime we call poll
This commit is contained in:
parent
22dd32d4e9
commit
0834198e74
@ -52,10 +52,11 @@ namespace ix
|
||||
PollResultType Socket::poll(bool readyToRead,
|
||||
int timeoutMs,
|
||||
int sockfd,
|
||||
const SelectInterruptPtr& selectInterrupt)
|
||||
const SelectInterruptPtr& selectInterrupt,
|
||||
int kqueuefd)
|
||||
{
|
||||
#if defined(__APPLE__)
|
||||
int kqueuefd = kqueue();
|
||||
// FIXME int kqueuefd = kqueue();
|
||||
|
||||
struct kevent ke;
|
||||
EV_SET(&ke, sockfd, (readyToRead) ? EVFILT_READ : EVFILT_WRITE, EV_ADD, 0, 0, NULL);
|
||||
@ -145,7 +146,8 @@ namespace ix
|
||||
#endif
|
||||
|
||||
free(events);
|
||||
::close(kqueuefd);
|
||||
|
||||
// ::close(kqueuefd); //FMXE
|
||||
|
||||
return pollResult;
|
||||
#else
|
||||
@ -254,7 +256,7 @@ namespace ix
|
||||
}
|
||||
|
||||
bool readyToRead = true;
|
||||
return poll(readyToRead, timeoutMs, _sockfd, _selectInterrupt);
|
||||
return poll(readyToRead, timeoutMs, _sockfd, _selectInterrupt, _kqueuefd);
|
||||
}
|
||||
|
||||
PollResultType Socket::isReadyToWrite(int timeoutMs)
|
||||
@ -265,7 +267,7 @@ namespace ix
|
||||
}
|
||||
|
||||
bool readyToRead = false;
|
||||
return poll(readyToRead, timeoutMs, _sockfd, _selectInterrupt);
|
||||
return poll(readyToRead, timeoutMs, _sockfd, _selectInterrupt, _kqueuefd);
|
||||
}
|
||||
|
||||
// Wake up from poll/select by writing to the pipe which is watched by select
|
||||
|
@ -101,7 +101,8 @@ namespace ix
|
||||
static PollResultType poll(bool readyToRead,
|
||||
int timeoutMs,
|
||||
int sockfd,
|
||||
const SelectInterruptPtr& selectInterrupt);
|
||||
const SelectInterruptPtr& selectInterrupt,
|
||||
int kqueuefd);
|
||||
|
||||
|
||||
// Used as special codes for pipe communication
|
||||
|
@ -66,7 +66,10 @@ namespace ix
|
||||
int timeoutMs = 10;
|
||||
bool readyToRead = false;
|
||||
auto selectInterrupt = std::make_unique<SelectInterrupt>();
|
||||
PollResultType pollResult = Socket::poll(readyToRead, timeoutMs, fd, selectInterrupt);
|
||||
|
||||
int kqueuefd = kqueue();
|
||||
PollResultType pollResult = Socket::poll(readyToRead, timeoutMs, fd, selectInterrupt, kqueuefd);
|
||||
::close(kqueuefd);
|
||||
|
||||
if (pollResult == PollResultType::Timeout)
|
||||
{
|
||||
|
@ -259,8 +259,11 @@ namespace ix
|
||||
int timeoutMs = 10;
|
||||
bool readyToRead = true;
|
||||
auto selectInterrupt = std::make_unique<SelectInterrupt>();
|
||||
|
||||
int kqueuefd = kqueue();
|
||||
PollResultType pollResult =
|
||||
Socket::poll(readyToRead, timeoutMs, _serverFd, selectInterrupt);
|
||||
Socket::poll(readyToRead, timeoutMs, _serverFd, selectInterrupt, kqueuefd);
|
||||
::close(kqueuefd);
|
||||
|
||||
if (pollResult == PollResultType::Error)
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user