diff --git a/src/conversationmodel.cpp b/src/conversationmodel.cpp
index aa2f7ebfba335b950dfc4050004f52e416b485b2..61093d44054bfc6271c804e919c1fe3078c514ee 100644
--- a/src/conversationmodel.cpp
+++ b/src/conversationmodel.cpp
@@ -3181,16 +3181,18 @@ ConversationModelPimpl::addOrUpdateCallMessage(const QString& callId,
     auto msgId = storage::addOrUpdateMessage(db, conv_it->uid, msg, callId);
     // now set the formatted call message string in memory only
     msg.body = storage::getCallInteractionString(uriString, duration);
-    auto interactionIt = conv_it->interactions->find(msgId);
-    auto newInteraction = interactionIt == conv_it->interactions->end();
-    if (newInteraction) {
-        conv_it->lastMessageUid = msgId;
-        std::lock_guard<std::mutex> lk(interactionsLocks[conv_it->uid]);
-        conv_it->interactions->emplace(msgId, msg);
-    } else {
+    bool newInteraction = false;
+    {
         std::lock_guard<std::mutex> lk(interactionsLocks[conv_it->uid]);
-        interactionIt->second = msg;
-        conv_it->interactions->emitDataChanged(interactionIt);
+        auto interactionIt = conv_it->interactions->find(msgId);
+        newInteraction = interactionIt == conv_it->interactions->end();
+        if (newInteraction) {
+            conv_it->lastMessageUid = msgId;
+            conv_it->interactions->emplace(msgId, msg);
+        } else {
+            interactionIt->second = msg;
+            conv_it->interactions->emitDataChanged(interactionIt);
+        }
     }
 
     if (newInteraction)