Set the correction factors in the sync_chain
[lttv.git] / lttv / lttv / sync / event_processing_text.c
index 9dd5d30208b8ba9deb4214ce418b2cabe5eae371..37f4194e8f02987cba2d35ae8be6a79cfb82b3d5 100644 (file)
@@ -1,21 +1,21 @@
 /* This file is part of the Linux Trace Toolkit viewer
- * Copyright (C) 2009 Benjamin Poirier <benjamin.poirier@polymtl.ca>
+ * Copyright (C) 2009, 2010 Benjamin Poirier <benjamin.poirier@polymtl.ca>
  *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License Version 2 as
- * published by the Free Software Foundation;
+ * This program is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 2.1 of the License, or (at
+ * your option) any later version.
  *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
+ * This program is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public
+ * License for more details.
  *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston,
- * MA 02111-1307, USA.
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
  */
 
+#define _GNU_SOURCE
 #define NANOSECONDS_PER_SECOND 1000000000
 #define CPU_FREQ 1e9
 
@@ -37,7 +37,7 @@
 // Functions common to all processing modules
 static void initProcessingText(SyncState* const syncState, ...);
 static void destroyProcessingText(SyncState* const syncState);
-static void finalizeProcessingText(SyncState* const syncState);
+static GArray* finalizeProcessingText(SyncState* const syncState);
 static void printProcessingStatsText(SyncState* const syncState);
 static void writeProcessingTraceTimeOptionsText(SyncState* const syncState,
        const unsigned int i, const unsigned int j);
@@ -47,8 +47,6 @@ static void writeProcessingGraphVariablesText(SyncState* const syncState,
        const unsigned int i);
 
 // Functions specific to this module
-static void registerProcessingText() __attribute__((constructor (102)));
-
 static unsigned int readTraceNb(FILE* testCase);
 static void skipCommentLines(FILE* testCase);
 
@@ -70,7 +68,7 @@ static ProcessingModule processingModuleText = {
 /*
  * Processing Module registering function
  */
-static void registerProcessingText()
+void registerProcessingText()
 {
        g_queue_push_tail(&processingModules, &processingModuleText);
 }
@@ -120,6 +118,8 @@ static void destroyProcessingText(SyncState* const syncState)
                return;
        }
 
+       fclose(processingData->testCase);
+
        if (syncState->stats && processingData->factors)
        {
                g_array_free(processingData->factors, TRUE);
@@ -136,10 +136,12 @@ static void destroyProcessingText(SyncState* const syncState)
  *
  * Args:
  *   syncState:    container for synchronization data.
+ *
+ * Returns:
+ *   Factors[traceNb] synchronization factors for each trace
  */
-static void finalizeProcessingText(SyncState* const syncState)
+static GArray* finalizeProcessingText(SyncState* const syncState)
 {
-       size_t len;
        int retval;
        unsigned int* seq;
        GArray* factors;
@@ -147,11 +149,12 @@ static void finalizeProcessingText(SyncState* const syncState)
                syncState->processingData;
        FILE* testCase= processingData->testCase;
        char* line= NULL;
+       size_t bufLen;
 
        seq= calloc(syncState->traceNb, sizeof(unsigned int));
 
        skipCommentLines(testCase);
-       retval= getline(&line, &len, testCase);
+       retval= getline(&line, &bufLen, testCase);
        while(!feof(testCase))
        {
                unsigned int sender, receiver;
@@ -164,9 +167,9 @@ static void finalizeProcessingText(SyncState* const syncState)
                        g_error(strerror(errno));
                }
 
-               if (line[len - 1] == '\n')
+               if (line[retval - 1] == '\n')
                {
-                       line[len - 1]= '\0';
+                       line[retval - 1]= '\0';
                }
 
                retval= sscanf(line, " %u %u %lf %lf %c", &sender, &receiver,
@@ -262,7 +265,7 @@ static void finalizeProcessingText(SyncState* const syncState)
                seq[sender]++;
 
                skipCommentLines(testCase);
-               retval= getline(&line, &len, testCase);
+               retval= getline(&line, &bufLen, testCase);
        }
 
        free(seq);
@@ -277,10 +280,8 @@ static void finalizeProcessingText(SyncState* const syncState)
        {
                processingData->factors= factors;
        }
-       else
-       {
-               g_array_free(factors, TRUE);
-       }
+
+       return factors;
 }
 
 
@@ -352,6 +353,11 @@ static unsigned int readTraceNb(FILE* testCase)
                abort();
        }
 
+       if (line)
+       {
+               free(line);
+       }
+
        return result;
 }
 
This page took 0.024664 seconds and 4 git commands to generate.