From 979c506becd33c59fe737f1e0091bc6acb1b4336 Mon Sep 17 00:00:00 2001 From: "Ruben S. Montero" Date: Wed, 27 Jul 2016 17:56:30 +0200 Subject: [PATCH] bug #4662: Do not try to unlock non locked mutex for PoolObjectSQL class --- src/pool/PoolSQL.cc | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/pool/PoolSQL.cc b/src/pool/PoolSQL.cc index 719156753b..fa9319b08a 100644 --- a/src/pool/PoolSQL.cc +++ b/src/pool/PoolSQL.cc @@ -126,8 +126,6 @@ int PoolSQL::allocate( do_hooks(objsql, Hook::ALLOCATE); } - objsql->unlock(); - delete objsql; if( rc != -1 ) @@ -219,6 +217,8 @@ PoolObjectSQL * PoolSQL::get( if ( rc != 0 ) { + objectsql->lock(); + delete objectsql; unlock(); @@ -237,13 +237,14 @@ PoolObjectSQL * PoolSQL::get( if ( name_index != name_pool.end() ) { - name_index->second->lock(); - PoolObjectSQL * tmp_ptr = name_index->second; name_pool.erase(okey); + pool.erase(tmp_ptr->oid); + tmp_ptr->lock(); + delete tmp_ptr; } @@ -323,14 +324,14 @@ PoolObjectSQL * PoolSQL::get(const string& name, int ouid, bool olock) { if ( index != name_pool.end() && index->second->isValid() == false ) { - index->second->lock(); - PoolObjectSQL * tmp_ptr = index->second; string tmp_okey = key(tmp_ptr->name,tmp_ptr->uid); pool.erase(tmp_ptr->oid); name_pool.erase(tmp_okey); + tmp_ptr->lock(); + delete tmp_ptr; } @@ -340,6 +341,8 @@ PoolObjectSQL * PoolSQL::get(const string& name, int ouid, bool olock) if ( rc != 0 ) { + objectsql->lock(); + delete objectsql; unlock(); @@ -456,6 +459,7 @@ void PoolSQL::replace() delete tmp_ptr; oid_queue.pop(); + removed = true; } }