Assume that we have three threads, t1, t2, and t3, each performing writes on an object, obj.
t1 acquires w lock on obj. Produces obj' to speculate on during commit.
t2 acquires w lock on obj' and t3 waits on obj'.
t1 finishes, obj' gets promoted to obj. Then t3 gets speculated to obj''. When t3 tries to commit, obj' forwards the commit request to obj. obj does not have t3 in its read lock holders because it transferred these to obj'' and returns ALWAYS_FALSE_FUTURE. Even though should actually wait for obj'' to return.
This should cause many more backouts than necessary whenever running with more than 2 threads that are writers.
Assume that we have three threads, t1, t2, and t3, each performing writes on an object, obj.
t1 acquires w lock on obj. Produces obj' to speculate on during commit. t2 acquires w lock on obj' and t3 waits on obj'.
t1 finishes, obj' gets promoted to obj. Then t3 gets speculated to obj''. When t3 tries to commit, obj' forwards the commit request to obj. obj does not have t3 in its read lock holders because it transferred these to obj'' and returns ALWAYS_FALSE_FUTURE. Even though should actually wait for obj'' to return.
This should cause many more backouts than necessary whenever running with more than 2 threads that are writers.