clockvector: bugfix - fixup vector initialization, size
authorBrian Norris <banorris@uci.edu>
Sat, 26 May 2012 03:28:58 +0000 (20:28 -0700)
committerBrian Norris <banorris@uci.edu>
Sat, 26 May 2012 03:37:54 +0000 (20:37 -0700)
This fixes a few bugs in ClockVector:

- The parent-less vector is the initial-thread creation, so set its vector
  clock[0] = 1
- The clock vector's data should be initialized to 0
- A clock vector cannot determine its size simply by the size of its parent (+1
  if 'act' is THREAD_CREATE); other threads could have been created, giving an
  inconsistent result here. Instead of trying to be smart about calculating
  num_threads from the parent, then, I just ask for it globally.

clockvector.cc

index aaf492d896cab61c6b8395e375eebd6044f55ff5..367fa6e2763dd6636e78d212632f6aa954cda63c 100644 (file)
@@ -1,5 +1,6 @@
 #include <algorithm>
 #include <cstring>
 #include <algorithm>
 #include <cstring>
+#include <stdlib.h>
 
 #include "model.h"
 #include "action.h"
 
 #include "model.h"
 #include "action.h"
@@ -8,14 +9,13 @@
 
 ClockVector::ClockVector(ClockVector *parent, ModelAction *act)
 {
 
 ClockVector::ClockVector(ClockVector *parent, ModelAction *act)
 {
-       num_threads = parent ? parent->num_threads : 1;
-       if (act && act->get_type() == THREAD_CREATE)
-               num_threads++;
+       num_threads = model->get_num_threads();
        clock = (int *)MYMALLOC(num_threads * sizeof(int));
        clock = (int *)MYMALLOC(num_threads * sizeof(int));
+       memset(clock, 0, num_threads * sizeof(int));
        if (parent)
                std::memcpy(clock, parent->clock, parent->num_threads * sizeof(int));
        else
        if (parent)
                std::memcpy(clock, parent->clock, parent->num_threads * sizeof(int));
        else
-               clock[0] = 0;
+               clock[0] = 1;
 
        if (act)
                clock[id_to_int(act->get_tid())] = act->get_seq_number();
 
        if (act)
                clock[id_to_int(act->get_tid())] = act->get_seq_number();