This patch fix an issue with AT parser in gatserver.
If an empty command is issued after AT, then 2 answers are sent. The parser can
also get in a bad state where next commands will not be handled. After that the
parser will get back on his feets. This is caused by reentrency:
new_bytes() calls g_at_server_send_final(), which in turns calls server_resume
which calls new_bytes() again synchronously.
Sample dialog follows:
ofonod[30720]: Server: < AT+CMER=3,0,0,1\r\n
ofonod[30720]: Server: > \r\nOK\r\n
ofonod[30720]: Server: < AT+CFUN\r\n
ofonod[30720]: Server: > \r\nERROR\r\n
ofonod[30720]: Server: < AT\r\n
ofonod[30720]: Server: > \r\nOK\r\n
ofonod[30720]: Server: < \r\n
ofonod[30720]: Server: > \r\nOK\r\n\r\nOK\r\n
<2 answers sent>
ofonod[30720]: Server: < AT+CFUN\r\n
ofonod[30720]: Server: > \r\nERROR\r\n
ofonod[30720]: Server: < \r\n
ofonod[30720]: Server: > \r\nOK\r\n
ofonod[30720]: Server: < AT+CFUN\r\n
<missing ERROR reply to CFUN>
ofonod[30720]: Server: < \r\n
ofonod[30720]: Server: > \r\nOK\r\n
Frédéric Dalleau (1):
gatchat: Fix reentrency issue with empty commands
gatchat/gatserver.c | 3 +++
1 files changed, 3 insertions(+), 0 deletions(-)