diff --git a/src/libcamera/thread.cpp b/src/libcamera/thread.cpp
index 029a0e8fddd5..18ebd16a7e2f 100644
--- a/src/libcamera/thread.cpp
+++ b/src/libcamera/thread.cpp
@@ -439,11 +439,11 @@ void Thread::dispatchMessages()
 		Object *receiver = msg->receiver_;
 		ASSERT(data_ == receiver->thread()->data_);
 
+		receiver->pendingMessages_--;
+
 		locker.unlock();
 		receiver->message(msg.get());
 		locker.lock();
-
-		receiver->pendingMessages_--;
 	}
 }
 
