From: Kay Sievers Date: Wed, 17 Aug 2011 19:05:18 +0000 (+0200) Subject: export USEC_INITIALIZED= and take timestamp on message receive time X-Git-Tag: 174~33 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=a20a57a7bfbc6edd7602c135ca78f3e56878badb;ds=sidebyside export USEC_INITIALIZED= and take timestamp on message receive time --- diff --git a/libudev/libudev-device.c b/libudev/libudev-device.c index 273e5cb59..064ffad9b 100644 --- a/libudev/libudev-device.c +++ b/libudev/libudev-device.c @@ -437,6 +437,8 @@ void udev_device_add_property_from_string_parse(struct udev_device *udev_device, udev_device_add_tag(udev_device, tag); } } + } else if (strncmp(property, "USEC_INITIALIZED=", 19) == 0) { + udev_device_set_usec_initialized(udev_device, strtoull(&property[19], NULL, 10)); } else if (strncmp(property, "DRIVER=", 7) == 0) { udev_device_set_driver(udev_device, &property[7]); } else if (strncmp(property, "ACTION=", 7) == 0) { @@ -1322,7 +1324,11 @@ unsigned long long udev_device_get_usec_initialized(struct udev_device *udev_dev void udev_device_set_usec_initialized(struct udev_device *udev_device, unsigned long long usec_initialized) { + char num[32]; + udev_device->usec_initialized = usec_initialized; + snprintf(num, sizeof(num), "%llu", usec_initialized); + udev_device_add_property(udev_device, "USEC_INITIALIZED", num); } /** diff --git a/udev/udev-event.c b/udev/udev-event.c index 391fce81c..3c1a3e7aa 100644 --- a/udev/udev-event.c +++ b/udev/udev-event.c @@ -1040,7 +1040,7 @@ int udev_event_execute_rules(struct udev_event *event, struct udev_rules *rules, /* 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 + else if (udev_device_get_usec_initialized(event->dev) == 0) udev_device_set_usec_initialized(event->dev, now_usec()); /* (re)write database file */ diff --git a/udev/udevd.c b/udev/udevd.c index f1a31e7af..325ad034c 100644 --- a/udev/udevd.c +++ b/udev/udevd.c @@ -1655,6 +1655,7 @@ int main(int argc, char *argv[]) dev = udev_monitor_receive_device(monitor); if (dev != NULL) + udev_device_set_usec_initialized(dev, now_usec()); if (event_queue_insert(dev) < 0) udev_device_unref(dev); }