]>
Commit | Line | Data |
---|---|---|
8c5b2406 AF |
1 | diff -u sysvinit-2.88dsf/src/killall5.c sysvinit-2.88dsf/src/killall5.c |
2 | --- sysvinit-2.88dsf/src/killall5.c 2011-12-03 23:12:52.373139250 +0100 | |
3 | +++ sysvinit-2.88dsf/src/killall5.c 2011-12-03 23:19:21.498025134 +0100 | |
8c5b2406 | 4 | @@ -496,7 +497,7 @@ |
437bcd41 | 5 | /* Open the status file. */ |
8c5b2406 | 6 | snprintf(path, sizeof(path), "%s/stat", d->d_name); |
437bcd41 AM |
7 | |
8 | - /* Read SID & statname from it. */ | |
9 | + /* Read statname from it. */ | |
8c5b2406 | 10 | if ((fp = fopen(path, "r")) != NULL) { |
437bcd41 | 11 | buf[0] = 0; |
612af2b6 | 12 | fgets(buf, sizeof(buf), fp); |
8c5b2406 | 13 | @@ -509,7 +510,6 @@ |
437bcd41 AM |
14 | /* Read program name. */ |
15 | q = strrchr(buf, ')'); | |
16 | if (q == NULL) { | |
17 | - p->sid = 0; | |
18 | nsyslog(LOG_ERR, | |
8c5b2406 | 19 | "can't get program name from /proc/%s\n", |
437bcd41 | 20 | path); |
8c5b2406 AF |
21 | @@ -517,6 +517,7 @@ |
22 | if (p->argv1) free(p->argv1); | |
23 | if (p->statname) free(p->statname); | |
612af2b6 JB |
24 | free(p); |
25 | + fclose(fp); | |
26 | continue; | |
27 | } | |
28 | s++; | |
8c5b2406 | 29 | @@ -531,23 +532,26 @@ |
612af2b6 JB |
30 | |
31 | /* Get session, startcode, endcode. */ | |
32 | startcode = endcode = 0; | |
33 | - if (sscanf(q, "%*c %*d %*d %d %*d %*d %*u %*u " | |
34 | + if (sscanf(q, "%*c %*d %*d %*d %*d %*d %*u %*u " | |
35 | "%*u %*u %*u %*u %*u %*d %*d " | |
36 | "%*d %*d %*d %*d %*u %*u %*d " | |
37 | "%*u %lu %lu", | |
38 | - &p->sid, &startcode, &endcode) != 3) { | |
39 | + &startcode, &endcode) == 2) { | |
40 | + if (startcode == 0 && endcode == 0) | |
41 | + p->kernel = 1; | |
42 | + } | |
43 | + fclose(fp); | |
44 | + p->sid = getsid(pid); | |
45 | + if (p->sid < 0) { | |
46 | p->sid = 0; | |
437bcd41 AM |
47 | - nsyslog(LOG_ERR, "can't read sid from %s\n", |
48 | - path); | |
612af2b6 JB |
49 | + nsyslog(LOG_ERR, "can't read sid for pid %d\n", pid); |
50 | + free(p->statname); | |
8c5b2406 AF |
51 | if (p->argv0) free(p->argv0); |
52 | if (p->argv1) free(p->argv1); | |
53 | if (p->statname) free(p->statname); | |
612af2b6 JB |
54 | free(p); |
55 | continue; | |
56 | } | |
57 | - if (startcode == 0 && endcode == 0) | |
58 | - p->kernel = 1; | |
59 | - fclose(fp); | |
437bcd41 AM |
60 | } else { |
61 | /* Process disappeared.. */ | |
8c5b2406 | 62 | if (p->argv0) free(p->argv0); |