+
+6. Checking at runtime or check with complete trace analysis can have the
+ follwing concerns. Checking at runtime, HB might not be established yet (we
+ can leave it at trace analysis though). More importantly, we have potential
+ commit point and commit point check, which might be preempted by another
+ commit point. We can't decide whether to execute the commit point actions or
+ not since we can't decide if it's really a commit point at that time. Checking
+ with complete execution can be more clear and better designed, but it has a
+ tough challenge. Some data structure may check their predicate with pointers,
+ however, we can't guarantee those pointers are still valid (the object they
+ are pointing to may be changed or even deleted). To tackle this, we provide an
+ alternative which requires users to define the snapshot function for the
+ pointers if they are about to check with pointers that might change. In the
+ current data structure, it's not a problem because they only return reference
+ or pointers, which we can do simple equality check. We decided to take the
+ trace analysis approach because it's still more flexible and easier to
+ implement.