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.
#include <algorithm>
#include <cstring>
+#include <stdlib.h>
#include "model.h"
#include "action.h"
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));
+ memset(clock, 0, num_threads * sizeof(int));
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();