From 39e175bb3a158780e95af838087174f317f2444d Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Sun, 3 Aug 2008 15:46:46 +0000 Subject: [PATCH] (main_loop_poll): Pass a buffer which is guaranteed to be large enough to read inotify event. Ignore EAGAIN error. Better error message. Add branch predicition. (main_loop_epoll): Likewise. --- nscd/connections.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/nscd/connections.c b/nscd/connections.c index 8281533..3395e54 100644 --- a/nscd/connections.c +++ b/nscd/connections.c @@ -1868,8 +1868,11 @@ main_loop_poll (void) bool to_clear[lastdb] = { false, }; union { +# ifndef PATH_MAX +# define PATH_MAX 1024 +# endif struct inotify_event i; - char buf[100]; + char buf[sizeof (struct inotify_event) + PATH_MAX]; } inev; while (1) @@ -1878,17 +1881,20 @@ main_loop_poll (void) sizeof (inev))); if (nb < (ssize_t) sizeof (struct inotify_event)) { - if (nb == -1) + if (__builtin_expect (nb == -1 && errno != EAGAIN, + 0)) { /* Something went wrong when reading the inotify data. Better disable inotify. */ + dbg_log (_("\ +disabled inotify after read error %d"), + errno); conns[1].fd = -1; firstfree = 1; if (nused == 2) nused = 1; close (inotify_fd); inotify_fd = -1; - dbg_log (_("disabled inotify after read error")); } break; } @@ -2047,7 +2053,7 @@ main_loop_epoll (int efd) union { struct inotify_event i; - char buf[100]; + char buf[sizeof (struct inotify_event) + PATH_MAX]; } inev; while (1) @@ -2056,15 +2062,16 @@ main_loop_epoll (int efd) sizeof (inev))); if (nb < (ssize_t) sizeof (struct inotify_event)) { - if (nb == -1) + if (__builtin_expect (nb == -1 && errno != EAGAIN, 0)) { /* Something went wrong when reading the inotify data. Better disable inotify. */ + dbg_log (_("disabled inotify after read error %d"), + errno); (void) epoll_ctl (efd, EPOLL_CTL_DEL, inotify_fd, NULL); close (inotify_fd); inotify_fd = -1; - dbg_log (_("disabled inotify after read error")); } break; } -- 2.7.4