fix problem with time drift and process free : it may happen that a process is still...
authorcompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Thu, 8 Sep 2005 02:39:25 +0000 (02:39 +0000)
committercompudj <compudj@04897980-b3bd-0310-b5e0-8ef037075253>
Thu, 8 Sep 2005 02:39:25 +0000 (02:39 +0000)
git-svn-id: http://ltt.polymtl.ca/svn@1155 04897980-b3bd-0310-b5e0-8ef037075253

ltt/branches/poly/lttv/lttv/state.c
ltt/branches/poly/lttv/lttv/tracecontext.c

index aef86ae5c667b5a7ffa23c8b18d89eaaecc041c6..930774a492c6edc7362b1722fed501d516710b1b 100644 (file)
@@ -1338,10 +1338,19 @@ static gboolean process_free(void *hook_data, void *call_data)
   if(likely(process != NULL)) {
     /* release_task is happening at kernel level : we can now safely release
      * the data structure of the process */
+    //This test is fun, though, as it may happen that 
+    //at time t : CPU 0 : process_free
+    //at time t+150ns : CPU 1 : schedule out
+    //Clearly due to time imprecision, we disable it. (Mathieu)
+    //If this weird case happen, we have no choice but to put the 
+    //Currently running process on the cpu to 0.
     guint num_cpus = ltt_trace_get_num_cpu(ts->parent.t);
     guint i;
     for(i=0; i< num_cpus; i++) {
-      g_assert(process != ts->running_process[i]);
+      //g_assert(process != ts->running_process[i]);
+      if(process == ts->running_process[i]) {
+        ts->running_process[i] = lttv_state_find_process(ts, i, 0);
+      }
     }
     exit_process(s, process);
   }
index 8634b1be564dc835ebddcac73495b71e586e6670..e634ca57a752f7e434c6d13c11790fd15db74408 100644 (file)
@@ -1585,7 +1585,7 @@ guint lttv_process_traceset_seek_n_forward(LttvTracesetContext *self,
   lttv_process_traceset_begin(self, NULL, NULL, NULL, hooks, NULL);
   
   /* it will end on the end of traceset, or the fact that the
-   * hook returns TRUE.
+   * hook returns 2.
    */
   lttv_process_traceset_middle(self, ltt_time_infinite,
         G_MAXUINT, NULL);
This page took 0.026129 seconds and 4 git commands to generate.