Skip to content

Commit

Permalink
udevd: worker - use loop_write() rather than send()
Browse files Browse the repository at this point in the history
When notifying the main daemon about event completion, make sure the message is sent
successfully, and not interrupted.

Signed-off-by: Anthony G. Basile <[email protected]>
  • Loading branch information
teg authored and blueness committed May 27, 2015
1 parent b27de33 commit 233b58f
Showing 1 changed file with 8 additions and 4 deletions.
12 changes: 8 additions & 4 deletions src/udev/udevd.c
Original file line number Diff line number Diff line change
Expand Up @@ -215,6 +215,12 @@ static void worker_attach_event(struct worker *worker, struct event *event) {
event->worker = worker;
}

static int worker_send_message(int fd) {
struct worker_message message = {};

return loop_write(fd, &message, sizeof(message), false);
}

static void worker_spawn(struct event *event) {
struct udev *udev = event->udev;
_cleanup_udev_monitor_unref_ struct udev_monitor *worker_monitor = NULL;
Expand Down Expand Up @@ -285,7 +291,6 @@ static void worker_spawn(struct event *event) {

for (;;) {
struct udev_event *udev_event;
struct worker_message msg;
int fd_lock = -1;

log_debug("seq %llu running", udev_device_get_seqnum(dev));
Expand Down Expand Up @@ -355,10 +360,9 @@ static void worker_spawn(struct event *event) {
log_debug("seq %llu processed", udev_device_get_seqnum(dev));

/* send udevd the result of the event execution */
memzero(&msg, sizeof(struct worker_message));
r = send(worker_watch[WRITE_END], &msg, sizeof(struct worker_message), 0);
r = worker_send_message(worker_watch[WRITE_END]);
if (r < 0)
log_error_errno(errno, "failed to send result of seq %llu to main daemon: %m",
log_error_errno(r, "failed to send result of seq %llu to main daemon: %m",
udev_device_get_seqnum(dev));

udev_device_unref(dev);
Expand Down

0 comments on commit 233b58f

Please sign in to comment.