Ignore fork events that are just new threads being spawned.
authorSøren Sandmann Pedersen <sandmann@daimi.au.dk>
Wed, 10 Mar 2010 11:58:22 +0000 (06:58 -0500)
committerSøren Sandmann Pedersen <sandmann@daimi.au.dk>
Wed, 10 Mar 2010 11:58:22 +0000 (06:58 -0500)
These would cause mysterious new processes to show up.

collector.c
tracker.c

index 438b920..1c7af11 100644 (file)
@@ -574,7 +574,7 @@ process_comm (Collector *collector, comm_event_t *comm)
 static void
 process_fork (Collector *collector, fork_event_t *fork)
 {
-    d_print ("ppid: %d  pid: %d   ptid: %d  tid %d",
+    g_print ("ppid: %d  pid: %d   ptid: %d  tid %d\n",
             fork->ppid, fork->pid, fork->ptid, fork->tid);
     
     tracker_add_fork (collector->tracker, fork->ppid, fork->pid);
index c7427b8..90fa26b 100644 (file)
--- a/tracker.c
+++ b/tracker.c
@@ -493,6 +493,12 @@ process_fork (state_t *state, fork_t *fork)
     process_t *parent = g_hash_table_lookup (
        state->processes_by_pid, GINT_TO_POINTER (GET_PID (fork->header)));
 
+    if (GET_PID (fork->header) == fork->child_pid)
+    {
+       /* Just a new thread being spawned */
+       return;
+    }
+    
 #if 0
     if (parent)
 #endif
@@ -505,7 +511,12 @@ process_fork (state_t *state, fork_t *fork)
 #endif
 
        process->pid = fork->child_pid;
-       process->comm = g_strdup (parent? parent->comm : "<unknown>");
+
+       if (parent)
+           process->comm = g_strdup (parent->comm);
+       else
+           process->comm = g_strdup_printf ("<pid %d>", fork->child_pid);
+
        process->maps = g_ptr_array_new ();
 
        if (parent)