1
0
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:
Alan Jenkins 2008-10-25 17:01:21 +01:00 committed by Kay Sievers
parent 3e5c759543
commit e25fa4faf5

View File

@ -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;
}