From e11afdaa0e9b94bcdb958500196be26b3a16c8e3 Mon Sep 17 00:00:00 2001 From: Alexander Couzens Date: Wed, 28 Aug 2019 02:35:10 +0200 Subject: ipa: ipa_server_link_close() add checks of link state When closing a link which failed on open, ipa_server_link_close() would crash it when calling osmo_fd_unregister. Change-Id: I672d4de25464c3829b08aff26b1a6d4ad92e7684 --- src/input/ipa.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/input/ipa.c b/src/input/ipa.c index 8aed7b3..b4dbcb0 100644 --- a/src/input/ipa.c +++ b/src/input/ipa.c @@ -297,6 +297,7 @@ ipa_server_link_create(void *ctx, struct e1inp_line *line, ipa_link->ofd.when |= BSC_FD_READ | BSC_FD_WRITE; ipa_link->ofd.cb = ipa_server_fd_cb; + ipa_link->ofd.fd = -1; ipa_link->ofd.data = ipa_link; if (addr) ipa_link->addr = talloc_strdup(ipa_link, addr); @@ -326,6 +327,7 @@ int ipa_server_link_open(struct ipa_server_link *link) link->ofd.fd = ret; if (osmo_fd_register(&link->ofd) < 0) { close(ret); + link->ofd.fd = -1; return -EIO; } return 0; @@ -333,8 +335,12 @@ int ipa_server_link_open(struct ipa_server_link *link) void ipa_server_link_close(struct ipa_server_link *link) { + if (link->ofd.fd == -1) + return; + osmo_fd_unregister(&link->ofd); close(link->ofd.fd); + link->ofd.fd = -1; } static int ipa_server_conn_read(struct ipa_server_conn *conn) -- cgit v1.2.3-59-g8ed1b