From: Tom Gundersen Date: Thu, 23 Apr 2015 13:19:13 +0000 (+0200) Subject: udevd: fix REMOVE handling X-Git-Tag: v226.4~1^2~431 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?p=elogind.git;a=commitdiff_plain;h=45b4409d0a66935660bd008a1fa5c635a397b6d8 udevd: fix REMOVE handling This reverts b67f944. Lazy loading of device properties does not work for devices that are received over netlink, as these are sealed. Reinstate the unconditional loading of the device db. Reported by: Mantas Mikulėnas . --- diff --git a/src/libelogind/sd-device/device-internal.h b/src/libelogind/sd-device/device-internal.h index 59ec1a6d7..b96441de5 100644 --- a/src/libelogind/sd-device/device-internal.h +++ b/src/libelogind/sd-device/device-internal.h @@ -110,6 +110,7 @@ int device_new_aux(sd_device **ret); int device_add_property_aux(sd_device *device, const char *key, const char *value, bool db); int device_add_property_internal(sd_device *device, const char *key, const char *value); int device_read_uevent_file(sd_device *device); +int device_read_db_aux(sd_device *device, bool force); int device_set_syspath(sd_device *device, const char *_syspath, bool verify); int device_set_ifindex(sd_device *device, const char *ifindex); diff --git a/src/libelogind/sd-device/device-private.c b/src/libelogind/sd-device/device-private.c index 9788df769..3cadedbf4 100644 --- a/src/libelogind/sd-device/device-private.c +++ b/src/libelogind/sd-device/device-private.c @@ -1100,3 +1100,9 @@ int device_delete_db(sd_device *device) { return 0; } + +int device_read_db_force(sd_device *device) { + assert(device); + + return device_read_db_aux(device, true); +} diff --git a/src/libelogind/sd-device/device-private.h b/src/libelogind/sd-device/device-private.h index f25248150..49a7b66a2 100644 --- a/src/libelogind/sd-device/device-private.h +++ b/src/libelogind/sd-device/device-private.h @@ -61,3 +61,4 @@ int device_new_from_synthetic_event(sd_device **new_device, const char *syspath, int device_tag_index(sd_device *dev, sd_device *dev_old, bool add); int device_update_db(sd_device *device); int device_delete_db(sd_device *device); +int device_read_db_force(sd_device *device); diff --git a/src/libelogind/sd-device/sd-device.c b/src/libelogind/sd-device/sd-device.c index 7a7b323f3..fd4622987 100644 --- a/src/libelogind/sd-device/sd-device.c +++ b/src/libelogind/sd-device/sd-device.c @@ -1220,7 +1220,7 @@ int device_get_id_filename(sd_device *device, const char **ret) { return 0; } -static int device_read_db(sd_device *device) { +int device_read_db_aux(sd_device *device, bool force) { _cleanup_free_ char *db = NULL; char *path; const char *id, *value; @@ -1237,7 +1237,7 @@ static int device_read_db(sd_device *device) { INVALID_LINE, } state = PRE_KEY; - if (device->db_loaded || device->sealed) + if (device->db_loaded || (!force && device->sealed)) return 0; r = device_get_id_filename(device, &id); @@ -1313,6 +1313,10 @@ static int device_read_db(sd_device *device) { return 0; } +static int device_read_db(sd_device *device) { + return device_read_db_aux(device, false); +} + _public_ int sd_device_get_is_initialized(sd_device *device, int *initialized) { int r;