Review at  https://gerrit.osmocom.org/4730

host/mobile: use osmocom_ms as talloc context

As we use talloc, it's absurdly not to use the main feature of
the library - hierarchical memory management. This change sets
talloc context of all sub-allocated objects to related osmocom_ms
instance. So, as soon as osmocom_ms instance is destroyed, all
sub-allocated chunks are getting destroyed too.

Change-Id: I6433d6e92d20a1a8e4944a758b26ebb48730866e
---
M src/host/layer23/include/osmocom/bb/mobile/mncc_sock.h
M src/host/layer23/src/common/sim.c
M src/host/layer23/src/mobile/app_mobile.c
M src/host/layer23/src/mobile/gsm322.c
M src/host/layer23/src/mobile/gsm48_cc.c
M src/host/layer23/src/mobile/mncc_sock.c
M src/host/layer23/src/mobile/mnccms.c
M src/host/layer23/src/mobile/subscriber.c
M src/host/layer23/src/mobile/transaction.c
M src/host/layer23/src/mobile/vty_interface.c
10 files changed, 23 insertions(+), 35 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/osmocom-bb refs/changes/30/4730/1

diff --git a/src/host/layer23/include/osmocom/bb/mobile/mncc_sock.h 
b/src/host/layer23/include/osmocom/bb/mobile/mncc_sock.h
index b38c5bc..9116ea3 100644
--- a/src/host/layer23/include/osmocom/bb/mobile/mncc_sock.h
+++ b/src/host/layer23/include/osmocom/bb/mobile/mncc_sock.h
@@ -10,7 +10,7 @@
 
 int mncc_sock_from_cc(struct mncc_sock_state *state, struct msgb *msg);
 void mncc_sock_write_pending(struct mncc_sock_state *state);
-struct mncc_sock_state *mncc_sock_init(void *inst, const char *name, void 
*tall_ctx);
+struct mncc_sock_state *mncc_sock_init(void *inst, const char *name);
 void mncc_sock_exit(struct mncc_sock_state *state);
 
 #endif /* _MNCC_SOCK_H */
diff --git a/src/host/layer23/src/common/sim.c 
b/src/host/layer23/src/common/sim.c
index 9aad966..c2d6033 100644
--- a/src/host/layer23/src/common/sim.c
+++ b/src/host/layer23/src/common/sim.c
@@ -29,7 +29,6 @@
 #include <osmocom/bb/common/osmocom_data.h>
 #include <osmocom/bb/common/l1ctl.h>
 
-extern void *l23_ctx;
 static int sim_process_job(struct osmocom_ms *ms);
 
 /*
@@ -1181,7 +1180,7 @@
        struct gsm_sim_handler *handler;
 
        /* create handler and attach */
-       handler = talloc_zero(l23_ctx, struct gsm_sim_handler);
+       handler = talloc_zero(ms, struct gsm_sim_handler);
        if (!handler)
                return 0;
        handler->handle = new_handle++;
diff --git a/src/host/layer23/src/mobile/app_mobile.c 
b/src/host/layer23/src/mobile/app_mobile.c
index 9dbae7c..bd786b5 100644
--- a/src/host/layer23/src/mobile/app_mobile.c
+++ b/src/host/layer23/src/mobile/app_mobile.c
@@ -273,7 +273,7 @@
                mncc_name = talloc_asprintf(ms, "/tmp/ms_mncc_%s", ms->name);
 
                ms->mncc_entity.mncc_recv = mncc_recv_app;
-               ms->mncc_entity.sock_state = mncc_sock_init(ms, mncc_name, 
l23_ctx);
+               ms->mncc_entity.sock_state = mncc_sock_init(ms, mncc_name);
 
                talloc_free(mncc_name);
        } else if (ms->settings.ch_cap == GSM_CAP_SDCCH)
diff --git a/src/host/layer23/src/mobile/gsm322.c 
b/src/host/layer23/src/mobile/gsm322.c
index ad6a83b..8311a44 100644
--- a/src/host/layer23/src/mobile/gsm322.c
+++ b/src/host/layer23/src/mobile/gsm322.c
@@ -45,8 +45,6 @@
 
 const char *ba_version = "osmocom BA V1\n";
 
-extern void *l23_ctx;
-
 static void gsm322_cs_timeout(void *arg);
 static int gsm322_cs_select(struct osmocom_ms *ms, int index, uint16_t mcc,
        uint16_t mnc, int any);
@@ -560,7 +558,7 @@
        LOGP(DPLMN, LOGL_INFO, "Add to list of forbidden LAs "
                "(mcc=%s, mnc=%s, lac=%04x)\n", gsm_print_mcc(mcc),
                gsm_print_mnc(mnc), lac);
-       la = talloc_zero(l23_ctx, struct gsm322_la_list);
+       la = talloc_zero(ms, struct gsm322_la_list);
        if (!la)
                return -ENOMEM;
        la->mcc = mcc;
@@ -905,7 +903,7 @@
                        if (cs->list[i].rxlev > found->rxlev)
                                found->rxlev = cs->list[i].rxlev;
                } else {
-                       temp = talloc_zero(l23_ctx, struct gsm322_plmn_list);
+                       temp = talloc_zero(ms, struct gsm322_plmn_list);
                        if (!temp)
                                return -ENOMEM;
                        temp->mcc = cs->list[i].sysinfo->mcc;
@@ -2153,7 +2151,7 @@
                cs->arfcn = cs->sel_arfcn;
                cs->arfci = arfcn2index(cs->arfcn);
                if (!cs->list[cs->arfci].sysinfo)
-                       cs->list[cs->arfci].sysinfo = talloc_zero(l23_ctx,
+                       cs->list[cs->arfci].sysinfo = talloc_zero(ms,
                                                        struct gsm48_sysinfo);
                if (!cs->list[cs->arfci].sysinfo)
                        exit(-ENOMEM);
@@ -2260,7 +2258,7 @@
                memset(cs->list[cs->arfci].sysinfo, 0,
                        sizeof(struct gsm48_sysinfo));
        else
-               cs->list[cs->arfci].sysinfo = talloc_zero(l23_ctx,
+               cs->list[cs->arfci].sysinfo = talloc_zero(ms,
                                                struct gsm48_sysinfo);
        if (!cs->list[cs->arfci].sysinfo)
                exit(-ENOMEM);
@@ -2481,7 +2479,7 @@
                /* find or create ba list */
                ba = gsm322_find_ba_list(cs, s->mcc, s->mnc);
                if (!ba) {
-                       ba = talloc_zero(l23_ctx, struct gsm322_ba_list);
+                       ba = talloc_zero(ms, struct gsm322_ba_list);
                        if (!ba)
                                return NULL;
                        ba->mcc = s->mcc;
@@ -2523,7 +2521,7 @@
        /* find or create ba list */
        ba = gsm322_find_ba_list(cs, s->mcc, s->mnc);
        if (!ba) {
-               ba = talloc_zero(l23_ctx, struct gsm322_ba_list);
+               ba = talloc_zero(cs->ms, struct gsm322_ba_list);
                if (!ba)
                        return -ENOMEM;
                ba->mcc = s->mcc;
@@ -4093,7 +4091,7 @@
 
        time(&now);
 
-       nb = talloc_zero(l23_ctx, struct gsm322_neighbour);
+       nb = talloc_zero(cs->ms, struct gsm322_neighbour);
        if (!nb)
                return 0;
 
@@ -4423,8 +4421,8 @@
                memset(cs->list[cs->arfci].sysinfo, 0,
                        sizeof(struct gsm48_sysinfo));
        else
-               cs->list[cs->arfci].sysinfo = talloc_zero(l23_ctx,
-                                               struct gsm48_sysinfo);
+               cs->list[cs->arfci].sysinfo = talloc_zero(ms,
+                       struct gsm48_sysinfo);
        if (!cs->list[cs->arfci].sysinfo)
                exit(-ENOMEM);
        cs->si = cs->list[cs->arfci].sysinfo;
@@ -4595,7 +4593,7 @@
                        memset(cs->list[cs->arfci].sysinfo, 0,
                                sizeof(struct gsm48_sysinfo));
                else
-                       cs->list[cs->arfci].sysinfo = talloc_zero(l23_ctx,
+                       cs->list[cs->arfci].sysinfo = talloc_zero(ms,
                                                        struct gsm48_sysinfo);
                if (!cs->list[cs->arfci].sysinfo)
                        exit(-ENOMEM);
@@ -5074,7 +5072,7 @@
                                "stored BA list becomes obsolete.\n");
                } else
                while(!feof(fp)) {
-                       ba = talloc_zero(l23_ctx, struct gsm322_ba_list);
+                       ba = talloc_zero(ms, struct gsm322_ba_list);
                        if (!ba)
                                return -ENOMEM;
                        rc = fread(buf, 4, 1, fp);
diff --git a/src/host/layer23/src/mobile/gsm48_cc.c 
b/src/host/layer23/src/mobile/gsm48_cc.c
index 38dfab0..d398c76 100644
--- a/src/host/layer23/src/mobile/gsm48_cc.c
+++ b/src/host/layer23/src/mobile/gsm48_cc.c
@@ -38,8 +38,6 @@
 #include <osmocom/bb/mobile/voice.h>
 #include <l1ctl_proto.h>
 
-extern void *l23_ctx;
-
 static int gsm48_cc_tx_release(struct gsm_trans *trans, void *arg);
 static int gsm48_rel_null_free(struct gsm_trans *trans);
 int mncc_release_ind(struct osmocom_ms *ms, struct gsm_trans *trans,
diff --git a/src/host/layer23/src/mobile/mncc_sock.c 
b/src/host/layer23/src/mobile/mncc_sock.c
index 1e23942..7315927 100644
--- a/src/host/layer23/src/mobile/mncc_sock.c
+++ b/src/host/layer23/src/mobile/mncc_sock.c
@@ -252,13 +252,13 @@
 }
 
 
-struct mncc_sock_state *mncc_sock_init(void *inst, const char *name, void 
*tall_ctx)
+struct mncc_sock_state *mncc_sock_init(void *inst, const char *name)
 {
        struct mncc_sock_state *state;
        struct osmo_fd *bfd;
        int rc;
 
-       state = talloc_zero(tall_ctx, struct mncc_sock_state);
+       state = talloc_zero(inst, struct mncc_sock_state);
        if (!state)
                return NULL;
 
diff --git a/src/host/layer23/src/mobile/mnccms.c 
b/src/host/layer23/src/mobile/mnccms.c
index d364ca3..b8c2558 100644
--- a/src/host/layer23/src/mobile/mnccms.c
+++ b/src/host/layer23/src/mobile/mnccms.c
@@ -32,7 +32,6 @@
 #include <osmocom/bb/mobile/mncc.h>
 #include <osmocom/bb/mobile/vty.h>
 
-void *l23_ctx;
 static uint32_t new_callref = 1;
 static LLIST_HEAD(call_list);
 
@@ -287,7 +286,7 @@
        if (!call) {
                if (llist_empty(&call_list))
                        first_call = 1;
-               call = talloc_zero(l23_ctx, struct gsm_call);
+               call = talloc_zero(ms, struct gsm_call);
                if (!call)
                        return -ENOMEM;
                call->ms = ms;
@@ -551,7 +550,7 @@
                }
        }
 
-       call = talloc_zero(l23_ctx, struct gsm_call);
+       call = talloc_zero(ms, struct gsm_call);
        if (!call)
                return -ENOMEM;
        call->ms = ms;
diff --git a/src/host/layer23/src/mobile/subscriber.c 
b/src/host/layer23/src/mobile/subscriber.c
index 455db50..d332a07 100644
--- a/src/host/layer23/src/mobile/subscriber.c
+++ b/src/host/layer23/src/mobile/subscriber.c
@@ -36,8 +36,6 @@
  * if list is changed, the result is not written back to SIM */
 //#define TEST_EMPTY_FPLMN
 
-void *l23_ctx;
-
 static void subscr_sim_query_cb(struct osmocom_ms *ms, struct msgb *msg);
 static void subscr_sim_update_cb(struct osmocom_ms *ms, struct msgb *msg);
 static void subscr_sim_key_cb(struct osmocom_ms *ms, struct msgb *msg);
@@ -400,7 +398,7 @@
                        break;
 
                /* add to list */
-               plmn = talloc_zero(l23_ctx, struct gsm_sub_plmn_list);
+               plmn = talloc_zero(ms, struct gsm_sub_plmn_list);
                if (!plmn)
                        return -ENOMEM;
                lai[0] = data[0];
@@ -504,7 +502,7 @@
                        break;
 
                /* add to list */
-               na = talloc_zero(l23_ctx, struct gsm_sub_plmn_na);
+               na = talloc_zero(ms, struct gsm_sub_plmn_na);
                if (!na)
                        return -ENOMEM;
                lai[0] = data[0];
@@ -1119,7 +1117,7 @@
 
        LOGP(DPLMN, LOGL_INFO, "Add to list of forbidden PLMNs "
                "(mcc=%s, mnc=%s)\n", gsm_print_mcc(mcc), gsm_print_mnc(mnc));
-       na = talloc_zero(l23_ctx, struct gsm_sub_plmn_na);
+       na = talloc_zero(subscr->ms, struct gsm_sub_plmn_na);
        if (!na)
                return -ENOMEM;
        na->mcc = mcc;
diff --git a/src/host/layer23/src/mobile/transaction.c 
b/src/host/layer23/src/mobile/transaction.c
index 45bf2b4..9824bd1 100644
--- a/src/host/layer23/src/mobile/transaction.c
+++ b/src/host/layer23/src/mobile/transaction.c
@@ -30,8 +30,6 @@
 #include <osmocom/bb/mobile/mncc.h>
 #include <osmocom/bb/mobile/transaction.h>
 
-extern void *l23_ctx;
-
 void _gsm48_cc_trans_free(struct gsm_trans *trans);
 void _gsm480_ss_trans_free(struct gsm_trans *trans);
 void _gsm411_sms_trans_free(struct gsm_trans *trans);
@@ -67,7 +65,7 @@
 {
        struct gsm_trans *trans;
 
-       trans = talloc_zero(l23_ctx, struct gsm_trans);
+       trans = talloc_zero(ms, struct gsm_trans);
        if (!trans)
                return NULL;
 
diff --git a/src/host/layer23/src/mobile/vty_interface.c 
b/src/host/layer23/src/mobile/vty_interface.c
index 0f27194..06f66b5 100644
--- a/src/host/layer23/src/mobile/vty_interface.c
+++ b/src/host/layer23/src/mobile/vty_interface.c
@@ -43,8 +43,6 @@
 #include <osmocom/vty/telnet_interface.h>
 #include <osmocom/vty/misc.h>
 
-void *l23_ctx;
-
 int mncc_call(struct osmocom_ms *ms, char *number);
 int mncc_hangup(struct osmocom_ms *ms);
 int mncc_answer(struct osmocom_ms *ms);
@@ -2104,7 +2102,7 @@
        if (vty_check_number(vty, argv[1]))
                return CMD_WARNING;
 
-       abbrev = talloc_zero(l23_ctx, struct gsm_settings_abbrev);
+       abbrev = talloc_zero(ms, struct gsm_settings_abbrev);
        if (!abbrev) {
                vty_out(vty, "No Memory!%s", VTY_NEWLINE);
                return CMD_WARNING;

-- 
To view, visit https://gerrit.osmocom.org/4730
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I6433d6e92d20a1a8e4944a758b26ebb48730866e
Gerrit-PatchSet: 1
Gerrit-Project: osmocom-bb
Gerrit-Branch: master
Gerrit-Owner: Vadim Yanitskiy <axilira...@gmail.com>

Reply via email to