<p>neels <strong>submitted</strong> this change.</p><p><a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24298">View Change</a></p><div style="white-space:pre-wrap">Approvals:
  Jenkins Builder: Verified
  fixeria: Looks good to me, approved

</div><pre style="font-family: monospace,monospace; white-space: pre-wrap;">log: show src file,line of lchan_set_last_error<br><br>Change lchan_set_last_error() to macro so that the error log reflects<br>where the error was encountered.<br><br>Change-Id: I571fdf2d418c52d120215cf19e57a3c96d67af07<br>---<br>M include/osmocom/bsc/lchan_fsm.h<br>M src/osmo-bsc/lchan_fsm.c<br>M src/osmo-bsc/lchan_rtp_fsm.c<br>3 files changed, 12 insertions(+), 24 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/bsc/lchan_fsm.h b/include/osmocom/bsc/lchan_fsm.h</span><br><span>index ded7f54..2d5307a 100644</span><br><span>--- a/include/osmocom/bsc/lchan_fsm.h</span><br><span>+++ b/include/osmocom/bsc/lchan_fsm.h</span><br><span>@@ -12,6 +12,13 @@</span><br><span>            LOGP(DRSL, level, "%s (not initialized) " fmt, gsm_lchan_name(lchan), ## args); \</span><br><span>  } while(0)</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#define LCHAN_SET_LAST_ERROR(LCHAN, fmt, args...) do { \</span><br><span style="color: hsl(120, 100%, 40%);">+              if ((LCHAN)->last_error) \</span><br><span style="color: hsl(120, 100%, 40%);">+                 talloc_free((LCHAN)->last_error); \</span><br><span style="color: hsl(120, 100%, 40%);">+                (LCHAN)->last_error = talloc_asprintf((LCHAN)->ts->trx, fmt, ##args); \</span><br><span style="color: hsl(120, 100%, 40%);">+              LOG_LCHAN(LCHAN, LOGL_ERROR, "%s\n", (LCHAN)->last_error); \</span><br><span style="color: hsl(120, 100%, 40%);">+     } while(0)</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span> enum lchan_fsm_state {</span><br><span>       LCHAN_ST_UNUSED,</span><br><span>     LCHAN_ST_CBCH, /*< Blocked by CBCH channel combination, not usable as SDCCH. */</span><br><span>@@ -74,6 +81,4 @@</span><br><span> </span><br><span> void lchan_forget_conn(struct gsm_lchan *lchan);</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void lchan_set_last_error(struct gsm_lchan *lchan, const char *fmt, ...);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> void lchan_fsm_skip_error(struct gsm_lchan *lchan);</span><br><span>diff --git a/src/osmo-bsc/lchan_fsm.c b/src/osmo-bsc/lchan_fsm.c</span><br><span>index 4eb95ff..94f7821 100644</span><br><span>--- a/src/osmo-bsc/lchan_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_fsm.c</span><br><span>@@ -66,25 +66,6 @@</span><br><span>         }</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-void lchan_set_last_error(struct gsm_lchan *lchan, const char *fmt, ...)</span><br><span style="color: hsl(0, 100%, 40%);">-{</span><br><span style="color: hsl(0, 100%, 40%);">-     va_list ap;</span><br><span style="color: hsl(0, 100%, 40%);">-     /* This dance allows using an existing error reason in above fmt */</span><br><span style="color: hsl(0, 100%, 40%);">-     char *last_error_was = lchan->last_error;</span><br><span style="color: hsl(0, 100%, 40%);">-    lchan->last_error = NULL;</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-    if (fmt) {</span><br><span style="color: hsl(0, 100%, 40%);">-              va_start(ap, fmt);</span><br><span style="color: hsl(0, 100%, 40%);">-              lchan->last_error = talloc_vasprintf(lchan->ts->trx, fmt, ap);</span><br><span style="color: hsl(0, 100%, 40%);">-         va_end(ap);</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-             LOG_LCHAN(lchan, LOGL_ERROR, "%s\n", lchan->last_error);</span><br><span style="color: hsl(0, 100%, 40%);">-   }</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span style="color: hsl(0, 100%, 40%);">-       if (last_error_was)</span><br><span style="color: hsl(0, 100%, 40%);">-             talloc_free(last_error_was);</span><br><span style="color: hsl(0, 100%, 40%);">-}</span><br><span style="color: hsl(0, 100%, 40%);">-</span><br><span> /* The idea here is that we must not require to change any lchan state in order to deny a request. */</span><br><span> #define lchan_on_activation_failure(lchan, for_conn, activ_for) \</span><br><span>  _lchan_on_activation_failure(lchan, for_conn, activ_for, \</span><br><span>@@ -240,7 +221,7 @@</span><br><span>             const uint32_t state_chg = STATE_CHG; \</span><br><span>              LOG_LCHAN(_lchan, LOGL_DEBUG, "Handling failure, will then transition to state %s\n", \</span><br><span>                      osmo_fsm_state_name(fsm, state_chg)); \</span><br><span style="color: hsl(0, 100%, 40%);">-               lchan_set_last_error(_lchan, "lchan %s in state %s: " fmt, \</span><br><span style="color: hsl(120, 100%, 40%);">+                LCHAN_SET_LAST_ERROR(_lchan, "lchan %s in state %s: " fmt, \</span><br><span>                                    _lchan->activate.concluded ? "failure" : "allocation failed", \</span><br><span>                               osmo_fsm_state_name(fsm, state_was), ## args); \</span><br><span>                lchan_on_activation_failure(_lchan, _lchan->activate.info.activ_for, _lchan->conn); \</span><br><span>@@ -547,7 +528,9 @@</span><br><span>            OSMO_ASSERT(info);</span><br><span>           OSMO_ASSERT(!lchan->conn);</span><br><span>                OSMO_ASSERT(!lchan->mgw_endpoint_ci_bts);</span><br><span style="color: hsl(0, 100%, 40%);">-            lchan_set_last_error(lchan, NULL);</span><br><span style="color: hsl(120, 100%, 40%);">+            if (lchan->last_error)</span><br><span style="color: hsl(120, 100%, 40%);">+                     talloc_free(lchan->last_error);</span><br><span style="color: hsl(120, 100%, 40%);">+            lchan->last_error = NULL;</span><br><span>                 lchan->release.requested = false;</span><br><span> </span><br><span>             lchan->activate.info = *info;</span><br><span>diff --git a/src/osmo-bsc/lchan_rtp_fsm.c b/src/osmo-bsc/lchan_rtp_fsm.c</span><br><span>index cd195d0..8991acc 100644</span><br><span>--- a/src/osmo-bsc/lchan_rtp_fsm.c</span><br><span>+++ b/src/osmo-bsc/lchan_rtp_fsm.c</span><br><span>@@ -63,7 +63,7 @@</span><br><span> #define lchan_rtp_fail(fmt, args...) do { \</span><br><span>             struct gsm_lchan *_lchan = fi->priv; \</span><br><span>            uint32_t state_was = fi->state; \</span><br><span style="color: hsl(0, 100%, 40%);">-            lchan_set_last_error(_lchan, "lchan-rtp failure in state %s: " fmt, \</span><br><span style="color: hsl(120, 100%, 40%);">+               LCHAN_SET_LAST_ERROR(_lchan, "lchan-rtp failure in state %s: " fmt, \</span><br><span>                                   osmo_fsm_state_name(fi->fsm, state_was), ## args); \</span><br><span>                 osmo_fsm_inst_dispatch(_lchan->fi, LCHAN_EV_RTP_ERROR, 0); \</span><br><span>      } while(0)</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/c/osmo-bsc/+/24298">change 24298</a>. To unsubscribe, or for help writing mail filters, visit <a href="https://gerrit.osmocom.org/settings">settings</a>.</p><div itemscope itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" itemtype="http://schema.org/ViewAction"><link itemprop="url" href="https://gerrit.osmocom.org/c/osmo-bsc/+/24298"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: osmo-bsc </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: I571fdf2d418c52d120215cf19e57a3c96d67af07 </div>
<div style="display:none"> Gerrit-Change-Number: 24298 </div>
<div style="display:none"> Gerrit-PatchSet: 2 </div>
<div style="display:none"> Gerrit-Owner: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: Jenkins Builder </div>
<div style="display:none"> Gerrit-Reviewer: fixeria <vyanitskiy@sysmocom.de> </div>
<div style="display:none"> Gerrit-Reviewer: neels <nhofmeyr@sysmocom.de> </div>
<div style="display:none"> Gerrit-CC: pespin <pespin@sysmocom.de> </div>
<div style="display:none"> Gerrit-MessageType: merged </div>