Hi, we had an issue with 'not ACKed operation 31' requests on EMI SMSC. The connection is configured to work in Windowing mode (flowcontrol = 0) and the window size is default 100. The issue was that operation 31 requests were not being ACKed, the number of not ACKed operation31 requests grew to 100 and then the only thing done on that connection/thread was the logging of 100 loglines with 'WARNING: Alert (operation 31) was not ACKed within 60 seconds'. The connection was not in a proper state, but the connection state was not changed and the traffic over that connection was blocked.
The change that we applied is the same handling as performed for operation 51 when not ACKed. Index: gw/smsc/smsc_emi.c =================================================================== --- gw/smsc/smsc_emi.c (revision 5175) +++ gw/smsc/smsc_emi.c (working copy) @@ -1237,8 +1237,12 @@ } } else if (PRIVDATA(conn)->slots[i].sendtype == 31) { warning(0, "EMI2[%s]: Alert (operation 31) was not " - "ACKed within %d seconds", octstr_get_cstr(privdata->name), - PRIVDATA(conn)->waitack); + "ACKed within %d seconds, closing connection.", + octstr_get_cstr(privdata->name), PRIVDATA(conn)->waitack); + PRIVDATA(conn)->slots[i].sendtime = 0; + PRIVDATA(conn)->unacked--; + conn_destroy(*server); + *server = NULL; if (PRIVDATA(conn)->flowcontrol) PRIVDATA(conn)->can_write=1; } else { panic(0, "EMI2[%s]: Bug, no timeout handler for sent packet", Maybe useful for somebody. Best regards, Nestor