Details
Description
The Transaction implementation currently uses a Mutex that is not guarded by try-finally. In case of an exception the Mutex is kept in an aquired state and will never recover.
By replacing this by lock they the sync object is properly released on an exception.