aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Couzens <lynxis@fe80.eu>2019-08-28 02:35:10 +0200
committerAlexander Couzens <lynxis@fe80.eu>2019-09-15 23:08:38 +0200
commite11afdaa0e9b94bcdb958500196be26b3a16c8e3 (patch)
treeb2707a9026037889a13d455164dc843e9c02aa91
parent30249a15d51a15b498e87b78bd3fc8d684ffcf46 (diff)
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
-rw-r--r--src/input/ipa.c6
1 files changed, 6 insertions, 0 deletions
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)