aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libctrl
diff options
context:
space:
mode:
authorDaniel Willmann <daniel@totalueberwachung.de>2011-08-05 12:22:35 +0200
committerHolger Hans Peter Freyther <zecke@selfish.org>2012-09-11 15:20:55 +0200
commit5e95f45af0e96c9f79d053de55a1cbd689496883 (patch)
tree16d1ea7f246c1e4cc3a48dde22e5f15ce38c0101 /openbsc/src/libctrl
parent5ff06af6f560b9e906d6c320325ae84f3602f397 (diff)
ctrl: Improve error handling if controlif setup fails
Diffstat (limited to 'openbsc/src/libctrl')
-rw-r--r--openbsc/src/libctrl/control_if.c28
1 files changed, 16 insertions, 12 deletions
diff --git a/openbsc/src/libctrl/control_if.c b/openbsc/src/libctrl/control_if.c
index 350e8e1ca..8842d3c2f 100644
--- a/openbsc/src/libctrl/control_if.c
+++ b/openbsc/src/libctrl/control_if.c
@@ -642,23 +642,27 @@ struct ctrl_handle *controlif_setup(struct gsm_network *gsmnet, uint16_t port)
ctrl->gsmnet = gsmnet;
ctrl_node_vec = vector_init(5);
- if (!ctrl_node_vec) {
- talloc_free(ctrl);
- return NULL;
- }
+ if (!ctrl_node_vec)
+ goto err;
/* Listen for control connections */
ret = make_sock(&ctrl->listen_fd, IPPROTO_TCP, INADDR_LOOPBACK, port,
0, listen_fd_cb, ctrl);
- if (ret < 0) {
- talloc_free(ctrl);
- vector_free(ctrl_node_vec);
- ctrl_node_vec = NULL;
- return NULL;
- }
+ if (ret < 0)
+ goto err_vec;
- ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_rate_ctr);
- ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_counter);
+ ret = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_rate_ctr);
+ if (ret)
+ goto err_vec;
+ ret = ctrl_cmd_install(CTRL_NODE_ROOT, &cmd_counter);
+ if (ret)
+ goto err_vec;
return ctrl;
+err_vec:
+ vector_free(ctrl_node_vec);
+ ctrl_node_vec = NULL;
+err:
+ talloc_free(ctrl);
+ return NULL;
}