udev: cache last queued event entry

When we have N queued events, LIST_APPEND() takes O(N).
Let's cache the last event to optimize queueing.
This commit is contained in:
Yu Watanabe
2025-05-10 00:26:32 +09:00
parent e962ebbe72
commit 4478546649
2 changed files with 7 additions and 2 deletions
+6 -2
View File
@@ -94,8 +94,11 @@ static Event* event_free(Event *event) {
if (!event)
return NULL;
if (event->manager)
if (event->manager) {
if (event->manager->last_event == event)
event->manager->last_event = event->event_prev;
LIST_REMOVE(event, event->manager->events, event);
}
if (event->worker)
event->worker->event = NULL;
@@ -875,7 +878,8 @@ static int event_queue_insert(Manager *manager, sd_device *dev) {
.state = EVENT_QUEUED,
};
LIST_APPEND(event, manager->events, event);
LIST_INSERT_AFTER(event, manager->events, manager->last_event, event);
manager->last_event = event;
event->manager = manager;
TAKE_PTR(event);
log_device_uevent(dev, "Device is queued");
+1
View File
@@ -50,6 +50,7 @@ typedef struct Manager {
sd_event *event;
Hashmap *workers;
LIST_HEAD(Event, events);
Event *last_event;
char *cgroup;
UdevRules *rules;