]> git.ipfire.org Git - thirdparty/dhcpcd.git/commitdiff
Allow dev to recieve errors from managers handle_device.
authorRoy Marples <roy@marples.name>
Sat, 14 Sep 2013 08:50:41 +0000 (08:50 +0000)
committerRoy Marples <roy@marples.name>
Sat, 14 Sep 2013 08:50:41 +0000 (08:50 +0000)
dev.c
dev.h
dev/udev.c

diff --git a/dev.c b/dev.c
index b72769b94c9e75b67283644225e5a4c7fd596d15..685fac7634ea6ec3ab173ac95e2d35f9dcce93da 100644 (file)
--- 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 d9b63e940e38d1a326abe8e6439c34831e03ee7f..b22ad648b2f5b089085bfe6cfca0f9eaa4fd13b3 100644 (file)
--- 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);
 };
index 67a1a24e9e22f16b93ca6b020e938b8ad2bafdaa..0b02ffb809f2bf083699bab7f0e1c4e7e441f927 100644 (file)
@@ -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;