--- pbzip2.cpp	2011-07-16 09:52:35.000000000 -0700
+++ pbzip2-fixed.cpp	2011-10-17 10:23:02.626471000 -0700
@@ -340,7 +340,6 @@
 inline int syncGetTerminateFlag();
 inline void syncSetTerminateFlag(int newValue);
 inline void syncSetFinishedFlag(int newValue);
-inline void setLastGoodBlock(int newValue);
 inline void syncSetLastGoodBlock(int newValue);
 inline int syncGetLastGoodBlock();
 void cleanupUnfinishedWork();
@@ -668,17 +667,24 @@
 	{
 		// wake up terminator thread
 		pthread_cond_signal(&TerminateCond);
+		safe_mutex_unlock(&TerminateFlagMutex);
 
 		// wake up all other possibly blocked on cond threads
+		safe_mutex_lock(OutMutex);
 		pthread_cond_broadcast(notTooMuchNumBuffered);
+		safe_mutex_unlock(OutMutex);
 		if (FifoQueue != NULL)
 		{
+			safe_mutex_lock(FifoQueue->mut);
 			pthread_cond_broadcast(FifoQueue->notFull);
 			pthread_cond_broadcast(FifoQueue->notEmpty);
+			safe_mutex_unlock(FifoQueue->mut);
 		}
 	}
-
-	safe_mutex_unlock(&TerminateFlagMutex);
+	else
+	{
+		safe_mutex_unlock(&TerminateFlagMutex);
+	}
 }
 
 /*
@@ -697,11 +703,12 @@
 	safe_mutex_unlock(&TerminateFlagMutex);
 }
 
-inline void setLastGoodBlock(int newValue)
+inline void syncSetLastGoodBlock(int newValue)
 {
+	safe_mutex_lock(OutMutex);
 	#ifdef PBZIP_DEBUG
 	unsigned long long thid = (unsigned long long) pthread_self();
-	fprintf(stderr, "(%"PRIu64") setLastGoodBlock: %d -> %d\n", thid, LastGoodBlock, newValue );
+	fprintf(stderr, "(%"PRIu64") syncSetLastGoodBlock: %d -> %d\n", thid, LastGoodBlock, newValue );
 	#endif
 
 	if ( (LastGoodBlock == -1) || (newValue < LastGoodBlock) )
@@ -713,19 +720,20 @@
 
 		// wake up all other possibly blocked on cond threads
 		pthread_cond_broadcast(notTooMuchNumBuffered);
+		safe_mutex_unlock(OutMutex);
+
 		if (FifoQueue != NULL)
 		{
+			safe_mutex_lock(FifoQueue->mut);
 			pthread_cond_broadcast(FifoQueue->notFull);
 			pthread_cond_broadcast(FifoQueue->notEmpty);
+			safe_mutex_unlock(FifoQueue->mut);
 		}
 	}
-}
-
-inline void syncSetLastGoodBlock(int newValue)
-{
-	safe_mutex_lock(OutMutex);
-	setLastGoodBlock(newValue);
-	safe_mutex_unlock(OutMutex);
+	else
+	{
+		safe_mutex_unlock(OutMutex);
+	}
 }
 
 inline int syncGetLastGoodBlock()
@@ -1299,7 +1307,9 @@
 
 		if (producerDecompressCheckInterrupt(hInfile, fileData, NumBlocks) != 0)
 		{
+			safe_mutex_lock(fifo->mut);
 			safe_cond_broadcast(fifo->notEmpty); // just in case
+			safe_mutex_unlock(fifo->mut);
 			syncSetProducerDone(1);
 			return 0;
 		}
@@ -1368,7 +1378,9 @@
 	}
 
 	syncSetProducerDone(1);
+	safe_mutex_lock(fifo->mut);
 	safe_cond_broadcast(fifo->notEmpty); // just in case
+	safe_mutex_unlock(fifo->mut);
 
 	#ifdef PBZIP_DEBUG
 		fprintf(stderr, "producer:  Done - exiting. Last Block: %d\n", NumBlocks);
@@ -1918,10 +1930,14 @@
 	// wake up all other possibly blocked on cond threads
 	if (FifoQueue != NULL)
 	{
+		safe_mutex_lock(FifoQueue->mut);
 		safe_cond_broadcast(FifoQueue->notEmpty); // important
 		safe_cond_broadcast(FifoQueue->notFull); // not really needed
+		safe_mutex_unlock(FifoQueue->mut);
 	}
+	safe_mutex_lock(OutMutex);
 	safe_cond_broadcast(notTooMuchNumBuffered); // not really needed
+	safe_mutex_unlock(OutMutex);
 
 	if (QuietMode != 1)
 	{
@@ -2559,7 +2575,9 @@
 	close(hInfile);
 
 	syncSetProducerDone(1);
+	safe_mutex_lock(fifo->mut);
 	safe_cond_broadcast(fifo->notEmpty); // just in case
+	safe_mutex_unlock(fifo->mut);
 
 	#ifdef PBZIP_DEBUG
 		fprintf(stderr, "producer:  Done - exiting. Num Blocks: %d\n", NumBlocks);
