Change in libosmocore[master]: make use of OTC_GLOBAL when allocating library-internal contexts

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Harald Welte gerrit-no-reply at lists.osmocom.org
Wed Mar 20 10:48:23 UTC 2019


Harald Welte has uploaded this change for review. ( https://gerrit.osmocom.org/13338


Change subject: make use of OTC_GLOBAL when allocating library-internal contexts
......................................................................

make use of OTC_GLOBAL when allocating library-internal contexts

As libosmcore is now managing the global talloc contexts, there's
no point in having APIs where the user tells the library about
which talloc contexts to use for a given sub-system.

Change-Id: I48f475efd3ee0d5120b8fc30861e852d1a6920b1
---
M include/osmocom/core/signal.h
M src/counter.c
M src/ctrl/control_vty.c
M src/gb/gprs_bssgp.c
M src/gsm/lapd_core.c
M src/logging.c
M src/signal.c
M src/stats.c
M src/vty/telnet_interface.c
M tests/ctrl/ctrl_test.c
10 files changed, 36 insertions(+), 22 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/38/13338/1

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

-- 
To view, visit https://gerrit.osmocom.org/13338
To unsubscribe, or for help writing mail filters, visit https://gerrit.osmocom.org/settings

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-MessageType: newchange
Gerrit-Change-Id: I48f475efd3ee0d5120b8fc30861e852d1a6920b1
Gerrit-Change-Number: 13338
Gerrit-PatchSet: 1
Gerrit-Owner: Harald Welte <laforge at gnumonks.org>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.osmocom.org/pipermail/gerrit-log/attachments/20190320/1626bdce/attachment.htm>


More information about the gerrit-log mailing list