#include <new>
#include <stdarg.h>
-#include "execution.h"
#include "model.h"
+#include "execution.h"
#include "action.h"
#include "nodestack.h"
#include "schedule.h"
-#include "snapshot-interface.h"
#include "common.h"
#include "clockvector.h"
#include "cyclegraph.h"
#include "promise.h"
#include "datarace.h"
#include "threads-model.h"
-#include "output.h"
#include "bugmessage.h"
#define INITIAL_THREAD_ID 0
used_sequence_numbers(0),
next_backtrack(NULL),
bugs(),
- stats(),
failed_promise(false),
too_many_reads(false),
no_valid_reads(false),
modelclock_t used_sequence_numbers;
ModelAction *next_backtrack;
SnapVector<bug_message *> bugs;
- struct execution_stats stats;
bool failed_promise;
bool too_many_reads;
bool no_valid_reads;
};
/** @brief Constructor */
-ModelExecution::ModelExecution(struct model_params *params, Scheduler *scheduler, NodeStack *node_stack) :
+ModelExecution::ModelExecution(ModelChecker *m,
+ struct model_params *params,
+ Scheduler *scheduler,
+ NodeStack *node_stack) :
+ model(m),
params(params),
scheduler(scheduler),
action_trace(new action_list_t()),
thrd_last_fence_release(new SnapVector<ModelAction *>()),
node_stack(node_stack),
priv(new struct model_snapshot_members()),
- mo_graph(new CycleGraph()),
- execution_number(1)
+ mo_graph(new CycleGraph())
{
/* Initialize a model-checker thread, for special ModelActions */
model_thread = new Thread(get_next_id());
delete priv;
}
+int ModelExecution::get_execution_number() const
+{
+ return model->get_execution_number();
+}
+
static action_list_t * get_safe_ptr_action(HashTable<const void *, action_list_t *, uintptr_t, 4> * hash, void * ptr)
{
action_list_t *tmp = hash->get(ptr);
{
#if SUPPORT_MOD_ORDER_DUMP
char buffername[100];
- sprintf(buffername, "exec%04u", execution_number);
+ sprintf(buffername, "exec%04u", get_execution_number());
mo_graph->dumpGraphToFile(buffername);
- sprintf(buffername, "graph%04u", execution_number);
+ sprintf(buffername, "graph%04u", get_execution_number());
dumpGraph(buffername);
#endif
- model_print("Execution %d:", execution_number);
+ model_print("Execution %d:", get_execution_number());
if (isfeasibleprefix()) {
if (scheduler->all_threads_sleeping())
model_print(" SLEEP-SET REDUNDANT");