projects
/
model-checker.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
include/: add small header comments
[model-checker.git]
/
model.cc
diff --git
a/model.cc
b/model.cc
index ee3ce992cef8aa816fde0466ce67b42e5f6161c5..a96a79c851ee83b5624df3bdafda7487802bf5b1 100644
(file)
--- a/
model.cc
+++ b/
model.cc
@@
-12,7
+12,7
@@
#include "promise.h"
#include "datarace.h"
#include "mutex.h"
#include "promise.h"
#include "datarace.h"
#include "mutex.h"
-#include "threads.h"
+#include "threads
-model
.h"
#define INITIAL_THREAD_ID 0
#define INITIAL_THREAD_ID 0
@@
-116,6
+116,10
@@
modelclock_t ModelChecker::get_next_seq_num()
return ++priv->used_sequence_numbers;
}
return ++priv->used_sequence_numbers;
}
+Node * ModelChecker::get_curr_node() {
+ return node_stack->get_head();
+}
+
/**
* @brief Choose the next thread to execute.
*
/**
* @brief Choose the next thread to execute.
*
@@
-260,7
+264,8
@@
bool ModelChecker::next_execution()
DEBUG("Number of acquires waiting on pending release sequences: %zu\n",
pending_rel_seqs->size());
DEBUG("Number of acquires waiting on pending release sequences: %zu\n",
pending_rel_seqs->size());
- if (isfinalfeasible() || DBG_ENABLED())
+
+ if (isfinalfeasible() || (params.bound != 0 && priv->used_sequence_numbers > params.bound ) || DBG_ENABLED() )
print_summary();
if ((diverge = get_next_backtrack()) == NULL)
print_summary();
if ((diverge = get_next_backtrack()) == NULL)
@@
-766,10
+771,9
@@
Thread * ModelChecker::check_current_action(ModelAction *curr)
return get_next_thread(NULL);
}
return get_next_thread(NULL);
}
- wake_up_sleeping_actions(curr);
-
ModelAction *newcurr = initialize_curr_action(curr);
ModelAction *newcurr = initialize_curr_action(curr);
+ wake_up_sleeping_actions(curr);
/* Add the action to lists before any other model-checking tasks */
if (!second_part_of_rmw)
/* Add the action to lists before any other model-checking tasks */
if (!second_part_of_rmw)
@@
-1873,7
+1877,7
@@
void ModelChecker::build_reads_from_past(ModelAction *curr)
curr->print();
}
curr->print();
}
- if (curr->get_sleep_flag()) {
+ if (curr->get_sleep_flag()
&& ! curr->is_seqcst()
) {
if (sleep_can_read_from(curr, act))
curr->get_node()->add_read_from(act);
} else
if (sleep_can_read_from(curr, act))
curr->get_node()->add_read_from(act);
} else
@@
-2073,6
+2077,12
@@
bool ModelChecker::take_step() {
if (!isfeasible())
return false;
if (!isfeasible())
return false;
+ if (params.bound != 0) {
+ if (priv->used_sequence_numbers > params.bound) {
+ return false;
+ }
+ }
+
DEBUG("(%d, %d)\n", curr ? id_to_int(curr->get_id()) : -1,
next ? id_to_int(next->get_id()) : -1);
DEBUG("(%d, %d)\n", curr ? id_to_int(curr->get_id()) : -1,
next ? id_to_int(next->get_id()) : -1);