diff options
author | Vadim Yanitskiy <axilirator@gmail.com> | 2017-05-17 03:17:43 +0300 |
---|---|---|
committer | Vadim Yanitskiy <axilirator@gmail.com> | 2017-11-08 18:46:57 +0700 |
commit | d0ed4de0854f16f3f03be681356755fddaf3d251 (patch) | |
tree | de945aa994d705590a3b778db736fadb68e360ad /src/host/layer23/src/mobile | |
parent | 8dbacacd37e2d4810c8e0ff2008c94cc6ded0b13 (diff) |
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: I6e3467ff739f3e6dc8dd60cc6d1fcd3f8e490ce9
Diffstat (limited to 'src/host/layer23/src/mobile')
-rw-r--r-- | src/host/layer23/src/mobile/app_mobile.c | 2 | ||||
-rw-r--r-- | src/host/layer23/src/mobile/gsm322.c | 24 | ||||
-rw-r--r-- | src/host/layer23/src/mobile/gsm48_cc.c | 2 | ||||
-rw-r--r-- | src/host/layer23/src/mobile/mncc_sock.c | 4 | ||||
-rw-r--r-- | src/host/layer23/src/mobile/mnccms.c | 5 | ||||
-rw-r--r-- | src/host/layer23/src/mobile/subscriber.c | 8 | ||||
-rw-r--r-- | src/host/layer23/src/mobile/transaction.c | 4 | ||||
-rw-r--r-- | src/host/layer23/src/mobile/vty_interface.c | 4 |
8 files changed, 21 insertions, 32 deletions
diff --git a/src/host/layer23/src/mobile/app_mobile.c b/src/host/layer23/src/mobile/app_mobile.c index 9dbae7c4..bd786b56 100644 --- a/src/host/layer23/src/mobile/app_mobile.c +++ b/src/host/layer23/src/mobile/app_mobile.c @@ -273,7 +273,7 @@ struct osmocom_ms *mobile_new(char *name) 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 ad6a83bf..8311a44b 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 @@ int gsm322_add_forbidden_la(struct osmocom_ms *ms, uint16_t mcc, 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 @@ static int gsm322_sort_list(struct osmocom_ms *ms) 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 @@ static int gsm322_search_end(struct osmocom_ms *ms) 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 @@ static int gsm322_cs_scan(struct osmocom_ms *ms) 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 @@ struct gsm322_ba_list *gsm322_cs_sysinfo_sacch(struct osmocom_ms *ms) /* 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 @@ static int gsm322_store_ba_list(struct gsm322_cellsel *cs, /* 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 @@ static struct gsm322_neighbour *gsm322_nb_alloc(struct gsm322_cellsel *cs, 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 @@ no_cell_found: 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 @@ printf("%d time to sync again: %u\n", nb->arfcn, now + GSM58_READ_AGAIN - nb->wh 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 @@ int gsm322_init(struct osmocom_ms *ms) "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 38dfab02..d398c765 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 1e239428..73159270 100644 --- a/src/host/layer23/src/mobile/mncc_sock.c +++ b/src/host/layer23/src/mobile/mncc_sock.c @@ -252,13 +252,13 @@ static int mncc_sock_accept(struct osmo_fd *bfd, unsigned int flags) } -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 d364ca34..b8c25581 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 @@ int mncc_recv_mobile(struct osmocom_ms *ms, int msg_type, void *arg) 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 @@ int mncc_call(struct osmocom_ms *ms, char *number) } } - 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 455db506..d332a077 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 @@ static int subscr_sim_plmnsel(struct osmocom_ms *ms, uint8_t *data, 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 @@ static int subscr_sim_fplmn(struct osmocom_ms *ms, uint8_t *data, 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 @@ int gsm_subscr_add_forbidden_plmn(struct gsm_subscriber *subscr, uint16_t mcc, 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 45bf2b41..9824bd1b 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_alloc(struct osmocom_ms *ms, { 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 0f271941..06f66b59 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 @@ DEFUN(cfg_abbrev, cfg_ms_abbrev_cmd, "abbrev ABBREVIATION NUMBER [NAME]", 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; |