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) {