(*thrd_last_action)[tid] = act;
}
-ModelAction * ModelChecker::get_last_action(thread_id_t tid)
+/**
+ * @brief Get the last action performed by a particular Thread
+ * @param tid The thread ID of the Thread in question
+ * @return The last action in the thread
+ */
+ModelAction * ModelChecker::get_last_action(thread_id_t tid) const
{
- int threadid=id_to_int(tid);
- if (threadid<(int)thrd_last_action->size())
+ int threadid = id_to_int(tid);
+ if (threadid < (int)thrd_last_action->size())
return (*thrd_last_action)[id_to_int(tid)];
else
return NULL;
* check
* @return The last seq_cst write
*/
-ModelAction * ModelChecker::get_last_seq_cst(ModelAction *curr)
+ModelAction * ModelChecker::get_last_seq_cst(ModelAction *curr) const
{
void *location = curr->get_location();
action_list_t *list = obj_map->get_safe_ptr(location);
}
/**
- * Gets the last unlock operation
- * performed on a particular mutex (i.e., memory location).
+ * Gets the last unlock operation performed on a particular mutex (i.e., memory
+ * location). This function identifies the mutex according to the current
+ * action, which is presumed to perform on the same mutex.
* @param curr The current ModelAction; also denotes the object location to
* check
* @return The last unlock operation
*/
-
-ModelAction * ModelChecker::get_last_unlock(ModelAction *curr)
+ModelAction * ModelChecker::get_last_unlock(ModelAction *curr) const
{
void *location = curr->get_location();
action_list_t *list = obj_map->get_safe_ptr(location);
- /* Find: max({i in dom(S) | seq_cst(t_i) && isWrite(t_i) && samevar(t_i, t)}) */
+ /* Find: max({i in dom(S) | isUnlock(t_i) && samevar(t_i, t)}) */
action_list_t::reverse_iterator rit;
for (rit = list->rbegin(); rit != list->rend(); rit++)
if ((*rit)->is_unlock())
void check_curr_backtracking(ModelAction * curr);
void add_action_to_lists(ModelAction *act);
- ModelAction * get_last_action(thread_id_t tid);
- ModelAction * get_last_seq_cst(ModelAction *curr);
- ModelAction * get_last_unlock(ModelAction *curr);
+ ModelAction * get_last_action(thread_id_t tid) const;
+ ModelAction * get_last_seq_cst(ModelAction *curr) const;
+ ModelAction * get_last_unlock(ModelAction *curr) const;
void build_reads_from_past(ModelAction *curr);
ModelAction * process_rmw(ModelAction *curr);
void post_r_modification_order(ModelAction *curr, const ModelAction *rf);