laforge has uploaded this change for review. ( 
https://gerrit.osmocom.org/c/osmo-msc/+/28118 )


Change subject: sms_queue: refactor sms_pending add/remove code
......................................................................

sms_queue: refactor sms_pending add/remove code

This avoids every caller from manually having to remember to
increment the count, the stat_item and llist_{add,del}.

Change-Id: Ice4c73727ef2d7e4118f0ef5fe24cae943c7528f
---
M src/libmsc/sms_queue.c
1 file changed, 19 insertions(+), 23 deletions(-)



  git pull ssh://gerrit.osmocom.org:29418/osmo-msc refs/changes/18/28118/1

diff --git a/src/libmsc/sms_queue.c b/src/libmsc/sms_queue.c
index 31ee6de..c78b4a7 100644
--- a/src/libmsc/sms_queue.c
+++ b/src/libmsc/sms_queue.c
@@ -204,9 +204,19 @@
        return pending;
 }

-/* release a gsm_sms_pending object */
-static void sms_pending_free(struct gsm_sms_pending *pending)
+/* add (append) a gsm_sms_pending to the queue pending_sms list */
+static void sms_pending_add(struct gsm_sms_queue *smsq, struct gsm_sms_pending 
*pending)
 {
+       smsq->pending += 1;
+       smsq_stat_item_inc(smsq, SMSQ_STAT_SMS_RAM_PENDING);
+       llist_add_tail(&pending->entry, &smsq->pending_sms);
+}
+
+/* release a gsm_sms_pending object */
+static void sms_pending_free(struct gsm_sms_queue *smsq, struct 
gsm_sms_pending *pending)
+{
+       smsq->pending -= 1;
+       smsq_stat_item_dec(smsq, SMSQ_STAT_SMS_RAM_PENDING);
        vlr_subscr_put(pending->vsub, VSUB_USE_SMS_PENDING);
        llist_del(&pending->entry);
        talloc_free(pending);
@@ -245,9 +255,7 @@
        if (pending->failed_attempts < smsq->max_fail)
                return sms_pending_resend(pending);

-       sms_pending_free(pending);
-       smsq->pending -= 1;
-       smsq_stat_item_dec(smsq, SMSQ_STAT_SMS_RAM_PENDING);
+       sms_pending_free(smsq, pending);
 }

 /* Resend all SMS that are scheduled for a resend. This is done to
@@ -268,9 +276,7 @@

                /* the sms is gone? Move to the next */
                if (!sms) {
-                       sms_pending_free(pending);
-                       smsq->pending -= 1;
-                       smsq_stat_item_dec(smsq, SMSQ_STAT_SMS_RAM_PENDING);
+                       sms_pending_free(smsq, pending);
                        sms_queue_trigger(smsq);
                } else {
                        pending->resend = 0;
@@ -405,9 +411,7 @@
                }

                attempted += 1;
-               smsq->pending += 1;
-               smsq_stat_item_inc(smsq, SMSQ_STAT_SMS_RAM_PENDING);
-               llist_add_tail(&pending->entry, &smsq->pending_sms);
+               sms_pending_add(smsq, pending);
                _gsm411_send_sms(smsq->network, sms->receiver, sms);
        } while (attempted < attempts && rounds < 1000);

@@ -445,9 +449,7 @@
                goto no_pending_sms;
        }

-       smsq->pending += 1;
-       smsq_stat_item_inc(smsq, SMSQ_STAT_SMS_RAM_PENDING);
-       llist_add_tail(&pending->entry, &smsq->pending_sms);
+       sms_pending_add(smsq, pending);
        _gsm411_send_sms(smsq->network, sms->receiver, sms);
        return;

@@ -592,21 +594,17 @@
        case S_SMS_DELIVERED:
                smsq_rate_ctr_inc(network->sms_queue, 
SMSQ_CTR_SMS_DELIVERY_ACK);
                /* Remember the subscriber and clear the pending entry */
-               network->sms_queue->pending -= 1;
-               smsq_stat_item_dec(network->sms_queue, 
SMSQ_STAT_SMS_RAM_PENDING);
                vsub = pending->vsub;
                vlr_subscr_get(vsub, __func__);
                db_sms_delete_sent_message_by_id(pending->sms_id);
-               sms_pending_free(pending);
+               sms_pending_free(network->sms_queue, pending);
                /* Attempt to send another SMS to this subscriber */
                sms_send_next(vsub);
                vlr_subscr_put(vsub, __func__);
                break;
        case S_SMS_MEM_EXCEEDED:
                smsq_rate_ctr_inc(network->sms_queue, 
SMSQ_CTR_SMS_DELIVERY_NOMEM);
-               network->sms_queue->pending -= 1;
-               smsq_stat_item_dec(network->sms_queue, 
SMSQ_STAT_SMS_RAM_PENDING);
-               sms_pending_free(pending);
+               sms_pending_free(network->sms_queue, pending);
                sms_queue_trigger(network->sms_queue);
                break;
        case S_SMS_UNKNOWN_ERROR:
@@ -679,10 +677,8 @@
        llist_for_each_entry_safe(pending, tmp, &smsq->pending_sms, entry) {
                LOGP(DLSMS, LOGL_NOTICE,
                     "SMSqueue clearing for sub %llu\n", pending->vsub->id);
-               sms_pending_free(pending);
+               sms_pending_free(smsq, pending);
        }

-       smsq->pending = 0;
-       smsq_stat_item_set(smsq, SMSQ_STAT_SMS_RAM_PENDING, 0);
        return 0;
 }

--
To view, visit https://gerrit.osmocom.org/c/osmo-msc/+/28118
To unsubscribe, or for help writing mail filters, visit 
https://gerrit.osmocom.org/settings

Gerrit-Project: osmo-msc
Gerrit-Branch: master
Gerrit-Change-Id: Ice4c73727ef2d7e4118f0ef5fe24cae943c7528f
Gerrit-Change-Number: 28118
Gerrit-PatchSet: 1
Gerrit-Owner: laforge <[email protected]>
Gerrit-MessageType: newchange

Reply via email to