1
0
mirror of https://github.com/systemd/systemd.git synced 2025-03-19 22:50:17 +03:00

[PATCH] udevd: don't delay events with TIMEOUT in the environment

On Tue, 2005-03-15 at 09:25 +0100, Hannes Reinecke wrote:
> The current implementation of the firmware class breaks a fundamental
> assumption in udevd: that the physical device can be initialised fully
> prior to executing the next event for that device.

Thanks to Hannes for the patch.
This commit is contained in:
kay.sievers@vrfy.org 2005-03-17 11:51:37 +01:00 committed by Greg KH
parent 92ebb398ed
commit 7f7ae03a62
3 changed files with 22 additions and 0 deletions

View File

@ -1,3 +1,9 @@
udev 056
========
Possible use of a system-wide klibc:
make USE_KLIB=true KLCC=/usr/bin/klcc all
will link against an external klibc and our own version will be ignored.
udev 055
========
We support an unlimited count of symlinks now.

15
udevd.c
View File

@ -113,6 +113,14 @@ static void msg_queue_insert(struct hotplug_msg *msg)
return;
}
/* don't delay messages with timeout set */
if (msg->timeout) {
dbg("move seq %llu with timeout %u to exec queue", msg->seqnum, msg->timeout);
list_add(&msg->node, &exec_list);
run_exec_q = 1;
return;
}
/* sort message by sequence number into list */
list_for_each_entry_reverse(loop_msg, &msg_list, node) {
if (loop_msg->seqnum < msg->seqnum)
@ -293,6 +301,10 @@ static struct hotplug_msg *running_with_devpath(struct hotplug_msg *msg)
if (msg->devpath == NULL)
return NULL;
/* skip any events with a timeout set */
if (msg->timeout)
return NULL;
list_for_each_entry(loop_msg, &running_list, node) {
if (loop_msg->devpath == NULL)
continue;
@ -490,6 +502,9 @@ static struct hotplug_msg *get_udevsend_msg(void)
if (strncmp(key, "PHYSDEVPATH=", 12) == 0)
msg->physdevpath = &key[12];
if (strncmp(key, "TIMEOUT=", 8) == 0)
msg->timeout = strtoull(&key[8], NULL, 10);
}
msg->envp[i++] = "UDEVD_EVENT=1";
msg->envp[i] = NULL;

View File

@ -60,6 +60,7 @@ struct hotplug_msg {
char *subsystem;
unsigned long long seqnum;
char *physdevpath;
unsigned int timeout;
char *envp[HOTPLUG_NUM_ENVP+1];
char envbuf[];
};