diff --git a/go/vt/vttablet/tabletserver/messager/message_manager.go b/go/vt/vttablet/tabletserver/messager/message_manager.go
index <HASH>..<HASH> 100644
--- a/go/vt/vttablet/tabletserver/messager/message_manager.go
+++ b/go/vt/vttablet/tabletserver/messager/message_manager.go
@@ -459,7 +459,7 @@ func (mm *messageManager) Add(mr *MessageRow) bool {
 	// If cache is empty, we have to broadcast that we're not empty
 	// any more.
 	if mm.cache.IsEmpty() {
-		mm.cond.Broadcast()
+		defer mm.cond.Broadcast()
 	}
 	if !mm.cache.Add(mr) {
 		// Cache is full. Enter "messagesPending" mode.
messager: defer Broadcast when leaving empty state

since this is currently called before actually adding the message to the cache, it introduces a race condition where the woken up goroutines might still see an empty cache before the add completes. It seems unlikely that this would happen in practice, since both Add and IsEmpty acquire the cache mutex, but shouldn't cause any problems either