From 65464f8f5af250bc7eb0401320a04e2c6ec6ffe5 Mon Sep 17 00:00:00 2001 From: Janez Date: Mon, 26 Oct 2020 17:53:41 +0100 Subject: [PATCH] Fix gateway socket hangup handling. Speed-up gateway processing. --- socketCAN/CO_epoll_interface.c | 11 +++++++---- socketCAN/CO_main_basic.c | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/socketCAN/CO_epoll_interface.c b/socketCAN/CO_epoll_interface.c index 4a6e5d6..3f1a771 100644 --- a/socketCAN/CO_epoll_interface.c +++ b/socketCAN/CO_epoll_interface.c @@ -533,10 +533,6 @@ void CO_epoll_processGtw(CO_epoll_gtw_t *epGtw, && (ep->ev.data.fd == epGtw->gtwa_fdSocket || ep->ev.data.fd == epGtw->gtwa_fd) ) { - if ((ep->ev.events & (EPOLLERR | EPOLLHUP)) != 0) { - log_printf(LOG_DEBUG, DBG_GENERAL, - "socket error or hangup, event=", ep->ev.events); - } if ((ep->ev.events & EPOLLIN) != 0 && ep->ev.data.fd == epGtw->gtwa_fdSocket ) { @@ -626,6 +622,13 @@ void CO_epoll_processGtw(CO_epoll_gtw_t *epGtw, ep->epoll_new = false; } + else if ((ep->ev.events & (EPOLLERR | EPOLLHUP)) != 0) { + log_printf(LOG_DEBUG, DBG_GENERAL, + "socket error or hangup, event=", ep->ev.events); + if (close(epGtw->gtwa_fd) < 0) { + log_printf(LOG_CRIT, DBG_ERRNO, "close(gtwa_fd, hangup)"); + } + } } /* if (ep->epoll_new) */ /* if socket connection is established, verify timeout */ diff --git a/socketCAN/CO_main_basic.c b/socketCAN/CO_main_basic.c index 2685c18..4e42e83 100644 --- a/socketCAN/CO_main_basic.c +++ b/socketCAN/CO_main_basic.c @@ -549,10 +549,10 @@ int main (int argc, char *argv[]) { #ifdef CO_SINGLE_THREAD CO_epoll_processRT(&epMain, CO, false); #endif - CO_epoll_processMain(&epMain, CO, &reset); #if (CO_CONFIG_GTW) & CO_CONFIG_GTW_ASCII CO_epoll_processGtw(&epGtw, CO, &epMain); #endif + CO_epoll_processMain(&epMain, CO, &reset); CO_epoll_processLast(&epMain); #ifdef CO_USE_APPLICATION