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
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_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 @@
 	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 @@
 
 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)