From 5114d1ee640de534b17a576bfe25edce304eea2c Mon Sep 17 00:00:00 2001 From: Koichiro IWAO Date: Thu, 17 Dec 2020 14:26:27 +0900 Subject: [PATCH] sesman: address the issue of socket file leftovers There are two points. Make sure cleanup files happen after chansrv and Xserver exit. If these child processes lock socket files, the deletion might fail. Usually, cleanup of xorgxrdp related socket files is handled by xorgxrdp. Just in case it failed, perform cleanup also in sesman. Fixes #1740. Thanks to @matt335672. Sponsored by: Cybertrust Japan Sponsored by: HAW International --- sesman/session.c | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/sesman/session.c b/sesman/session.c index c0b65954..eb1d52cb 100644 --- a/sesman/session.c +++ b/sesman/session.c @@ -820,6 +820,11 @@ session_start_fork(tbus data, tui8 type, struct SCP_CONNECTION *c, auth_end(data); g_sigterm(display_pid); g_sigterm(chansrv_pid); + + /* make sure socket cleanup happen after child process exit */ + g_waitpid(display_pid); + g_waitpid(chansrv_pid); + cleanup_sockets(display); g_deinit(); g_exit(0); @@ -1199,6 +1204,33 @@ cleanup_sockets(int display) } } + /* the following files should be deleted by xorgxrdp + * but just in case the deletion failed */ + + g_snprintf(file, 255, XRDP_X11RDP_STR, display); + if (g_file_exist(file)) + { + LOG(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file); + if (g_file_delete(file) == 0) + { + LOG(LOG_LEVEL_DEBUG, + "cleanup_sockets: failed to delete %s", file); + error++; + } + } + + g_snprintf(file, 255, XRDP_DISCONNECT_STR, display); + if (g_file_exist(file)) + { + LOG(LOG_LEVEL_DEBUG, "cleanup_sockets: deleting %s", file); + if (g_file_delete(file) == 0) + { + LOG(LOG_LEVEL_DEBUG, + "cleanup_sockets: failed to delete %s", file); + error++; + } + } + return error; }