ipaccess_recvmsg: Clean up release steps upon error condition

Related: OS#4624
Change-Id: I47a3e477d6861620a741193d3d3d3e286836fd44
diff --git a/src/input/ipaccess.c b/src/input/ipaccess.c
index 3ff59f4..8a7142d 100644
--- a/src/input/ipaccess.c
+++ b/src/input/ipaccess.c
@@ -330,12 +330,15 @@
 	}
 	return 0;
 err:
-	osmo_fd_unregister(bfd);
 	if (bfd->fd != -1) {
+		osmo_fd_unregister(bfd);
 		close(bfd->fd);
 		bfd->fd = -1;
+		/* This is a BSC accepted socket, bfd->data holds a reference to line, drop it */
+		OSMO_ASSERT(bfd->data == line);
+		bfd->data = NULL;
+		e1inp_line_put2(line, "ipa_bfd");
 	}
-	e1inp_line_put2(line, "ipa_bfd");
 	return -1;
 }