diff options
author | Stephen Gallagher <sgallagh@redhat.com> | 2010-06-08 15:47:34 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2010-06-10 10:17:38 -0400 |
commit | 06247775aa9c49ffce72827921eb45e2d04c6aa1 (patch) | |
tree | c3e53abf07faa3c8e161cff30746d54af6a78791 /src/monitor | |
parent | e5196fd7da44e4ae04ab8b5d2e7191167762cf0b (diff) | |
download | sssd-06247775aa9c49ffce72827921eb45e2d04c6aa1.tar.gz sssd-06247775aa9c49ffce72827921eb45e2d04c6aa1.tar.bz2 sssd-06247775aa9c49ffce72827921eb45e2d04c6aa1.zip |
Properly handle read() and write() throughout the SSSD
We need to guarantee at all times that reads and writes complete
successfully. This means that they must be checked for returning
EINTR and EAGAIN, and all writes must be wrapped in a loop to
ensure that they do not truncate their output.
Diffstat (limited to 'src/monitor')
-rw-r--r-- | src/monitor/monitor.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/src/monitor/monitor.c b/src/monitor/monitor.c index 8820d695..e52d7934 100644 --- a/src/monitor/monitor.c +++ b/src/monitor/monitor.c @@ -1372,7 +1372,7 @@ static void process_config_file(struct tevent_context *ev, len = read(file_ctx->mt_ctx->inotify_fd, buf+total_len, event_size-total_len); if (len == -1) { - if (errno == EINTR) continue; + if (errno == EINTR || errno == EAGAIN) continue; DEBUG(0, ("Critical error reading inotify file descriptor.\n")); goto done; } @@ -1393,7 +1393,7 @@ static void process_config_file(struct tevent_context *ev, while (total_len < in_event->len) { len = read(file_ctx->mt_ctx->inotify_fd, &name, in_event->len); if (len == -1) { - if (errno == EINTR) continue; + if (errno == EINTR || errno == EAGAIN) continue; DEBUG(0, ("Critical error reading inotify file descriptor.\n")); goto done; } |