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; }