Dear all,
At line 2196 of gw/smsc/smsc_cimd2.c the loops that send or receive
messages is possible to block each other for quite long under certain
circumstances. The most common situation is when a CIMD2 connection
starts sending a long queue of MT messages (bulk scenario) the
sms_receive function is blocked until the pdata->outgoing_queue is
empty. This means that it is possible to pack SMS in pdata->received
from minutes to hours thus destroying interactivity of SMS applications.
A simple solution IMHO might be to break the send or receive loop when
something enters pdata->outgoing_queue or pdata->received. I created a
simple patch to implement this so please comment.
Sincerely,
Michael Zervakis
? smsc_cimd2.c.patch
Index: gw/smsc/smsc_cimd2.c
===================================================================
RCS file: /home/cvs/gateway/gw/smsc/smsc_cimd2.c,v
retrieving revision 1.34
diff -u -r1.34 smsc_cimd2.c
--- gw/smsc/smsc_cimd2.c 12 Jan 2009 16:46:50 -0000 1.34
+++ gw/smsc/smsc_cimd2.c 23 Sep 2009 15:59:52 -0000
@@ -2202,6 +2202,7 @@
octstr_get_cstr(conn->id));
bb_smscconn_receive(conn, msg);
}
+ if (gwlist_len(pdata->outgoing_queue) > 0) break;
} while (msg);
/* send messages */
@@ -2211,6 +2212,7 @@
sleep = 0;
if (cimd2_submit_msg(conn,msg) != 0) break;
}
+ if (gwlist_len(pdata->received) > 0) break;
} while (msg);
if (sleep > 0) {