diff --git a/nova/openstack/common/lockutils.py b/nova/openstack/common/lockutils.py index 29827dd532f3..cea31544ec37 100644 --- a/nova/openstack/common/lockutils.py +++ b/nova/openstack/common/lockutils.py @@ -227,13 +227,15 @@ def lock(name, lock_file_prefix=None, external=False, lock_path=None): int_lock = internal_lock(name) with int_lock: LOG.debug('Acquired semaphore "%(lock)s"', {'lock': name}) - if external and not CONF.disable_process_locking: - ext_lock = external_lock(name, lock_file_prefix, lock_path) - with ext_lock: - yield ext_lock - else: - yield int_lock - LOG.debug('Releasing semaphore "%(lock)s"', {'lock': name}) + try: + if external and not CONF.disable_process_locking: + ext_lock = external_lock(name, lock_file_prefix, lock_path) + with ext_lock: + yield ext_lock + else: + yield int_lock + finally: + LOG.debug('Releasing semaphore "%(lock)s"', {'lock': name}) def synchronized(name, lock_file_prefix=None, external=False, lock_path=None):