udev-util: make device_wait_for_initialization() take relative timeout
Also make the timer event source floating.
This commit is contained in:
+10
-12
@@ -185,11 +185,10 @@ static int device_wait_for_initialization_internal(
|
||||
sd_device *_device,
|
||||
const char *devlink,
|
||||
const char *subsystem,
|
||||
usec_t deadline,
|
||||
usec_t timeout_usec,
|
||||
sd_device **ret) {
|
||||
|
||||
_cleanup_(sd_device_monitor_unrefp) sd_device_monitor *monitor = NULL;
|
||||
_cleanup_(sd_event_source_unrefp) sd_event_source *timeout_source = NULL;
|
||||
_cleanup_(sd_event_unrefp) sd_event *event = NULL;
|
||||
/* Ensure that if !_device && devlink, device gets unrefd on errors since it will be new */
|
||||
_cleanup_(sd_device_unrefp) sd_device *device = sd_device_ref(_device);
|
||||
@@ -247,17 +246,16 @@ static int device_wait_for_initialization_internal(
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to start device monitor: %m");
|
||||
|
||||
if (deadline != USEC_INFINITY) {
|
||||
r = sd_event_add_time(
|
||||
event, &timeout_source,
|
||||
CLOCK_MONOTONIC, deadline, 0,
|
||||
if (timeout_usec != USEC_INFINITY) {
|
||||
r = sd_event_add_time_relative(
|
||||
event, NULL,
|
||||
CLOCK_MONOTONIC, timeout_usec, 0,
|
||||
NULL, INT_TO_PTR(-ETIMEDOUT));
|
||||
if (r < 0)
|
||||
return log_error_errno(r, "Failed to add timeout event source: %m");
|
||||
}
|
||||
|
||||
/* Check again, maybe things changed. Udev will re-read the db if the device wasn't initialized
|
||||
* yet. */
|
||||
/* Check again, maybe things changed. Udev will re-read the db if the device wasn't initialized yet. */
|
||||
if (!device && devlink) {
|
||||
r = sd_device_new_from_devname(&device, devlink);
|
||||
if (r < 0 && !ERRNO_IS_DEVICE_ABSENT(r))
|
||||
@@ -278,12 +276,12 @@ static int device_wait_for_initialization_internal(
|
||||
return 0;
|
||||
}
|
||||
|
||||
int device_wait_for_initialization(sd_device *device, const char *subsystem, usec_t deadline, sd_device **ret) {
|
||||
return device_wait_for_initialization_internal(device, NULL, subsystem, deadline, ret);
|
||||
int device_wait_for_initialization(sd_device *device, const char *subsystem, usec_t timeout_usec, sd_device **ret) {
|
||||
return device_wait_for_initialization_internal(device, NULL, subsystem, timeout_usec, ret);
|
||||
}
|
||||
|
||||
int device_wait_for_devlink(const char *devlink, const char *subsystem, usec_t deadline, sd_device **ret) {
|
||||
return device_wait_for_initialization_internal(NULL, devlink, subsystem, deadline, ret);
|
||||
int device_wait_for_devlink(const char *devlink, const char *subsystem, usec_t timeout_usec, sd_device **ret) {
|
||||
return device_wait_for_initialization_internal(NULL, devlink, subsystem, timeout_usec, ret);
|
||||
}
|
||||
|
||||
int device_is_renaming(sd_device *dev) {
|
||||
|
||||
Reference in New Issue
Block a user