Index: C:/Working/vendor/derby/dist/java/engine/org/apache/derby/impl/services/locks/LockSet.java
===================================================================
--- C:/Working/vendor/derby/dist/java/engine/org/apache/derby/impl/services/locks/LockSet.java	(revision 9348)
+++ C:/Working/vendor/derby/dist/java/engine/org/apache/derby/impl/services/locks/LockSet.java	(revision 12008)
@@ -272,13 +272,18 @@
         long startWaitTime = 0;
 
 forever:	for (;;) {
-
-                byte wakeupReason = waitingLock.waitForGrant(actualTimeout);
-                
+                byte wakeupReason = 0;
                 ActiveLock nextWaitingLock = null;
                 Object[] deadlockData = null;
 
                 try {
+                    try {
+                        wakeupReason = waitingLock.waitForGrant(actualTimeout);
+                    } catch(StandardException e) {
+                        nextWaitingLock = control.getNextWaiter(waitingLock, true, this);
+                        throw e;
+                    }
+
                     boolean willQuitWait;
                     Enumeration timeoutLockTable = null;
                     long currentTime = 0;
Index: C:/Working/vendor/derby/dist/java/engine/org/apache/derby/impl/services/locks/ConcurrentLockSet.java
===================================================================
--- C:/Working/vendor/derby/dist/java/engine/org/apache/derby/impl/services/locks/ConcurrentLockSet.java	(revision 9348)
+++ C:/Working/vendor/derby/dist/java/engine/org/apache/derby/impl/services/locks/ConcurrentLockSet.java	(revision 12008)
@@ -459,13 +459,18 @@
         long startWaitTime = 0;
 
 forever:	for (;;) {
-
-                byte wakeupReason = waitingLock.waitForGrant(actualTimeout);
-                
+                byte wakeupReason = 0;
                 ActiveLock nextWaitingLock = null;
                 Object[] deadlockData = null;
 
                 try {
+                    try {
+                        wakeupReason = waitingLock.waitForGrant(actualTimeout);
+                    } catch(StandardException e) {
+                        nextWaitingLock = control.getNextWaiter(waitingLock, true, this);
+                        throw e;
+                    }
+
                     boolean willQuitWait;
                     Enumeration timeoutLockTable = null;
                     long currentTime = 0;
