summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/libudev/libudev-device.c26
-rw-r--r--src/libudev/libudev-private.h2
-rw-r--r--src/udev/udev-event.c5
-rw-r--r--src/udev/udevd.c4
4 files changed, 21 insertions, 16 deletions
diff --git a/src/libudev/libudev-device.c b/src/libudev/libudev-device.c
index c0a061af6c..b518a2f891 100644
--- a/src/libudev/libudev-device.c
+++ b/src/libudev/libudev-device.c
@@ -445,6 +445,23 @@ static int udev_device_set_syspath(struct udev_device *udev_device, const char *
return 0;
}
+static void udev_device_set_usec_initialized(struct udev_device *udev_device, usec_t usec_initialized)
+{
+ char num[DECIMAL_STR_MAX(usec_t)];
+
+ udev_device->usec_initialized = usec_initialized;
+ snprintf(num, sizeof(num), USEC_FMT, usec_initialized);
+ udev_device_add_property_internal(udev_device, "USEC_INITIALIZED", num);
+}
+
+void udev_device_ensure_usec_initialized(struct udev_device *udev_device, struct udev_device *old_device)
+{
+ if (old_device && old_device->usec_initialized != 0)
+ udev_device_set_usec_initialized(udev_device, old_device->usec_initialized);
+ else
+ udev_device_set_usec_initialized(udev_device, now(CLOCK_MONOTONIC));
+}
+
/*
* parse property string, and if needed, update internal values accordingly
*
@@ -1418,15 +1435,6 @@ usec_t udev_device_get_usec_initialized(struct udev_device *udev_device)
return udev_device->usec_initialized;
}
-void udev_device_set_usec_initialized(struct udev_device *udev_device, usec_t usec_initialized)
-{
- char num[32];
-
- udev_device->usec_initialized = usec_initialized;
- snprintf(num, sizeof(num), USEC_FMT, usec_initialized);
- udev_device_add_property_internal(udev_device, "USEC_INITIALIZED", num);
-}
-
/**
* udev_device_get_sysattr_value:
* @udev_device: udev device
diff --git a/src/libudev/libudev-private.h b/src/libudev/libudev-private.h
index 43ccc3be64..d6f6b5df5d 100644
--- a/src/libudev/libudev-private.h
+++ b/src/libudev/libudev-private.h
@@ -60,7 +60,7 @@ int udev_device_add_tag(struct udev_device *udev_device, const char *tag);
void udev_device_remove_tag(struct udev_device *udev_device, const char *tag);
void udev_device_cleanup_tags_list(struct udev_device *udev_device);
usec_t udev_device_get_usec_initialized(struct udev_device *udev_device);
-void udev_device_set_usec_initialized(struct udev_device *udev_device, usec_t usec_initialized);
+void udev_device_ensure_usec_initialized(struct udev_device *udev_device, struct udev_device *old_device);
int udev_device_get_devlink_priority(struct udev_device *udev_device);
int udev_device_set_devlink_priority(struct udev_device *udev_device, int prio);
int udev_device_get_watch_handle(struct udev_device *udev_device);
diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c
index 7a6b55cf07..d4971cd18e 100644
--- a/src/udev/udev-event.c
+++ b/src/udev/udev-event.c
@@ -891,10 +891,7 @@ void udev_event_execute_rules(struct udev_event *event,
}
/* preserve old, or get new initialization timestamp */
- if (event->dev_db != NULL && udev_device_get_usec_initialized(event->dev_db) > 0)
- udev_device_set_usec_initialized(event->dev, udev_device_get_usec_initialized(event->dev_db));
- else if (udev_device_get_usec_initialized(event->dev) == 0)
- udev_device_set_usec_initialized(event->dev, now(CLOCK_MONOTONIC));
+ udev_device_ensure_usec_initialized(event->dev, event->dev_db);
/* (re)write database file */
udev_device_update_db(dev);
diff --git a/src/udev/udevd.c b/src/udev/udevd.c
index 10222eb1be..7eeceb42c0 100644
--- a/src/udev/udevd.c
+++ b/src/udev/udevd.c
@@ -1423,8 +1423,8 @@ int main(int argc, char *argv[]) {
struct udev_device *dev;
dev = udev_monitor_receive_device(monitor);
- if (dev != NULL) {
- udev_device_set_usec_initialized(dev, now(CLOCK_MONOTONIC));
+ if (dev) {
+ udev_device_ensure_usec_initialized(dev, NULL);
if (event_queue_insert(dev) < 0)
udev_device_unref(dev);
}