pespin has submitted this change. ( 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(-) Approvals: jolly: Looks good to me, but someone else must approve Jenkins Builder: Verified laforge: Looks good to me, approved 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: merged Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Change-Id: I0098629b335b3aa174b49fd79c33d22b04bc4785 Gerrit-Change-Number: 41986 Gerrit-PatchSet: 2 Gerrit-Owner: pespin <pespin@sysmocom.de> Gerrit-Reviewer: Jenkins Builder Gerrit-Reviewer: daniel <dwillmann@sysmocom.de> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> Gerrit-Reviewer: jolly <andreas@eversberg.eu> Gerrit-Reviewer: laforge <laforge@osmocom.org> Gerrit-Reviewer: osmith <osmith@sysmocom.de> Gerrit-Reviewer: pespin <pespin@sysmocom.de>