In case of missing file, the JniTrace was crashing with segfault. The file
  can be missing when CPU is offline during the trace capture.
---
 ltt/jni_interface.c |   23 ++++++++++++++---------
 1 files changed, 14 insertions(+), 9 deletions(-)

diff --git a/ltt/jni_interface.c b/ltt/jni_interface.c
index d1bd993..0d46a1f 100644
--- a/ltt/jni_interface.c
+++ b/ltt/jni_interface.c
@@ -285,8 +285,11 @@ void g_datalist_foreach_addTracefilesOfTrace(GQuark name, 
gpointer data, gpointe
                 tracefile = &g_array_index(tracefile_array, LttTracefile, i);
                 
                 newPtr = CONVERT_PTR_TO_JLONG(tracefile);
-                
-                (*args->env)->CallVoidMethod(args->env, args->jobj, 
accessFunction, (*args->env)->NewStringUTF(args->env, 
g_quark_to_string(tracefile->name) ), newPtr );
+
+                /* Only process online CPUs with backing tracefile */
+                if (tracefile->cpu_online) {
+                    (*args->env)->CallVoidMethod(args->env, args->jobj, 
accessFunction, (*args->env)->NewStringUTF(args->env, 
g_quark_to_string(tracefile->name) ), newPtr );
+                }
         }
 }
 
@@ -315,13 +318,15 @@ void g_datalist_foreach_saveTracefilesTime(GQuark name, 
gpointer data, gpointer
         for (i=0; i<tracefile_array->len; i++) {
                 tracefile = &g_array_index(tracefile_array, LttTracefile, i);
                 
-                /* Allocate a new LttTime for each tracefile (so it won't 
change if the tracefile seek somewhere else) */
-                savedData = (struct saveTimeAndTracefile*)malloc( 
sizeof(struct saveTimeAndTracefile) );
-                savedData->time.tv_sec = tracefile->event.event_time.tv_sec;
-                savedData->time.tv_nsec = tracefile->event.event_time.tv_nsec;
-                savedData->tracefile = tracefile;
-                /* Append the saved data to the array */
-                g_array_append_val(save_array, savedData);
+                if (tracefile->cpu_online) {
+                                       /* Allocate a new LttTime for each 
tracefile (so it won't change if the tracefile seek somewhere else) */
+                                       savedData = (struct 
saveTimeAndTracefile*)malloc( sizeof(struct saveTimeAndTracefile) );
+                                       savedData->time.tv_sec = 
tracefile->event.event_time.tv_sec;
+                                       savedData->time.tv_nsec = 
tracefile->event.event_time.tv_nsec;
+                                       savedData->tracefile = tracefile;
+                                       /* Append the saved data to the array */
+                                       g_array_append_val(save_array, 
savedData);
+                }
         }
 }
 
-- 
1.7.1


_______________________________________________
ltt-dev mailing list
[email protected]
http://lists.casi.polymtl.ca/cgi-bin/mailman/listinfo/ltt-dev

Reply via email to