pespin has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/libosmocore/+/41986?usp=email )


Change subject: logging: Also Avoid infinite loop/deadlock in log_check_level()
......................................................................

logging: Also Avoid infinite loop/deadlock in log_check_level()

A LOG() macro being called inside an already-logging path will first
call log_check_level() before calling osmo_vlogp(). Since calling
happens with the mutex hold, it has been seen to deadlock in eg.
osmo-hnbgw.

Change-Id: I0098629b335b3aa174b49fd79c33d22b04bc4785
---
M src/core/logging.c
1 file changed, 9 insertions(+), 1 deletion(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/86/41986/1

diff --git a/src/core/logging.c b/src/core/logging.c
index 60634af..db5433e 100644
--- a/src/core/logging.c
+++ b/src/core/logging.c
@@ -753,7 +753,8 @@
        if (OSMO_UNLIKELY(log_thread_state.logging_active)) {
                /* Avoid re-entrant logging: If logging to log target generates
                 * extra logging (eg. an error log line due to some wqueue 
being full),
-                * we may end up in an infinite loop. */
+                * we may end up in an infinite loop, or deadlock trying to 
re-acquire
+                * this same lock. */
                return;
        }
        log_thread_state.logging_active = true;
@@ -1397,6 +1398,13 @@

        /* TODO: The following could/should be cached (update on config) */

+       if (OSMO_UNLIKELY(log_thread_state.logging_active)) {
+               /* Avoid re-entrant logging: If logging to log target generates
+                * extra logging (eg. an error log line due to some wqueue 
being full),
+                * we may end up in an infinite loop, or deadlock trying to 
re-acquire
+                * this same lock. */
+               return 0;
+       }
        log_tgt_mutex_lock();

        llist_for_each_entry(tar, &osmo_log_target_list, entry) {

--
To view, visit https://gerrit.osmocom.org/c/libosmocore/+/41986?usp=email
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings?usp=email

Gerrit-MessageType: newchange
Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I0098629b335b3aa174b49fd79c33d22b04bc4785
Gerrit-Change-Number: 41986
Gerrit-PatchSet: 1
Gerrit-Owner: pespin <[email protected]>

Reply via email to