summaryrefslogtreecommitdiff
path: root/src/KqueueEventPoll.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-11-09 14:43:47 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2010-11-09 14:43:47 +0000
commit228b4c50d757b80efe493728a658ae145eaf67ef (patch)
treeaefd6e605ca52f6e4125f6e25d405e56a1ef681a /src/KqueueEventPoll.cc
parent02f725cab581063a0570402032f0b328e6f3a8a3 (diff)
2010-11-09 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Capture errno right after system/library call to avoid it to get overwritten. Use util::safeStrerror instead of strerror directly because strerror might return NULL. We don't check errno for std::fstream anymore. * src/AbstractDiskWriter.cc * src/CookieStorage.cc * src/DHTAutoSaveCommand.cc * src/DHTRoutingTableDeserializer.cc * src/DHTRoutingTableSerializer.cc * src/DefaultBtProgressInfoFile.cc * src/EpollEventPoll.cc * src/IteratableChunkChecksumValidator.cc * src/KqueueEventPoll.cc * src/Logger.cc * src/MessageDigestHelper.cc * src/PortEventPoll.cc * src/SelectEventPoll.cc * src/SocketCore.cc * src/message.h * src/util.cc * src/util.h
Diffstat (limited to 'src/KqueueEventPoll.cc')
-rw-r--r--src/KqueueEventPoll.cc12
1 files changed, 9 insertions, 3 deletions
diff --git a/src/KqueueEventPoll.cc b/src/KqueueEventPoll.cc
index 6b211b5a..be4b7a5a 100644
--- a/src/KqueueEventPoll.cc
+++ b/src/KqueueEventPoll.cc
@@ -34,6 +34,7 @@
/* copyright --> */
#include "KqueueEventPoll.h"
+#include <cerrno>
#include <cstring>
#include <algorithm>
#include <numeric>
@@ -41,6 +42,7 @@
#include "Command.h"
#include "LogFactory.h"
#include "Logger.h"
+#include "util.h"
#ifdef KEVENT_UDATA_INTPTR_T
# define PTR_TO_UDATA(X) (reinterpret_cast<intptr_t>(X))
@@ -96,10 +98,11 @@ KqueueEventPoll::~KqueueEventPoll()
if(kqfd_ != -1) {
int r;
while((r = close(kqfd_)) == -1 && errno == EINTR);
+ int errNum = errno;
if(r == -1) {
logger_->error("Error occurred while closing kqueue file descriptor"
" %d: %s",
- kqfd_, strerror(errno));
+ kqfd_, util::safeStrerror(errNum).c_str());
}
}
delete [] kqEvents_;
@@ -186,10 +189,11 @@ bool KqueueEventPoll::addEvents
n = socketEntry->getEvents(changelist);
}
r = kevent(kqfd_, changelist, n, changelist, 0, &zeroTimeout);
+ int errNum = errno;
if(r == -1) {
if(logger_->debug()) {
logger_->debug("Failed to add socket event %d:%s",
- socket, strerror(errno));
+ socket, util::safeStrerror(errNum).c_str());
}
return false;
} else {
@@ -225,12 +229,14 @@ bool KqueueEventPoll::deleteEvents(sock_t socket,
struct kevent changelist[2];
size_t n = (*i)->getEvents(changelist);
r = kevent(kqfd_, changelist, n, changelist, 0, &zeroTimeout);
+ int errNum = errno;
if((*i)->eventEmpty()) {
socketEntries_.erase(i);
}
if(r == -1) {
if(logger_->debug()) {
- logger_->debug("Failed to delete socket event:%s", strerror(errno));
+ logger_->debug("Failed to delete socket event:%s",
+ util::safeStrerror(errNum).c_str());
}
return false;
} else {