From: Ramakrishnan Muthukrishnan Date: Fri, 1 Dec 2023 16:34:17 +0000 (+0530) Subject: serial_server: handle the case where read returns a 0 (eof) X-Git-Url: https://git.rkrishnan.org/pf/content/en/seg/about/reliability?a=commitdiff_plain;h=b4e830fd49caa4f6505d57d7a70604f0535410a8;p=pihpsdr.git serial_server: handle the case where read returns a 0 (eof) --- diff --git a/rigctl.c b/rigctl.c index cd46a51..3203d81 100644 --- a/rigctl.c +++ b/rigctl.c @@ -4370,15 +4370,14 @@ static gpointer serial_server(gpointer data) { command_index++; if (cmd_input[i] == ';') { command[command_index] = '\0'; - if (rigctl_debug) + if (rigctl_debug) { g_print("RIGCTL: command=%s\n", command); + } COMMAND *info = g_new(COMMAND, 1); info->client = client; info->command = command; g_mutex_lock(&mutex_busy->m); - if (client->fd != -1) { - g_idle_add(parse_cmd, info); - } + g_idle_add(parse_cmd, info); g_mutex_unlock(&mutex_busy->m); command = g_new(char, MAXDATASIZE); @@ -4386,9 +4385,14 @@ static gpointer serial_server(gpointer data) { } } } else if (numbytes < 0) { + perror("serial_server"); break; - } - // usleep(100L); + } else if (numbytes == 0) { + // don't continue in the loop, the other side has closed + // the connection, so no point trying to read from it. + perror("serial_server: connection closed by the client"); + break; + } } close(client->fd); cat_control--; diff --git a/rigctl_menu.c b/rigctl_menu.c index 2ee0750..d036fb4 100644 --- a/rigctl_menu.c +++ b/rigctl_menu.c @@ -36,7 +36,7 @@ gboolean serial_enable = TRUE; // edit (enable serial at startup) char ser_port[64]="/dev/ttyACM0"; int serial_baud_rate = B9600; int serial_parity = 0; // 0=none, 1=even, 2=odd -gboolean rigctl_debug=FALSE; +gboolean rigctl_debug = TRUE; static GtkWidget *parent_window=NULL; static GtkWidget *dialog=NULL;