diff options
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/pid.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/src/lib/pid.c b/src/lib/pid.c index 3cf0df909..2cc72bce0 100644 --- a/src/lib/pid.c +++ b/src/lib/pid.c | |||
@@ -303,6 +303,7 @@ void pid_store_cpu(unsigned index, unsigned parent, unsigned *utime, unsigned *s | |||
303 | 303 | ||
304 | // mon_pid: pid of sandbox to be monitored, 0 if all sandboxes are included | 304 | // mon_pid: pid of sandbox to be monitored, 0 if all sandboxes are included |
305 | void pid_read(pid_t mon_pid) { | 305 | void pid_read(pid_t mon_pid) { |
306 | unsigned old_max_pids = max_pids; | ||
306 | FILE *fp = fopen("/proc/sys/kernel/pid_max", "r"); | 307 | FILE *fp = fopen("/proc/sys/kernel/pid_max", "r"); |
307 | if (fp) { | 308 | if (fp) { |
308 | int val; | 309 | int val; |
@@ -314,12 +315,13 @@ void pid_read(pid_t mon_pid) { | |||
314 | } | 315 | } |
315 | 316 | ||
316 | if (pids == NULL) { | 317 | if (pids == NULL) { |
318 | old_max_pids = max_pids; | ||
317 | pids = malloc(sizeof(Process) * max_pids); | 319 | pids = malloc(sizeof(Process) * max_pids); |
318 | if (pids == NULL) | 320 | if (pids == NULL) |
319 | errExit("malloc"); | 321 | errExit("malloc"); |
320 | } | 322 | } |
321 | 323 | ||
322 | memset(pids, 0, sizeof(Process) * max_pids); | 324 | memset(pids, 0, sizeof(Process) * old_max_pids); |
323 | pid_t mypid = getpid(); | 325 | pid_t mypid = getpid(); |
324 | 326 | ||
325 | DIR *dir; | 327 | DIR *dir; |
@@ -424,7 +426,7 @@ void pid_read(pid_t mon_pid) { | |||
424 | closedir(dir); | 426 | closedir(dir); |
425 | 427 | ||
426 | // update max_pid | 428 | // update max_pid |
427 | max_pids = new_max_pids; | 429 | max_pids = new_max_pids + 1; |
428 | 430 | ||
429 | pid_t pid; | 431 | pid_t pid; |
430 | for (pid = 0; pid < max_pids; pid++) { | 432 | for (pid = 0; pid < max_pids; pid++) { |