diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/smbd/notify_inotify.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/source3/smbd/notify_inotify.c b/source3/smbd/notify_inotify.c index 26570a2216..61599456c6 100644 --- a/source3/smbd/notify_inotify.c +++ b/source3/smbd/notify_inotify.c @@ -232,6 +232,7 @@ static void inotify_handler(struct event_context *ev, struct fd_event *fde, int bufsize = 0; struct inotify_event *e0, *e; uint32_t prev_cookie=0; + NTSTATUS status; /* we must use FIONREAD as we cannot predict the length of the @@ -248,9 +249,14 @@ static void inotify_handler(struct event_context *ev, struct fd_event *fde, e0 = e = (struct inotify_event *)TALLOC_SIZE(in, bufsize); if (e == NULL) return; - if (sys_read(in->fd, e0, bufsize) != bufsize) { - DEBUG(0,("Failed to read all inotify data\n")); + status = read_data(in->fd, (char *)e0, bufsize); + if (!NT_STATUS_IS_OK(status)) { + DEBUG(0,("Failed to read all inotify data - %s\n", + nt_errstr(status))); talloc_free(e0); + /* the inotify fd will now be out of sync, + * can't keep reading data off it */ + TALLOC_FREE(fde); return; } |