diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-11-09 14:43:47 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2010-11-09 14:43:47 +0000 |
| commit | 228b4c50d757b80efe493728a658ae145eaf67ef (patch) | |
| tree | aefd6e605ca52f6e4125f6e25d405e56a1ef681a /src/KqueueEventPoll.cc | |
| parent | 02f725cab581063a0570402032f0b328e6f3a8a3 (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.cc | 12 |
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 { |
