diff options
Diffstat (limited to 'openbsc/src')
-rw-r--r-- | openbsc/src/libmsc/meas_feed.c | 3 | ||||
-rw-r--r-- | openbsc/src/libmsc/smpp_smsc.c | 8 | ||||
-rw-r--r-- | openbsc/src/utils/smpp_mirror.c | 8 |
3 files changed, 16 insertions, 3 deletions
diff --git a/openbsc/src/libmsc/meas_feed.c b/openbsc/src/libmsc/meas_feed.c index 86ba3b712..86d679abf 100644 --- a/openbsc/src/libmsc/meas_feed.c +++ b/openbsc/src/libmsc/meas_feed.c @@ -61,7 +61,8 @@ static int process_meas_rep(struct gsm_meas_rep *mr) memcpy(&mfm->mr, mr, sizeof(mfm->mr)); /* and send it to the socket */ - osmo_wqueue_enqueue(&g_mfs.wqueue, msg); + if (osmo_wqueue_enqueue(&g_mfs.wqueue, msg) != 0) + msgb_free(msg); return 0; } diff --git a/openbsc/src/libmsc/smpp_smsc.c b/openbsc/src/libmsc/smpp_smsc.c index 048c1b802..c1ec22f5b 100644 --- a/openbsc/src/libmsc/smpp_smsc.c +++ b/openbsc/src/libmsc/smpp_smsc.c @@ -352,7 +352,13 @@ static int pack_and_send(struct osmo_esme *esme, uint32_t type, void *ptr) } msgb_put(msg, rlen); - return osmo_wqueue_enqueue(&esme->wqueue, msg); + if (osmo_wqueue_enqueue(&esme->wqueue, msg) != 0) { + LOGP(DSMPP, LOGL_ERROR, "[%s] Write queue full. Dropping message\n", + esme->system_id); + msgb_free(msg); + return -EAGAIN; + } + return 0; } /*! \brief transmit a generic NACK to a remote ESME */ diff --git a/openbsc/src/utils/smpp_mirror.c b/openbsc/src/utils/smpp_mirror.c index cf3657e39..2f154db49 100644 --- a/openbsc/src/utils/smpp_mirror.c +++ b/openbsc/src/utils/smpp_mirror.c @@ -85,7 +85,13 @@ static int pack_and_send(struct esme *esme, uint32_t type, void *ptr) } msgb_put(msg, rlen); - return osmo_wqueue_enqueue(&esme->wqueue, msg); + if (osmo_wqueue_enqueue(&esme->wqueue, msg) != 0) { + LOGP(DSMPP, LOGL_ERROR, "[%s] Write queue full. Dropping message\n", + esme->system_id); + msgb_free(msg); + return -EAGAIN; + } + return 0; } /* FIXME: merge with smpp_smsc.c */ |