nodestack: add debug prints
[c11tester.git] / action.h
index 9fa7a91c3f93443714f54ec34b153c4d09a1c20b..c455ea780883b371d80caed2d25c95e3d16edf1b 100644 (file)
--- a/action.h
+++ b/action.h
@@ -25,6 +25,13 @@ using std::memory_order_seq_cst;
 
 #define VALUE_NONE 1234567890
 
+/** A special value to represent a successful trylock */
+
+#define VALUE_TRYSUCCESS 1
+
+/** A special value to represent a failed trylock */
+#define VALUE_TRYFAILED 0
+
 /** @brief Represents an action type, identifying one of several types of
  * ModelAction */
 typedef enum action_type {
@@ -40,7 +47,10 @@ typedef enum action_type {
        ATOMIC_RMWC,          /**< Convert an atomic RMW action into a READ */
        ATOMIC_INIT,          /**< Initialization of an atomic object (e.g.,
                               *   atomic_init()) */
-       ATOMIC_FENCE
+       ATOMIC_FENCE,         /**< A fence action */
+       ATOMIC_LOCK,          /**< A lock action */
+       ATOMIC_TRYLOCK,       /**< A trylock action */
+       ATOMIC_UNLOCK         /**< An unlock action */
 } action_type_t;
 
 /* Forward declaration */
@@ -67,6 +77,14 @@ public:
        Node * get_node() const { return node; }
        void set_node(Node *n) { node = n; }
 
+       void copy_from_new(ModelAction *newaction);
+       void set_try_lock(bool obtainedlock);
+       bool is_mutex_op() const;
+       bool is_lock() const;
+       bool is_trylock() const;
+       bool is_unlock() const;
+       bool is_success_lock() const;
+       bool is_failed_trylock() const;
        bool is_read() const;
        bool is_write() const;
        bool is_rmwr() const;
@@ -79,6 +97,7 @@ public:
        bool is_seqcst() const;
        bool same_var(const ModelAction *act) const;
        bool same_thread(const ModelAction *act) const;
+       bool is_conflicting_lock(const ModelAction *act) const;
        bool is_synchronizing(const ModelAction *act) const;
 
        void create_cv(const ModelAction *parent = NULL);