fixed race when process disappeared shortly after reading /proc
authorEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Fri, 19 Mar 2004 16:58:57 +0000 (16:58 +0000)
committerEnrico Scholz <enrico.scholz@informatik.tu-chemnitz.de>
Fri, 19 Mar 2004 16:58:57 +0000 (16:58 +0000)
git-svn-id: http://svn.linux-vserver.org/svn/util-vserver/trunk@1314 94cd875c-1c1d-0410-91d2-eb244daf1a30

util-vserver/src/vserver-stat.c

index 298223f..e3ead78 100644 (file)
@@ -208,7 +208,8 @@ registerXid(struct Vector *vec, struct process_info *process)
 }
 
 // open the process's status file to get the ctx number, and other stat
-struct process_info *get_process_info(char *pid)
+struct process_info *
+get_process_info(char *pid)
 {
   int                          fd;
   char                         buffer[1024];
@@ -230,6 +231,8 @@ struct process_info *get_process_info(char *pid)
     WRITE_MSG(2, "): ");
     WRITE_STR(2, strerror(err));
     WRITE_MSG(2, "\n");
+
+    return 0;
   }
   
   memcpy(buffer,     "/proc/", 6); idx  = 6;
@@ -438,8 +441,11 @@ int main(int argc, char **argv)
     if (!isdigit(*dir_entry->d_name))
       continue;
 
-    if (atoi(dir_entry->d_name) != my_pid)
-      registerXid(&xid_data, get_process_info(dir_entry->d_name));
+    if (atoi(dir_entry->d_name) != my_pid) {
+      struct process_info *    info = get_process_info(dir_entry->d_name);
+      if (info)
+       registerXid(&xid_data, info);
+    }
   }
   closedir(proc_dir);