Fixed race condition found by Vicente on member initialization
access to shared maps which could be modified by threads upon
entry and exit. The entry condition should not have caused errors
because of the assumption that no transactions were previously
started prior to all threads initializing. However, the thread
termination could have caused crashes. Now a light_auto_lock
object is initialized in the member initialization which prevents
both thread entry/exit and transaction construction from occurring
at the same time. This blocks the race condition of simultaneous,
shared access to the maps.
In addition, I have added the new code to the contention manager
which now makes a single virtual call listing a committing
transaction's conflicts with all other transactions. Previously,
it would make a virtual call per transactional conflict. If the
conflicts were high, the vcall overhead could cause performance
degradation since a committing transaction is a critical serialization
point.