clean-up empty queue directories

This allows scripts to do:
  while test -d /dev/.udev/queue; do sleep 0.1; done

And don't create a failed symlink if there is another event
for the same devpath in the queue.
This commit is contained in:
Scott James Remnant
2005-11-22 15:49:49 +01:00
committed by Kay Sievers
parent 0da0efb2b6
commit 1b75f1096e
+16 -6
View File
@@ -176,6 +176,7 @@ static void export_event_state(struct uevent_msg *msg, enum event_state state)
switch (state) {
case EVENT_QUEUED:
unlink(filename_failed);
delete_path(filename_failed);
strlcpy(target, sysfs_path, sizeof(target));
strlcat(target, msg->devpath, sizeof(target));
@@ -183,17 +184,26 @@ static void export_event_state(struct uevent_msg *msg, enum event_state state)
symlink(target, filename);
return;
case EVENT_FINISHED:
case EVENT_FAILED:
unlink(filename_failed);
delete_path(filename_failed);
/* don't remove if events for the same path are still pending */
/* don't remove, if events for the same path are still pending */
list_for_each_entry(loop_msg, &running_list, node)
if (loop_msg->devpath && strcmp(loop_msg->devpath, msg->devpath) == 0)
return;
unlink(filename);
return;
case EVENT_FAILED:
create_path(filename_failed);
rename(filename, filename_failed);
/* move failed events to the failed directory */
if (state == EVENT_FAILED) {
create_path(filename_failed);
rename(filename, filename_failed);
} else {
unlink(filename);
}
/* clean up the queue directory */
delete_path(filename);
return;
}
}