
|
If you were logged in you would be able to see more operations.
|
|
|
Environment:
|
Windows XP SP2
|
|
SailConnectionBase.autoStartTransaction calls startTransactionInternal at line 275. If NativeStoreConnection.startTransactionInternal throws an Error from the call to the triple store to start a transaction (NativeStoreConnection: 329), the thread has a transaction lock from the ExclusiveLockManager, but the SailConnectionBase doesn't get to line 276 to set txnActive=true. This means a rollback will not recognize that it has an active transaction and call rollbackInternal at line 314, which means the thread never releases the ExclusiveLockManager.ExclusiveLock. Any attempt to start a transaction will block at ExclusiveLockManager.getExclusiveLock, line 86, waiting for someone to set lockInUse to false. This never happens because no rollback will clear it's lock.
|
|
|
Change by Arjohn Kampman [30/Jun/09 03:13 PM]
|
| Field |
Original Value |
New Value |
|
Fix Version/s
|
|
2.3.0
[ 10402
]
|
The NativeStore (and MemoryStore too) should release the lock if they fail to start the transaction properly.
|
Change by Arjohn Kampman [19/Oct/09 12:11 PM]
|
| Field |
Original Value |
New Value |
|
Component/s
|
|
Memory Sail
[ 10002
]
|
|
Component/s
|
|
RDBMS Sail
[ 10001
]
|
|
Summary
|
NativeStore deadlock on ExclusiveLockManager
|
Unreleased locks when startTransaction() call fails; potential deadlock
|
|
Assignee
|
|
Arjohn Kampman
[ arjohn
]
|
Lock that are acquired in startTransactionInternal are now released in case an exception is thrown. This has been fixed in the NativeStore, MemoryStore and RdbmsStore.
|
Change by Arjohn Kampman [19/Oct/09 12:16 PM]
|
| Field |
Original Value |
New Value |
|
Status
|
Open
[ 1
]
|
Resolved
[ 5
]
|
|
Resolution
|
|
Fixed
[ 1
]
|
|
|