diff --git a/src/common/GmshMessage.cpp b/src/common/GmshMessage.cpp
index 5bdc1a0e7d42a20d5619de7a9d35394cd520931a..896e1298a4924067649b925df5fb2d55d788143a 100644
--- a/src/common/GmshMessage.cpp
+++ b/src/common/GmshMessage.cpp
@@ -485,14 +485,16 @@ void Msg::Error(const char *fmt, ...)
   {
     _errorCount++;
     _atLeastOneErrorInRun = 1;
+  }
+  char str[5000];
+  va_list args;
+  va_start(args, fmt);
+  vsnprintf(str, sizeof(str), fmt, args);
+  va_end(args);
+  int l = strlen(str); if(str[l - 1] == '\n') str[l - 1] = '\0';
 
-    char str[5000];
-    va_list args;
-    va_start(args, fmt);
-    vsnprintf(str, sizeof(str), fmt, args);
-    va_end(args);
-    int l = strlen(str); if(str[l - 1] == '\n') str[l - 1] = '\0';
-
+#pragma omp critical(MsgError)
+  {
     if(_firstError.empty()) _firstError = str;
     _lastError = str;
 
@@ -522,19 +524,19 @@ void Msg::Error(const char *fmt, ...)
         fflush(stderr);
       }
     }
+  }
 
-    if(CTX::instance()->abortOnError == 2) {
-  #if defined(HAVE_FLTK)
-      if(FlGui::available()) return; // don't throw if GUI is running
-  #endif
-      throw _lastError;
-    }
-    else if(CTX::instance()->abortOnError == 3) {
-      throw _lastError;
-    }
-    else if(CTX::instance()->abortOnError == 4) {
-      Exit(1);
-    }
+  if(CTX::instance()->abortOnError == 2) {
+#if defined(HAVE_FLTK)
+    if(FlGui::available()) return; // don't throw if GUI is running
+#endif
+    throw _lastError;
+  }
+  else if(CTX::instance()->abortOnError == 3) {
+    throw _lastError;
+  }
+  else if(CTX::instance()->abortOnError == 4) {
+    Exit(1);
   }
 }