<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(¤t_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>