write_queue: Check the result of osmo_wqueue_enqueue and free

The write_queue is designed to have a maximum amount of pending
messages and will refuse to take new messages when it has been
reached. The caller can decide if it wants to flush the queue
and add the message again, create a log. But in all cases the
ownership of the msgb has not been transferred. Fix the potential
memory leak in the failure situation.
diff --git a/src/openbts_sock.cpp b/src/openbts_sock.cpp
index 2d9cae4..5e6f16c 100644
--- a/src/openbts_sock.cpp
+++ b/src/openbts_sock.cpp
@@ -79,7 +79,10 @@
 
 int pcu_sock_send(struct msgb *msg)
 {
-	osmo_wqueue_enqueue(&l1fh->udp_wq, msg);
+	if (osmo_wqueue_enqueue(&l1fh->udp_wq, msg) != 0) {
+		LOGP(DPCU, LOGL_ERROR, "PCU write queue full. Dropping message.\n");
+		msgb_free(msg);
+	}
 	return 0;
 }
 
diff --git a/src/sysmo_l1_if.c b/src/sysmo_l1_if.c
index bef680e..c0721b8 100644
--- a/src/sysmo_l1_if.c
+++ b/src/sysmo_l1_if.c
@@ -36,7 +36,10 @@
 {
 	struct osmo_wqueue *wqueue = &fl1h->write_q[MQ_PDTCH_WRITE];
 
-	osmo_wqueue_enqueue(wqueue, msg);
+	if (osmo_wqueue_enqueue(wqueue, msg) != 0) {
+		LOGP(DL1IF, LOGL_ERROR, "PDTCH queue full. dropping message.\n");
+		msgb_free(msg);
+	}
 
 	return 0;
 }
@@ -324,7 +327,10 @@
 
 
 	/* transmit */
-	osmo_wqueue_enqueue(&fl1h->write_q[MQ_PDTCH_WRITE], msg);
+	if (osmo_wqueue_enqueue(&fl1h->write_q[MQ_PDTCH_WRITE], msg) != 0) {
+		LOGP(DL1IF, LOGL_ERROR, "PDTCH queue full. dropping message.\n");
+		msgb_free(msg);
+	}
 
 	return 0;
 }