gsmtap: Add gsmtap_sendmsg_free() as alternative to gsmtap_sendmsg()

gsmtap_sendmsg() places the burden of freeing the msgb in case of
erroneous return codes on the caller.  A review of existing users
shows that this is overly optimistic and many calls get it wrong,
opening up memory leaks.

Let's add a new function gsmtap_sendmsg_free() which behaves like
gsmtap_sendmsg() but always takes ownership: Either it is sent + freed,
or it is just freed.

Change-Id: I106b09f2a49bf24ce0e8d11fd4d4ee93e9cafdf5
Related: OS#5329
diff --git a/src/gsmtap_util.c b/src/gsmtap_util.c
index 9ae06d6..e5adb2f 100644
--- a/src/gsmtap_util.c
+++ b/src/gsmtap_util.c
@@ -323,6 +323,20 @@
 	}
 }
 
+/*! Send a \ref msgb through a GSMTAP source; free the message even if tx queue full.
+ *  \param[in] gti GSMTAP instance
+ *  \param[in] msg message buffer; always freed, caller must not reference it later.
+ *  \return 0 in case of success; negative in case of error
+ */
+int gsmtap_sendmsg_free(struct gsmtap_inst *gti, struct msgb *msg)
+{
+	int rc;
+	rc = gsmtap_sendmsg(gti, msg);
+	if (rc < 0)
+		msgb_free(msg);
+	return rc;
+}
+
 /*! send an arbitrary type through GSMTAP.
  *  See \ref gsmtap_makemsg_ex for arguments
  */