From 5b54ec04f29716cdecedf7d5af2b5bc31dd8a2fb Mon Sep 17 00:00:00 2001 From: Jaeyun Date: Mon, 11 Jul 2022 19:40:05 +0900 Subject: [PATCH] [Edge] remove client when received error In message thread, remove connection data when received error from client. Internally error command means closing socket. Signed-off-by: Jaeyun --- src/libnnstreamer-edge/nnstreamer-edge-internal.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/libnnstreamer-edge/nnstreamer-edge-internal.c b/src/libnnstreamer-edge/nnstreamer-edge-internal.c index a34d3b0..4d6e85c 100644 --- a/src/libnnstreamer-edge/nnstreamer-edge-internal.c +++ b/src/libnnstreamer-edge/nnstreamer-edge-internal.c @@ -675,6 +675,7 @@ _nns_edge_message_handler (void *thread_data) nns_edge_handle_s *eh; nns_edge_conn_s *conn; nns_edge_cmd_s cmd; + bool remove_connection = false; int64_t client_id; char *val; int ret; @@ -705,14 +706,18 @@ _nns_edge_message_handler (void *thread_data) ret = _nns_edge_cmd_receive (conn, &cmd); if (ret != NNS_EDGE_ERROR_NONE) { nns_edge_loge ("Failed to receive data from the connected node."); + remove_connection = true; break; } if (cmd.info.cmd == _NNS_EDGE_CMD_ERROR) { nns_edge_loge ("Received error, stop msg thread."); _nns_edge_cmd_clear (&cmd); + remove_connection = true; break; - } else if (cmd.info.cmd != _NNS_EDGE_CMD_TRANSFER_DATA) { + } + + if (cmd.info.cmd != _NNS_EDGE_CMD_TRANSFER_DATA) { /** @todo handle other cmd later */ _nns_edge_cmd_clear (&cmd); continue; @@ -745,6 +750,14 @@ _nns_edge_message_handler (void *thread_data) _nns_edge_cmd_clear (&cmd); } + /* Received error message from client, remove connection from table. */ + if (remove_connection) { + nns_edge_logd + ("Received error from client, remove connection of client (ID: %ld).", + (long int) client_id); + g_hash_table_remove (eh->conn_table, GUINT_TO_POINTER (client_id)); + } + conn->running = 0; return NULL; } -- 2.34.1