@@ -411,13 +411,20 @@ LogLevel ConvertAnalyticsLogLevelToFirebaseLogLevel(
411411 }
412412}
413413
414- // C-style callback that will be passed to the Google Analytics C API.
415- static void GoogleAnalyticsWraperLogCallback (GoogleAnalytics_LogLevel log_level,
416- const char * message) {
417- if (g_log_callback) {
414+
415+ extern " C" void GoogleAnalyticsWrapperLogCallback (
416+ GoogleAnalytics_LogLevel log_level, const char * message) {
417+ LogCallback callback_to_call;
418+
419+ {
420+ std::lock_guard<std::mutex> lock (g_log_callback_mutex);
421+ callback_to_call = g_log_callback;
422+ }
423+
424+ if (callback_to_call) {
418425 LogLevel firebase_log_level =
419426 ConvertAnalyticsLogLevelToFirebaseLogLevel (log_level);
420- g_log_callback (firebase_log_level, message);
427+ callback_to_call (firebase_log_level, message);
421428 }
422429}
423430
@@ -426,8 +433,10 @@ static void GoogleAnalyticsWraperLogCallback(GoogleAnalytics_LogLevel log_level,
426433void SetLogCallback (const LogCallback& callback) {
427434 FIREBASE_ASSERT_RETURN_VOID (internal::IsInitialized ());
428435 // The C API does not support user data, so we must use a global variable.
429- std::lock_guard<std::mutex> lock (g_log_callback_mutex);
430- g_log_callback = callback;
436+ {
437+ std::lock_guard<std::mutex> lock (g_log_callback_mutex);
438+ g_log_callback = callback;
439+ }
431440 GoogleAnalytics_SetLogCallback (GoogleAnalyticsWraperLogCallback);
432441}
433442
0 commit comments