SF patch 552161 - Py_AddPendingCall doesn't unlock on fail (Daniel
Dunbar)

Can't test this, but looks correct to me.
diff --git a/Python/ceval.c b/Python/ceval.c
index ab6d88b..50c832a 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -379,8 +379,10 @@
 	busy = 1;
 	i = pendinglast;
 	j = (i + 1) % NPENDINGCALLS;
-	if (j == pendingfirst)
+	if (j == pendingfirst) {
+		busy = 0;
 		return -1; /* Queue full */
+	}
 	pendingcalls[i].func = func;
 	pendingcalls[i].arg = arg;
 	pendinglast = j;