From: Tatuya JINMEI 神明達哉 Date: Thu, 24 Jul 2008 05:19:15 +0000 (+0000) Subject: 2400. [bug] Log if kqueue()/epoll_create()/opne(devpoll) fails. X-Git-Tag: v9.3.6b1~36^2~64 X-Git-Url: http://git.ipfire.org/gitweb/?a=commitdiff_plain;h=0cdb53f093f5814b40a68848025dd8d7e9ef2e9b;p=thirdparty%2Fbind9.git 2400. [bug] Log if kqueue()/epoll_create()/opne(devpoll) fails. [RT #18297] --- diff --git a/CHANGES b/CHANGES index 725b51975fd..e248d9c6d71 100644 --- a/CHANGES +++ b/CHANGES @@ -1,3 +1,6 @@ +2400. [bug] Log if kqueue()/epoll_create()/opne(devpoll) fails. + [RT #18297] + 2399. [placeholder] 2398. [placeholder] diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c index 5a25f4dcf90..33425ce809d 100644 --- a/lib/isc/unix/socket.c +++ b/lib/isc/unix/socket.c @@ -15,7 +15,7 @@ * PERFORMANCE OF THIS SOFTWARE. */ -/* $Id: socket.c,v 1.292 2008/07/23 23:47:07 tbox Exp $ */ +/* $Id: socket.c,v 1.293 2008/07/24 05:19:15 jinmei Exp $ */ /*! \file */ @@ -3188,6 +3188,9 @@ watcher(void *uap) { static isc_result_t setup_watcher(isc_mem_t *mctx, isc_socketmgr_t *manager) { isc_result_t result; +#if defined(USE_KQUEUE) || defined(USE_EPOLL) || defined(USE_DEVPOLL) + char strbuf[ISC_STRERRORSIZE]; +#endif #ifdef USE_KQUEUE manager->nevents = ISC_SOCKET_MAXEVENTS; @@ -3198,6 +3201,12 @@ setup_watcher(isc_mem_t *mctx, isc_socketmgr_t *manager) { manager->kqueue_fd = kqueue(); if (manager->kqueue_fd == -1) { result = isc__errno2result(errno); + isc__strerror(errno, strbuf, sizeof(strbuf)); + UNEXPECTED_ERROR(__FILE__, __LINE__, + "kqueue %s: %s", + isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, + ISC_MSG_FAILED, "failed"), + strbuf); isc_mem_put(mctx, manager->events, sizeof(struct kevent) * manager->nevents); return (result); @@ -3221,6 +3230,12 @@ setup_watcher(isc_mem_t *mctx, isc_socketmgr_t *manager) { manager->epoll_fd = epoll_create(manager->nevents); if (manager->epoll_fd == -1) { result = isc__errno2result(errno); + isc__strerror(errno, strbuf, sizeof(strbuf)); + UNEXPECTED_ERROR(__FILE__, __LINE__, + "epoll_create %s: %s", + isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, + ISC_MSG_FAILED, "failed"), + strbuf); isc_mem_put(mctx, manager->events, sizeof(struct epoll_event) * manager->nevents); return (result); @@ -3259,6 +3274,12 @@ setup_watcher(isc_mem_t *mctx, isc_socketmgr_t *manager) { manager->devpoll_fd = open("/dev/poll", O_RDWR); if (manager->devpoll_fd == -1) { result = isc__errno2result(errno); + isc__strerror(errno, strbuf, sizeof(strbuf)); + UNEXPECTED_ERROR(__FILE__, __LINE__, + "open(/dev/poll) %s: %s", + isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL, + ISC_MSG_FAILED, "failed"), + strbuf); isc_mem_put(mctx, manager->events, sizeof(struct pollfd) * manager->nevents); isc_mem_put(mctx, manager->fdpollinfo,