@@ -374,18 +374,18 @@ void memfault_log_save(eMemfaultPlatformLogLevel level, const char *fmt, ...) {
374374 va_end (args );
375375}
376376
377- static void prv_log_save (eMemfaultPlatformLogLevel level ,
378- const void * log , size_t log_len ,
379- eMemfaultLogRecordType log_type ) {
380-
377+ static void prv_log_save (eMemfaultPlatformLogLevel level , const void * log , size_t log_len ,
378+ eMemfaultLogRecordType log_type , bool should_lock ) {
381379 if (!prv_should_log (level )) {
382380 return ;
383381 }
384382
385383 bool log_written = false;
386384 const size_t truncated_log_len = MEMFAULT_MIN (log_len , MEMFAULT_LOG_MAX_LINE_SAVE_LEN );
387385 const size_t bytes_needed = sizeof (sMfltRamLogEntry ) + truncated_log_len ;
388- memfault_lock ();
386+ if (should_lock ) {
387+ memfault_lock ();
388+ }
389389 {
390390 sMfltCircularBuffer * circ_bufp = & s_memfault_ram_logger .circ_buffer ;
391391 const bool space_free = prv_try_free_space (circ_bufp , (int )bytes_needed );
@@ -399,7 +399,9 @@ static void prv_log_save(eMemfaultPlatformLogLevel level,
399399 log_written = true;
400400 }
401401 }
402- memfault_unlock ();
402+ if (should_lock ) {
403+ memfault_unlock ();
404+ }
403405
404406 if (log_written ) {
405407 memfault_log_handle_saved_callback ();
@@ -426,15 +428,20 @@ void memfault_compact_log_save(eMemfaultPlatformLogLevel level, uint32_t log_id,
426428 }
427429
428430 const size_t bytes_written = memfault_cbor_encoder_deinit (& encoder );
429- prv_log_save (level , log_buf , bytes_written , kMemfaultLogRecordType_Compact );
431+ prv_log_save (level , log_buf , bytes_written , kMemfaultLogRecordType_Compact , true );
430432}
431433
432434#endif /* MEMFAULT_COMPACT_LOG_ENABLE */
433435
434436
435437void memfault_log_save_preformatted (eMemfaultPlatformLogLevel level ,
436438 const char * log , size_t log_len ) {
437- prv_log_save (level , log , log_len , kMemfaultLogRecordType_Preformatted );
439+ prv_log_save (level , log , log_len , kMemfaultLogRecordType_Preformatted , true);
440+ }
441+
442+ void memfault_log_save_preformatted_nolock (eMemfaultPlatformLogLevel level , const char * log ,
443+ size_t log_len ) {
444+ prv_log_save (level , log , log_len , kMemfaultLogRecordType_Preformatted , false);
438445}
439446
440447bool memfault_log_boot (void * storage_buffer , size_t buffer_len ) {
0 commit comments