summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source3/smbd/notify_inotify.c10
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;
}