if (ddev) {
pb_log("SKIP: %s UUID [%s] already present (as %s)\n",
name, uuid, ddev->device->id);
- return -1;
+ return 0;
}
}
struct udev_monitor *monitor = arg;
struct udev_device *dev;
const char *action;
- int result;
dev = udev_monitor_receive_device(monitor);
-
if (!dev) {
pb_log("udev_monitor_receive_device failed\n");
return -1;
if (!action) {
pb_log("udev_device_get_action failed\n");
- goto fail;
+ } else {
+ udev_handle_dev_action(dev, action);
}
- result = udev_handle_dev_action(dev, action);
-
udev_device_unref(dev);
- return result;
-
-fail:
- udev_device_unref(dev);
- return -1;
+ return 0;
}
static void udev_log_fn(struct udev __attribute__((unused)) *udev,
vfprintf(pb_log_get_stream(), format, args);
}
-struct pb_udev *udev_init(struct waitset *waitset,
- struct device_handler *handler)
+struct pb_udev *udev_init(struct device_handler *handler,
+ struct waitset *waitset)
{
+ struct pb_udev *udev;
int result;
- struct pb_udev *udev = talloc(NULL, struct pb_udev);
+ udev = talloc(handler, struct pb_udev);
talloc_set_destructor(udev, udev_destructor);
udev->handler = handler;
return NULL;
}
-void udev_destroy(struct pb_udev *udev)
+void udev_reinit(struct pb_udev *udev)
{
- talloc_free(udev);
+ pb_log("udev: reinit requested, starting enumeration\n");
+ udev_enumerate(udev->udev);
}