#100 Deadlock can caused by online backend maintenance operations
Closed: wontfix None Opened 12 years ago by mkosek.

https://bugzilla.redhat.com/show_bug.cgi?id=528567

This issue was encountered by the freeIPA project as described in bug 528209.

Due to the way we are using PR_RWLock to protect the backend structure, a
deadlock can occur when an online  backend maintenance operation (such as
reindexing) occurs.

The way PR_RWLock works is that a waiting writer will block any threads
attempting to get a new read lock.  If you use read locks in a re-entrant
manor, a request for a write lock between the two read lock calls will cause a
deadlock (the writer is waiting for the reader to exit, and the reader can't
get the re-entrant lock since the writer is waiting).

This deadlock can happen when a post-op plug-in is called since a read lock on
the backend is already held before the plug-ins are called and not released
until after the plug-ins finish.  If any of the plug-ins do some sort of
internal operation on the same backend, the backend will end up being locked
again by the same thread.  This typically isn't a problem, but if any other
thread attempts to get a write lock on the same backend (such as the db2index
task), a deadlock can occur.

I think this is fixed by using posix rwlocks instead of NSPR rwlocks

commit changeset:f9b199e/389-ds-base
Author: Nathan Kinder nkinder@redhat.com
Date: Wed Aug 17 09:20:26 2011 -0700
This adds a new slapi_rwlock API and uses it throughout the server.
Internally, this API can allow either NSPR or POSIX rwlocks to be
used for different platforms. This patch makes it use the POSIX
implementation on Linux platforms since the NSPR implementation
does not safely allow re-entrant reader locks to be used.

fixed in 1.2.9 in rhel 6.2.z

Added initial screened field value.

Metadata Update from @rmeggins:
- Issue assigned to rmeggins
- Issue set to the milestone: 1.2.10

7 years ago

389-ds-base is moving from Pagure to Github. This means that new issues and pull requests
will be accepted only in 389-ds-base's github repository.

This issue has been cloned to Github and is available here:
- https://github.com/389ds/389-ds-base/issues/100

If you want to receive further updates on the issue, please navigate to the github issue
and click on subscribe button.

Thank you for understanding. We apologize for all inconvenience.

Metadata Update from @spichugi:
- Issue close_status updated to: wontfix (was: Fixed)

3 years ago

Login to comment on this ticket.

Metadata