projects
/
model-checker.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
nodestack: style
[model-checker.git]
/
action.cc
diff --git
a/action.cc
b/action.cc
index 121f5ee7499d7161257dd136e5edd646bc8c8c94..a11467587901f258a03b9e11623403f60f3d1263 100644
(file)
--- a/
action.cc
+++ b/
action.cc
@@
-124,6
+124,12
@@
bool ModelAction::is_failed_trylock() const
return (type == ATOMIC_TRYLOCK && value == VALUE_TRYFAILED);
}
return (type == ATOMIC_TRYLOCK && value == VALUE_TRYFAILED);
}
+/** @return True if this operation is performed on a C/C++ atomic variable */
+bool ModelAction::is_atomic_var() const
+{
+ return is_read() || could_be_write();
+}
+
bool ModelAction::is_uninitialized() const
{
return type == ATOMIC_UNINIT;
bool ModelAction::is_uninitialized() const
{
return type == ATOMIC_UNINIT;
@@
-258,7
+264,7
@@
void ModelAction::process_rmw(ModelAction * act) {
*/
bool ModelAction::could_synchronize_with(const ModelAction *act) const
{
*/
bool ModelAction::could_synchronize_with(const ModelAction *act) const
{
- //Same thread can't be reordered
+ //
Same thread can't be reordered
if (same_thread(act))
return false;
if (same_thread(act))
return false;
@@
-277,15
+283,15
@@
bool ModelAction::could_synchronize_with(const ModelAction *act) const
(act->could_be_write() || act->is_fence()))
return true;
(act->could_be_write() || act->is_fence()))
return true;
- //lock just released...we can grab lock
+ //
lock just released...we can grab lock
if ((is_lock() ||is_trylock()) && (act->is_unlock()||act->is_wait()))
return true;
if ((is_lock() ||is_trylock()) && (act->is_unlock()||act->is_wait()))
return true;
- //lock just acquired...we can fail to grab lock
+ //
lock just acquired...we can fail to grab lock
if (is_trylock() && act->is_success_lock())
return true;
if (is_trylock() && act->is_success_lock())
return true;
- //other thread stalling on lock...we can release lock
+ //
other thread stalling on lock...we can release lock
if (is_unlock() && (act->is_trylock()||act->is_lock()))
return true;
if (is_unlock() && (act->is_trylock()||act->is_lock()))
return true;
@@
-304,19
+310,19
@@
bool ModelAction::could_synchronize_with(const ModelAction *act) const
bool ModelAction::is_conflicting_lock(const ModelAction *act) const
{
bool ModelAction::is_conflicting_lock(const ModelAction *act) const
{
- //Must be different threads to reorder
+ //
Must be different threads to reorder
if (same_thread(act))
return false;
if (same_thread(act))
return false;
- //Try to reorder a lock past a successful lock
+ //
Try to reorder a lock past a successful lock
if (act->is_success_lock())
return true;
if (act->is_success_lock())
return true;
- //Try to push a successful trylock past an unlock
+ //
Try to push a successful trylock past an unlock
if (act->is_unlock() && is_trylock() && value == VALUE_TRYSUCCESS)
return true;
if (act->is_unlock() && is_trylock() && value == VALUE_TRYSUCCESS)
return true;
- //Try to push a successful trylock past a wait
+ //
Try to push a successful trylock past a wait
if (act->is_wait() && is_trylock() && value == VALUE_TRYSUCCESS)
return true;
if (act->is_wait() && is_trylock() && value == VALUE_TRYSUCCESS)
return true;
@@
-349,6
+355,8
@@
void ModelAction::set_try_lock(bool obtainedlock) {
/** @return The Node associated with this ModelAction */
Node * ModelAction::get_node() const
{
/** @return The Node associated with this ModelAction */
Node * ModelAction::get_node() const
{
+ /* UNINIT actions do not have a Node */
+ ASSERT(!is_uninitialized());
return node;
}
return node;
}
@@
-462,7
+470,11
@@
void ModelAction::print() const
type_str = "unknown type";
}
type_str = "unknown type";
}
- uint64_t valuetoprint=type==ATOMIC_READ?(reads_from!=NULL?reads_from->value:VALUE_NONE):value;
+ uint64_t valuetoprint;
+ if (type == ATOMIC_READ && reads_from != NULL)
+ valuetoprint = reads_from->value;
+ else
+ valuetoprint = value;
switch (this->order) {
case std::memory_order_relaxed:
switch (this->order) {
case std::memory_order_relaxed: