- // Explore synchronizing read/write pairs
- if (is_read() && is_acquire() && act->could_be_write() && act->is_release())
+ //lock just released...we can grab lock
+ if ((is_lock() ||is_trylock()) && (act->is_unlock()||act->is_wait()))
+ return true;
+
+ //lock just acquired...we can fail to grab lock
+ if (is_trylock() && act->is_success_lock())
+ return true;
+
+ //other thread stalling on lock...we can release lock
+ if (is_unlock() && (act->is_trylock()||act->is_lock()))
+ return true;
+
+ if (is_trylock() && (act->is_unlock()||act->is_wait()))
+ return true;
+
+ if ( is_notify() && act->is_wait() )
+ return true;
+
+ if ( is_wait() && act->is_notify() )