<p>Harald Welte has uploaded this change for <strong>review</strong>.</p><p><a href="https://gerrit.osmocom.org/13338">View Change</a></p><pre style="font-family: monospace,monospace; white-space: pre-wrap;">make use of OTC_GLOBAL when allocating library-internal contexts<br><br>As libosmcore is now managing the global talloc contexts, there's<br>no point in having APIs where the user tells the library about<br>which talloc contexts to use for a given sub-system.<br><br>Change-Id: I48f475efd3ee0d5120b8fc30861e852d1a6920b1<br>---<br>M include/osmocom/core/signal.h<br>M src/counter.c<br>M src/ctrl/control_vty.c<br>M src/gb/gprs_bssgp.c<br>M src/gsm/lapd_core.c<br>M src/logging.c<br>M src/signal.c<br>M src/stats.c<br>M src/vty/telnet_interface.c<br>M tests/ctrl/ctrl_test.c<br>10 files changed, 36 insertions(+), 22 deletions(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;">git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/38/13338/1</pre><pre style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git a/include/osmocom/core/signal.h b/include/osmocom/core/signal.h</span><br><span>index 449b976..0f17843 100644</span><br><span>--- a/include/osmocom/core/signal.h</span><br><span>+++ b/include/osmocom/core/signal.h</span><br><span>@@ -1,6 +1,7 @@</span><br><span> #pragma once</span><br><span> </span><br><span> #include <stdint.h></span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/defs.h></span><br><span> </span><br><span> /*! \defgroup signal Intra-application signals</span><br><span>  *  @{</span><br><span>@@ -34,7 +35,8 @@</span><br><span> </span><br><span> </span><br><span> /* Management */</span><br><span style="color: hsl(0, 100%, 40%);">-void *osmo_signal_talloc_ctx_init(void *root_ctx);</span><br><span style="color: hsl(120, 100%, 40%);">+void *osmo_signal_talloc_ctx_init(void *root_ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+      OSMO_DEPRECATED("libosmocore internally allocates this context now.");</span><br><span> int osmo_signal_register_handler(unsigned int subsys, osmo_signal_cbfn *cbfn, void *data);</span><br><span> void osmo_signal_unregister_handler(unsigned int subsys, osmo_signal_cbfn *cbfn, void *data);</span><br><span> </span><br><span>diff --git a/src/counter.c b/src/counter.c</span><br><span>index 0fa3166..482dfc2 100644</span><br><span>--- a/src/counter.c</span><br><span>+++ b/src/counter.c</span><br><span>@@ -1,7 +1,7 @@</span><br><span> /*! \file counter.c</span><br><span>  * utility routines for keeping some statistics. */</span><br><span> /*</span><br><span style="color: hsl(0, 100%, 40%);">- * (C) 2009 by Harald Welte <laforge@gnumonks.org></span><br><span style="color: hsl(120, 100%, 40%);">+ * (C) 2009,2019 by Harald Welte <laforge@gnumonks.org></span><br><span>  *</span><br><span>  * All Rights Reserved</span><br><span>  *</span><br><span>@@ -39,8 +39,12 @@</span><br><span>  *  \returns Allocated counter on success; NULL on error */</span><br><span> struct osmo_counter *osmo_counter_alloc(const char *name)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-   struct osmo_counter *ctr = talloc_zero(tall_ctr_ctx, struct osmo_counter);</span><br><span style="color: hsl(120, 100%, 40%);">+    struct osmo_counter *ctr;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+ if (!tall_ctr_ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+            tall_ctr_ctx = talloc_named_const(OTC_GLOBAL, 0, "osmo_counter");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span style="color: hsl(120, 100%, 40%);">+ ctr = talloc_zero(tall_ctr_ctx, struct osmo_counter);</span><br><span>        if (!ctr)</span><br><span>            return NULL;</span><br><span> </span><br><span>diff --git a/src/ctrl/control_vty.c b/src/ctrl/control_vty.c</span><br><span>index ef98889..0dc8bfe 100644</span><br><span>--- a/src/ctrl/control_vty.c</span><br><span>+++ b/src/ctrl/control_vty.c</span><br><span>@@ -79,9 +79,14 @@</span><br><span>   return CMD_SUCCESS;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+/*! Initialize the VTY configuration for the CTRL interface.</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ctx UNUSED, only for legacy compatibility</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \returns 0 on success; negative on error */</span><br><span> int ctrl_vty_init(void *ctx)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-      ctrl_vty_ctx = ctx;</span><br><span style="color: hsl(120, 100%, 40%);">+   ctrl_vty_ctx = talloc_named_const(OTC_GLOBAL, 0, "ctrl-vty");</span><br><span style="color: hsl(120, 100%, 40%);">+       if (!ctrl_vty_ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+            return -1;</span><br><span>   install_element(CONFIG_NODE, &cfg_ctrl_cmd);</span><br><span>     install_node(&ctrl_node, config_write_ctrl);</span><br><span> </span><br><span>diff --git a/src/gb/gprs_bssgp.c b/src/gb/gprs_bssgp.c</span><br><span>index 4a4bab3..884914b 100644</span><br><span>--- a/src/gb/gprs_bssgp.c</span><br><span>+++ b/src/gb/gprs_bssgp.c</span><br><span>@@ -121,6 +121,9 @@</span><br><span> {</span><br><span>     struct bssgp_bvc_ctx *ctx;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+        if (!bssgp_tall_ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+          bssgp_tall_ctx = talloc_named_const(OTC_GLOBAL, 0, "bssgp");</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>     ctx = talloc_zero(bssgp_tall_ctx, struct bssgp_bvc_ctx);</span><br><span>     if (!ctx)</span><br><span>            return NULL;</span><br><span>diff --git a/src/gsm/lapd_core.c b/src/gsm/lapd_core.c</span><br><span>index a2ff230..afbb1e9 100644</span><br><span>--- a/src/gsm/lapd_core.c</span><br><span>+++ b/src/gsm/lapd_core.c</span><br><span>@@ -252,7 +252,7 @@</span><br><span>  dl->state = state;</span><br><span> }</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-static void *tall_lapd_ctx = NULL;</span><br><span style="color: hsl(120, 100%, 40%);">+static __thread void *tall_lapd_ctx;</span><br><span> </span><br><span> /* init datalink instance and allocate history */</span><br><span> void lapd_dl_init(struct lapd_datalink *dl, uint8_t k, uint8_t v_range,</span><br><span>@@ -299,7 +299,7 @@</span><br><span>     lapd_dl_newstate(dl, LAPD_STATE_IDLE);</span><br><span> </span><br><span>   if (!tall_lapd_ctx)</span><br><span style="color: hsl(0, 100%, 40%);">-             tall_lapd_ctx = talloc_named_const(NULL, 1, "lapd context");</span><br><span style="color: hsl(120, 100%, 40%);">+                tall_lapd_ctx = talloc_named_const(OTC_GLOBAL, 1, "lapd context");</span><br><span>         dl->tx_hist = talloc_zero_array(tall_lapd_ctx,</span><br><span>                                    struct lapd_history, dl->range_hist);</span><br><span> }</span><br><span>diff --git a/src/logging.c b/src/logging.c</span><br><span>index 09021e4..80a1852 100644</span><br><span>--- a/src/logging.c</span><br><span>+++ b/src/logging.c</span><br><span>@@ -954,7 +954,7 @@</span><br><span> </span><br><span> /*! Initialize the Osmocom logging core</span><br><span>  *  \param[in] inf Information regarding logging categories, could be NULL</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] ctx \ref talloc context for logging allocations</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ctx UNUSED, only for legacy API compatibility</span><br><span>  *  \returns 0 in case of success, negative in case of error</span><br><span>  *</span><br><span>  *  If inf is NULL then only library-internal categories are initialized.</span><br><span>@@ -963,7 +963,7 @@</span><br><span> {</span><br><span>  int i;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-      tall_log_ctx = talloc_named_const(ctx, 1, "logging");</span><br><span style="color: hsl(120, 100%, 40%);">+       tall_log_ctx = talloc_named_const(OTC_GLOBAL, 1, "logging");</span><br><span>       if (!tall_log_ctx)</span><br><span>           return -ENOMEM;</span><br><span> </span><br><span>diff --git a/src/signal.c b/src/signal.c</span><br><span>index 852749a..52fda3b 100644</span><br><span>--- a/src/signal.c</span><br><span>+++ b/src/signal.c</span><br><span>@@ -46,13 +46,8 @@</span><br><span>        void *data;</span><br><span> };</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-/*! Initialize a signal_handler talloc context for \ref osmo_signal_register_handler.</span><br><span style="color: hsl(0, 100%, 40%);">- * Create a talloc context called "osmo_signal".</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] root_ctx talloc context used as parent for the new "osmo_signal" ctx.</span><br><span style="color: hsl(0, 100%, 40%);">- *  \returns the new osmo_signal talloc context, e.g. for reporting</span><br><span style="color: hsl(0, 100%, 40%);">- */</span><br><span style="color: hsl(120, 100%, 40%);">+/* DEPRECATED: Never really worked and we now have OTC_GLOBAL */</span><br><span> void *osmo_signal_talloc_ctx_init(void *root_ctx) {</span><br><span style="color: hsl(0, 100%, 40%);">-       tall_sigh_ctx = talloc_named_const(root_ctx, 0, "osmo_signal");</span><br><span>    return tall_sigh_ctx;</span><br><span> }</span><br><span> </span><br><span>@@ -67,6 +62,11 @@</span><br><span> {</span><br><span>     struct signal_handler *sig_data;</span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+  if (!tall_sigh_ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+           tall_sigh_ctx = talloc_named_const(OTC_GLOBAL, 0, "osmo_signal");</span><br><span style="color: hsl(120, 100%, 40%);">+   if (!tall_sigh_ctx)</span><br><span style="color: hsl(120, 100%, 40%);">+           return -ENOMEM;</span><br><span style="color: hsl(120, 100%, 40%);">+</span><br><span>    sig_data = talloc(tall_sigh_ctx, struct signal_handler);</span><br><span>     if (!sig_data)</span><br><span>               return -ENOMEM;</span><br><span>diff --git a/src/stats.c b/src/stats.c</span><br><span>index b5adbf2..da8f3d3 100644</span><br><span>--- a/src/stats.c</span><br><span>+++ b/src/stats.c</span><br><span>@@ -187,10 +187,10 @@</span><br><span> }</span><br><span> </span><br><span> /*! Initilize the stats reporting module; call this once in your program</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] ctx Talloc context from which stats related memory is allocated */</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] ctx UNUSED, only for legacy API compatibility */</span><br><span> void osmo_stats_init(void *ctx)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">- osmo_stats_ctx = ctx;</span><br><span style="color: hsl(120, 100%, 40%);">+ osmo_stats_ctx = talloc_named_const(OTC_GLOBAL, 0, "stats");</span><br><span>       osmo_stat_item_discard_all(&current_stat_item_index);</span><br><span> </span><br><span>        is_initialised = 1;</span><br><span>diff --git a/src/vty/telnet_interface.c b/src/vty/telnet_interface.c</span><br><span>index dc23b12..117caf0 100644</span><br><span>--- a/src/vty/telnet_interface.c</span><br><span>+++ b/src/vty/telnet_interface.c</span><br><span>@@ -75,7 +75,7 @@</span><br><span> }</span><br><span> </span><br><span> /*! Initialize telnet based VTY interface</span><br><span style="color: hsl(0, 100%, 40%);">- *  \param[in] tall_ctx \ref talloc context</span><br><span style="color: hsl(120, 100%, 40%);">+ *  \param[in] tall_ctx UNUSED, only for legacy API compatibility</span><br><span>  *  \param[in] priv private data to be passed to callback</span><br><span>  *  \param[in] ip IP to listen to ('::1' for localhost, '::0' for all, ...)</span><br><span>  *  \param[in] port TCP port number to bind to</span><br><span>@@ -84,8 +84,7 @@</span><br><span> {</span><br><span>      int rc;</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-     tall_telnet_ctx = talloc_named_const(tall_ctx, 1,</span><br><span style="color: hsl(0, 100%, 40%);">-                       "telnet_connection");</span><br><span style="color: hsl(120, 100%, 40%);">+       tall_telnet_ctx = talloc_named_const(OTC_GLOBAL, 0, "telnet_connection");</span><br><span> </span><br><span>      rc = osmo_sock_init_ofd(</span><br><span>                     &server_socket,</span><br><span>diff --git a/tests/ctrl/ctrl_test.c b/tests/ctrl/ctrl_test.c</span><br><span>index cffb803..677ed27 100644</span><br><span>--- a/tests/ctrl/ctrl_test.c</span><br><span>+++ b/tests/ctrl/ctrl_test.c</span><br><span>@@ -4,6 +4,7 @@</span><br><span> #include <string.h></span><br><span> #include <stdbool.h></span><br><span> </span><br><span style="color: hsl(120, 100%, 40%);">+#include <osmocom/core/talloc.h></span><br><span> #include <osmocom/core/utils.h></span><br><span> #include <osmocom/ctrl/control_cmd.h></span><br><span> #include <osmocom/core/logging.h></span><br><span>@@ -459,7 +460,7 @@</span><br><span> </span><br><span> int main(int argc, char **argv)</span><br><span> {</span><br><span style="color: hsl(0, 100%, 40%);">-  ctx = talloc_named_const(NULL, 1, "ctrl_test");</span><br><span style="color: hsl(120, 100%, 40%);">+     ctx = OTC_GLOBAL;</span><br><span>    osmo_init_logging2(ctx, &info);</span><br><span>  msgb_talloc_ctx_init(ctx, 0);</span><br><span> </span><br><span>@@ -478,8 +479,8 @@</span><br><span> </span><br><span>  test_deferred_cmd();</span><br><span> </span><br><span style="color: hsl(0, 100%, 40%);">-        /* Expecting root ctx + msgb root ctx + 5 logging elements */</span><br><span style="color: hsl(0, 100%, 40%);">-   if (talloc_total_blocks(ctx) != 7) {</span><br><span style="color: hsl(120, 100%, 40%);">+  /* Expecting root ctx + name + msgb root ctx + 5 logging elements */</span><br><span style="color: hsl(120, 100%, 40%);">+  if (talloc_total_blocks(ctx) != 8) {</span><br><span>                 talloc_report_full(ctx, stdout);</span><br><span>             OSMO_ASSERT(false);</span><br><span>  }</span><br><span></span><br></pre><p>To view, visit <a href="https://gerrit.osmocom.org/13338">change 13338</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/13338"/><meta itemprop="name" content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: libosmocore </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>
<div style="display:none"> Gerrit-Change-Id: I48f475efd3ee0d5120b8fc30861e852d1a6920b1 </div>
<div style="display:none"> Gerrit-Change-Number: 13338 </div>
<div style="display:none"> Gerrit-PatchSet: 1 </div>
<div style="display:none"> Gerrit-Owner: Harald Welte <laforge@gnumonks.org> </div>