From: Roy Marples Date: Sat, 14 Sep 2013 08:50:41 +0000 (+0000) Subject: Allow dev to recieve errors from managers handle_device. X-Git-Tag: v6.1.0~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=36d293b12a3174f6f3a195c1436cd1ebaa7685bd;p=thirdparty%2Fdhcpcd.git Allow dev to recieve errors from managers handle_device. --- diff --git a/dev.c b/dev.c index b72769b9..685fac76 100644 --- a/dev.c +++ b/dev.c @@ -143,13 +143,22 @@ dev_start1(const char *plugin) return r; } +static void +dev_handle_data(__unused void *arg) +{ + + if (dev->handle_device() == -1) { + /* XXX: an error occured. should we restart dev? */ + } +} + int dev_start(const char *plugin) { fd = dev_start1(plugin); if (fd != -1) { - if (eloop_event_add(fd, dev->handle_data, NULL) == -1) { + if (eloop_event_add(fd, dev_handle_data, NULL) == -1) { syslog(LOG_ERR, "%s: eloop_event_add: %m", __func__); dev_stop(); return -1; diff --git a/dev.h b/dev.h index d9b63e94..b22ad648 100644 --- a/dev.h +++ b/dev.h @@ -32,7 +32,7 @@ struct dev { const char *name; int (*initialized)(const char *); int (*listening)(void); - void (*handle_data)(void *); + int (*handle_device)(void); int (*start)(void); void (*stop)(void); }; diff --git a/dev/udev.c b/dev/udev.c index 67a1a24e..0b02ffb8 100644 --- a/dev/udev.c +++ b/dev/udev.c @@ -72,16 +72,16 @@ udev_initialized(const char *ifname) return r; } -static void -udev_handle_data(__unused void *arg) +static int +udev_handle_device(void) { struct udev_device *device; const char *subsystem, *ifname, *action; device = udev_monitor_receive_device(monitor); if (device == NULL) { - syslog(LOG_DEBUG, "libudev: received NULL device"); - return; + syslog(LOG_ERR, "libudev: received NULL device"); + return -1; } subsystem = udev_device_get_subsystem(device); @@ -98,6 +98,7 @@ udev_handle_data(__unused void *arg) } udev_device_unref(device); + return 1; } static void @@ -168,7 +169,7 @@ dev_init(struct dev *dev, const struct dev_dhcpcd *dev_dhcpcd) dev->name = udev_name; dev->initialized = udev_initialized; dev->listening = udev_listening; - dev->handle_data = udev_handle_data; + dev->handle_device = udev_handle_device; dev->stop = udev_stop; dev->start = udev_start;