aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@osmocom.org>2022-05-16 17:42:17 +0200
committerHarald Welte <laforge@osmocom.org>2022-05-16 17:43:57 +0200
commitbf254f6da51f911fb3dee90acdcb94b1c6674686 (patch)
tree9daa223f226536825f0c840bb16fa65349cbce30
parent022193da73230fba5c65599fedcba606b71f9928 (diff)
smpp: don't enqueue write messages if ESME is disconnected
If the ESME has been disconnected (dead socket) but still is in memory (other users hold a use count), we shouldn't enqueue messages to the write queue. This prevents messages like DSMPP write_queue.c:112 wqueue(0x7f8bc392f6e0) is full. Rejecting msgb Change-Id: I10a270f1d555782be272f4d78da43190618a9950 Closes: OS#3278
-rw-r--r--src/libmsc/smpp_smsc.c9
1 files changed, 8 insertions, 1 deletions
diff --git a/src/libmsc/smpp_smsc.c b/src/libmsc/smpp_smsc.c
index 6712032f3..34391c2c6 100644
--- a/src/libmsc/smpp_smsc.c
+++ b/src/libmsc/smpp_smsc.c
@@ -347,8 +347,15 @@ int smpp_route(const struct smsc *smsc, const struct osmo_smpp_addr *dest, struc
#define PACK_AND_SEND(esme, ptr) pack_and_send(esme, (ptr)->command_id, ptr)
static int pack_and_send(struct osmo_esme *esme, uint32_t type, void *ptr)
{
- struct msgb *msg = msgb_alloc(4096, "SMPP_Tx");
+ struct msgb *msg;
int rc, rlen;
+
+ /* the socket was closed. Avoid allocating + enqueueing msgb, see
+ * https://osmocom.org/issues/3278 */
+ if (esme->wqueue.bfd.fd == -1)
+ return -EIO;
+
+ msg = msgb_alloc(4096, "SMPP_Tx");
if (!msg)
return -ENOMEM;