diff --git a/main/cdr.c b/main/cdr.c
index 44cf1c3d220eb455f0960e1235fee9a52df304d7..416895de550b5b3db2e90fb397969b2d8d47e0b5 100644
--- a/main/cdr.c
+++ b/main/cdr.c
@@ -1424,11 +1424,13 @@ void ast_cdr_detach(struct ast_cdr *cdr)
 	newtail->cdr = cdr;
 	batch->tail = newtail;
 	curr = batch->size++;
-	ast_mutex_unlock(&cdr_batch_lock);
 
 	/* if we have enough stuff to post, then do it */
-	if (curr >= (batchsize - 1))
+	if (curr >= (batchsize - 1)) {
 		submit_unscheduled_batch();
+	}
+
+	ast_mutex_unlock(&cdr_batch_lock);
 }
 
 static void *do_cdr(void *data)