Watch, Follow, &
Connect with Us
Public Report
Report From: Delphi-BCB/RTL/Delphi/Thread support    [ Add a report in this area ]  
Report #:  17914   Status: Closed
(Pulled) TMultiReadExclusiveWriteSynchronizer can deadlock if calls to BeginRead are nested.
Project:  Delphi Build #:  5.0.5.56
Version:    5.0 Submitted By:   John Kaster
Report Type:  Crash / Data loss / Total failure Date Reported:  8/11/1999 12:00:00 AM
Severity:    Infrequently encountered problem Last Updated: 3/20/2012 2:24:39 AM
Platform:    All versions Internal Tracking #:   68233
Resolution: Fixed (Resolution Comments) Resolved in Build: : 10.0.2098.14501
Duplicate of:  None
Voting and Rating
Overall Rating: No Ratings Yet
0.00 out of 5
Total Votes: None
Description
TMultiReadExclusiveWriteSynchronizer can deadlock if calls to BeginRead are nested.

Steps to Reproduce:
There seems to be a potential problem with how TMultiReadExclusiveWriteSynchronizer is implemented. If a thread tries to get a read lock (with BeginRead) twice and another thread tries to get a write lock, deadlocks can occur:
- Thread 1 calls BeginRead and gets a read lock
- Thread 2 calls BeginWrite, holds the FLock critical section, then waits INFINE on a signal that the last reader released its readlock
- Thread 1 calls BeginRead again. It waits for the FLock critical section. This is held by Thread 2, which is waiting for Thread 1 to continue...
- Deadlock...
- Run the attached project.
// Note that the ShowMessage is never reached because of the deadlock
Workarounds
None
Attachment
N
Comments

None

Server Response from: ETNACODE01