lp:~tplavcic/percona-server/jen-308-5.6-trunk
- Get this branch:
- bzr branch lp:~tplavcic/percona-server/jen-308-5.6-trunk
Branch merges
Branch information
- Owner:
- Tomislav Plavcic
- Status:
- Development
Recent revisions
- 718. By Alexey Kopytov
-
Bug #1405076: Deadlock in RELEASE_LOCK()
The RELEASE_LOCK() implementation introduced by the multiple user level
locks patch can result in a deadlock under the following conditions:- connection #1 calls RELEASE_LOCK() for a previously acquired lock. In
which case MDL_lock::remove_ ticket( ) is called, which write-locks
MDL_lock::m_rwlock corresponding to the user-level MDL object. With
that lock held, MDL_map_partition: :remove( ) is called which locks
MDL_map_partition: :m_mutex protecting the hash of MDL locks belonging
to an MDL partition.- connection #2 calls RELEASE_LOCK() simultaneously for the same lock
being released by connection #1. Since connection #2 did not own the
lock, it calls MDL_map_partition: :get_lock_ owner() to check if 0 or
NULL should be returned (i.e. if the lock exists). That function also
locks both MDL_map_partition: :m_mutex and MDL_lock: :m_rwlock( ), but in
the reverse order as compared to connection #1.With the right timing for the above events we get each thread waiting
for a lock acquired by the other thread, i.e. a deadlock.Fixed by avoiding to lock MDL_lock::m_rwlock with
MDL_map_partition: :m_mutex locked. There is already infrastructure to
release the latter and acquire the former and guarantee that a reference
to an MDL_lock object is valid at the same time. It is implemented in
MDL_map_partition: :move_from_ hash_to_ lock_mutex( ), so the fix utilizes
it to remove the deadlock condition. - 716. By Jenkins Master <email address hidden>
-
Merge lp:~hrvojem/percona-server/bug1218767-5.6
http://jenkins. percona. com/job/ merge-PS- 5.6-docs- kickoff/ 69/
Branch metadata
- Branch format:
- Branch format 7
- Repository format:
- Bazaar repository format 2a (needs bzr 1.16 or later)
- Stacked on:
- lp:percona-server/5.6