mirror of
https://github.com/systemd/systemd.git
synced 2025-01-26 14:04:03 +03:00
udevd: use a tighter loop for compare_devpath()
This crops up in my threaded udevd profiles from time to time. It's not consistent - probably due to variations in the number of concurrent events - but it can hit 4% user time and higher. The change halves the user time spent in compare_devpath(). Signed-off-by: Alan Jenkins <alan-jenkins@tuffmail.co.uk>
This commit is contained in:
parent
3e5c759543
commit
e25fa4faf5
28
udev/udevd.c
28
udev/udevd.c
@ -310,26 +310,24 @@ static int mem_size_mb(void)
|
||||
|
||||
static int compare_devpath(const char *running, const char *waiting)
|
||||
{
|
||||
int i;
|
||||
int i = 0;
|
||||
|
||||
for (i = 0; i < UTIL_PATH_SIZE; i++) {
|
||||
/* identical device event found */
|
||||
if (running[i] == '\0' && waiting[i] == '\0')
|
||||
return 1;
|
||||
while (running[i] == waiting[i] && running[i] != '\0')
|
||||
i++;
|
||||
|
||||
/* parent device event found */
|
||||
if (running[i] == '\0' && waiting[i] == '/')
|
||||
return 2;
|
||||
/* identical device event found */
|
||||
if (running[i] == '\0' && waiting[i] == '\0')
|
||||
return 1;
|
||||
|
||||
/* child device event found */
|
||||
if (running[i] == '/' && waiting[i] == '\0')
|
||||
return 3;
|
||||
/* parent device event found */
|
||||
if (running[i] == '\0' && waiting[i] == '/')
|
||||
return 2;
|
||||
|
||||
/* no matching event */
|
||||
if (running[i] != waiting[i])
|
||||
break;
|
||||
}
|
||||
/* child device event found */
|
||||
if (running[i] == '/' && waiting[i] == '\0')
|
||||
return 3;
|
||||
|
||||
/* no matching event */
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user