From a4f3dacd263b2dce6a94677661f9ac692e0cd719 Mon Sep 17 00:00:00 2001 From: Kelven Yang Date: Tue, 17 Aug 2010 17:39:05 -0700 Subject: [PATCH] Use a dedicated account object for locking test, so that when we run into SQL exception, we won't accidently release a lock that we haven't actually acquired. This will cause NPE exception in Merovingian.java --- server/src/com/cloud/network/NetworkManagerImpl.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/server/src/com/cloud/network/NetworkManagerImpl.java b/server/src/com/cloud/network/NetworkManagerImpl.java index ab0a44160d7..31236697bfc 100755 --- a/server/src/com/cloud/network/NetworkManagerImpl.java +++ b/server/src/com/cloud/network/NetworkManagerImpl.java @@ -221,6 +221,9 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager final long accountId = account.getId(); + // use a dedicated account object for locking test, so that when we get SQL exception + // we won't be misled to release an actually un-owned lock + AccountVO lockedAccount = null; Transaction txn = Transaction.currentTxn(); try { final EventVO event = new EventVO(); @@ -230,8 +233,8 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager txn.start(); - account = _accountDao.acquire(accountId); - if (account == null) { + lockedAccount = _accountDao.acquire(accountId); + if (lockedAccount == null) { s_logger.warn("Unable to lock account " + accountId); return null; } @@ -339,7 +342,7 @@ public class NetworkManagerImpl implements NetworkManager, VirtualMachineManager txn.commit(); return null; } finally { - if (account != null) { + if (lockedAccount != null) { if(s_logger.isDebugEnabled()) s_logger.debug("Releasing lock account " + accountId);