osmith has uploaded this change for review. ( https://gerrit.osmocom.org/c/libosmocore/+/35146?usp=email )
Change subject: logging_gsmtap: Temporarily disable logging when sending the logs ......................................................................
logging_gsmtap: Temporarily disable logging when sending the logs
This avoids an infinite recursion when sending a gsmtap log message causes a log message. Temporarily set target->loglevel higher than LOGL_FATAL, which effectively disables logging for that target. Other targets like stderr will still log this message so there is still an indication that something went wrong.
Change-Id: I19203cadbad6019a3834793b8ac816d903fe088e Related: OS#6213 (cherry picked from commit f2629675aac5f95ae3c01f86f5bb3f342a1c1f9b) --- M src/core/logging_gsmtap.c 1 file changed, 23 insertions(+), 0 deletions(-)
git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/46/35146/1
diff --git a/src/core/logging_gsmtap.c b/src/core/logging_gsmtap.c index dfd059b..7775c27 100644 --- a/src/core/logging_gsmtap.c +++ b/src/core/logging_gsmtap.c @@ -65,6 +65,7 @@ struct timeval tv; int rc; const char *file_basename; + unsigned int _level;
/* get timestamp ASAP */ osmo_gettimeofday(&tv, NULL); @@ -114,7 +115,11 @@ } msgb_put(msg, rc);
+ /* Ensure that any error occurring when sending the log message doesn't cause infinite recursion */ + _level = target->loglevel; + target->loglevel = UINT8_MAX; rc = gsmtap_sendmsg(target->tgt_gsmtap.gsmtap_inst, msg); + target->loglevel = _level; if (rc) msgb_free(msg); }