Add a module to distribute messages to many analysis modules
[lttv.git] / lttv / lttv / sync / event_matching_broadcast.c
index 9eb6e10861ef5ada8f5e6dcfd03a4a00c220230c..32112014ca956302c8ea4d83be31950aa7be1219 100644 (file)
@@ -26,7 +26,7 @@
 #include <unistd.h>
 
 #include "event_analysis.h"
-#include "sync_chain_lttv.h"
+#include "sync_chain.h"
 
 #include "event_matching_broadcast.h"
 
@@ -198,13 +198,14 @@ static void matchEventBroadcast(SyncState* const syncState, Event* const event)
                                matchingData->stats->totReceive++;
                        }
 
-                       // s'il est déjà dans pendingBroadcasts
-                       //   l'ajouter à son broadcast
-                       //   s'il y a traceNb éléments
-                       //     le retirer de pending et le livrer à analysis
-                       //     détruire le broadcast (et ses éléments)
-                       // sinon
-                       //   créer un broadcast et l'ajouter à pending
+                       /* if event in pendingBroadcasts:
+                        *   add it to its broadcast
+                        *   if this broadcast has traceNb events:
+                        *     remove it from pending and deliver it to analysis
+                        *     destroy the broadcast (and its elements)
+                        * else:
+                        *   create a broadcast and add it to pending
+                        */
 
                        result=
                                g_hash_table_lookup_extended(matchingData->pendingBroadcasts,
@@ -215,6 +216,11 @@ static void matchEventBroadcast(SyncState* const syncState, Event* const event)
                                g_queue_push_tail(broadcast->events, event);
                                if (broadcast->events->length == syncState->traceNb)
                                {
+                                       if (matchingData->stats)
+                                       {
+                                               matchingData->stats->totComplete++;
+                                       }
+
                                        g_hash_table_steal(matchingData->pendingBroadcasts, datagramKey);
                                        free(datagramKey);
                                        syncState->analysisModule->analyzeBroadcast(syncState, broadcast);
@@ -226,6 +232,12 @@ static void matchEventBroadcast(SyncState* const syncState, Event* const event)
                                broadcast= malloc(sizeof(Broadcast));
                                broadcast->events= g_queue_new();
                                g_queue_push_tail(broadcast->events, event);
+
+                               datagramKey= malloc(sizeof(DatagramKey));
+                               *datagramKey= *event->event.udpEvent->datagramKey;
+
+                               g_hash_table_insert(matchingData->pendingBroadcasts,
+                                       datagramKey, broadcast);
                        }
                }
                else
@@ -288,7 +300,6 @@ static void printMatchingStatsBroadcast(SyncState* const syncState)
        {
                return;
        }
-
        matchingData= (MatchingDataBroadcast*) syncState->matchingData;
 
        printf("Broadcast matching stats:\n");
@@ -296,9 +307,9 @@ static void printMatchingStatsBroadcast(SyncState* const syncState)
                matchingData->stats->totTransmit);
        printf("\ttotal broadcasts datagrams received: %u\n",
                matchingData->stats->totReceive);
-       printf("\ttotal broadcast groups for which all emissions were identified: %u\n",
+       printf("\ttotal broadcast groups for which all receptions were identified: %u\n",
                matchingData->stats->totComplete);
-       printf("\ttotal broadcast groups missing some emissions: %u\n",
+       printf("\ttotal broadcast groups missing some receptions: %u\n",
                matchingData->stats->totIncomplete);
        if (matchingData->stats->totIncomplete > 0)
        {
This page took 0.023765 seconds and 4 git commands to generate.