input/ipaccess: Avoid extra poll() call when e1i_ts tx queue becomes empty

Before this patch, the logic (both for delayed tx and immediate tx)
always left the WRITE flag set, and relied on an extra call back from
the main loop (poll()) to disable the flag until it found out there was
nothing else to send.
Instead, let's disable it immediatelly at the time we submit the last
message in the queue.

Change-Id: I0e5da5d1342f352d0e2bca9ee39c768bccb2c8d5
diff --git a/src/input/ipaccess.c b/src/input/ipaccess.c
index ca48d21..07fd814 100644
--- a/src/input/ipaccess.c
+++ b/src/input/ipaccess.c
@@ -477,12 +477,24 @@
 	}
 }
 
+static bool e1i_ts_has_pending_tx_msgs(struct e1inp_ts *e1i_ts)
+{
+	struct e1inp_sign_link *link;
+	llist_for_each_entry(link, &e1i_ts->sign.sign_links, list) {
+		if (!llist_empty(&link->tx_list)) {
+			return true;
+		}
+	}
+	return false;
+}
+
 static void timeout_ts1_write(void *data)
 {
 	struct e1inp_ts *e1i_ts = (struct e1inp_ts *)data;
 
 	/* trigger write of ts1, due to tx delay timer */
-	ts_want_write(e1i_ts);
+	if (e1i_ts_has_pending_tx_msgs(e1i_ts))
+		ts_want_write(e1i_ts);
 }
 
 static int __handle_ts1_write(struct osmo_fd *bfd, struct e1inp_line *line)
@@ -535,9 +547,11 @@
 		/* set tx delay timer for next event */
 		osmo_timer_setup(&e1i_ts->sign.tx_timer, timeout_ts1_write, e1i_ts);
 		osmo_timer_schedule(&e1i_ts->sign.tx_timer, 0, e1i_ts->sign.delay);
-	}
-
+	} else {
 out:
+		if (!e1i_ts_has_pending_tx_msgs(e1i_ts))
+			osmo_fd_write_disable(bfd);
+	}
 	msgb_free(msg);
 	return ret;
 err: