adamwill / 389-ds-base

Forked from 389-ds-base 4 years ago
Clone

b998fed Ticket 49873: (cont) Contention on virtual attribute lookup

Authored and Committed by tbordaz 5 years ago
    Ticket 49873: (cont) Contention on virtual attribute lookup
    
    Bug Description:
    	The previous fix was incomplete.
    	It created the thread private counter before the fork.
    	The deamon process was not inheriting it.
    
    	There is a possiblity that an callback of an internal search
    	tries to update the map. (cos thread monitoring cos definition)
    	In such case the RW lock was first acquired in read at the top level
    	of the internal search, then later the callback try to acquire it in write.
    	this created a deadlock
    
    	It stored in in private counter a value (int) rather than the address of
    	of the value (int*).
    
    Fix Description:
    	The fix consists to create the thread private counter after the deamon creation.
    	In adding, when acquiring the lock in write, if the lock was already acquired
    	at the top level (in read), it release the lock and reset the counter. Then acquires
    	the lock in write.
    	In the opposite when releasing the lock in read, if the lock was not already acquired
    	it assumes it was acquired in write and do nothing
    
    https://pagure.io/389-ds-base/issue/49873
    
    Reviewed by: Mark Reynolds, William Brown (thanks !!)
    
    Platforms tested: F30
    
    Flag Day: no
    
    Doc impact: no
    
        
file modified
+4 -0
file modified
+0 -1
file modified
+93 -33