diff --git a/channels/chan_h323.c b/channels/chan_h323.c
index f167c0781106c0becb7739e762869560b6e34255..38fb22c402d4482d2e7a1d7cd7a8d081acfcad5d 100644
--- a/channels/chan_h323.c
+++ b/channels/chan_h323.c
@@ -2433,34 +2433,36 @@ static void *do_monitor(void *data)
 			h323_do_reload();
 		}
 		/* Check for interfaces needing to be killed */
-		ast_mutex_lock(&iflock);
+		if (!ast_mutex_trylock(&iflock)) {
 #if 1
-		do {
-			for (oh323 = iflist; oh323; oh323 = oh323->next) {
+			do {
+				for (oh323 = iflist; oh323; oh323 = oh323->next) {
+					if (!ast_mutex_trylock(&oh323->lock)) {
+						if (oh323->needdestroy) {
+							__oh323_destroy(oh323);
+							break;
+						}
+						ast_mutex_unlock(&oh323->lock);
+					}
+				}
+			} while (/*oh323*/ 0);
+#else
+restartsearch:
+			oh323 = iflist;
+			while(oh323) {
 				if (!ast_mutex_trylock(&oh323->lock)) {
 					if (oh323->needdestroy) {
 						__oh323_destroy(oh323);
-						break;
+						goto restartsearch;
 					}
 					ast_mutex_unlock(&oh323->lock);
+					oh323 = oh323->next;
 				}
 			}
-		} while (/*oh323*/ 0);
-#else
-restartsearch:
-		oh323 = iflist;
-		while(oh323) {
-			if (!ast_mutex_trylock(&oh323->lock)) {
-				if (oh323->needdestroy) {
-					__oh323_destroy(oh323);
-					goto restartsearch;
-				}
-				ast_mutex_unlock(&oh323->lock);
-				oh323 = oh323->next;
-			}
-		}
 #endif
-		ast_mutex_unlock(&iflock);
+			ast_mutex_unlock(&iflock);
+		} else
+			oh323 = (struct oh323_pvt *)1;	/* Force fast loop */
 		pthread_testcancel();
 		/* Wait for sched or io */
 		res = ast_sched_wait(sched);