Skip to content

Commit 6613d66

Browse files
authored
Merge pull request neutrinolabs#3481 from matt335672/chansrv_race_condition
Remove SIGTERM race in chansrv
2 parents eac6a71 + 343e84a commit 6613d66

File tree

1 file changed

+14
-9
lines changed

1 file changed

+14
-9
lines changed

sesman/chansrv/chansrv.c

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1934,7 +1934,13 @@ main(int argc, char **argv)
19341934
return 1;
19351935
}
19361936

1937-
/* set up signal handler */
1937+
/* set up signal objects */
1938+
g_snprintf(text, sizeof(text), "xrdp_chansrv_%8.8x_main_term", pid);
1939+
g_term_event = g_create_wait_obj(text);
1940+
g_snprintf(text, sizeof(text), "xrdp_chansrv_%8.8x_sigchld", pid);
1941+
g_sigchld_event = g_create_wait_obj(text);
1942+
1943+
/* set up signal handlers */
19381944
g_signal_terminate(term_signal_handler); /* SIGTERM */
19391945
g_signal_user_interrupt(term_signal_handler); /* SIGINT */
19401946
g_signal_pipe(nil_signal_handler); /* SIGPIPE */
@@ -1945,18 +1951,17 @@ main(int argc, char **argv)
19451951
xcommon_set_x_server_fatal_handler(x_server_fatal_handler);
19461952

19471953
LOG_DEVEL(LOG_LEVEL_INFO, "main: DISPLAY env var set to %s", display_text);
1948-
19491954
LOG_DEVEL(LOG_LEVEL_INFO, "main: using DISPLAY %d", g_display_num);
1950-
g_snprintf(text, 255, "xrdp_chansrv_%8.8x_main_term", pid);
1951-
g_term_event = g_create_wait_obj(text);
1952-
g_snprintf(text, 255, "xrdp_chansrv_%8.8x_sigchld", pid);
1953-
g_sigchld_event = g_create_wait_obj(text);
1954-
g_snprintf(text, 255, "xrdp_chansrv_%8.8x_thread_done", pid);
1955-
g_thread_done_event = g_create_wait_obj(text);
1956-
g_snprintf(text, 255, "xrdp_chansrv_%8.8x_exec", pid);
1955+
1956+
/* Set up RAIL sync objects */
1957+
g_snprintf(text, sizeof(text), "xrdp_chansrv_%8.8x_exec", pid);
19571958
g_exec_event = g_create_wait_obj(text);
19581959
g_exec_mutex = tc_mutex_create();
19591960
g_exec_sem = tc_sem_create(0);
1961+
1962+
/* Set up the channel thread */
1963+
g_snprintf(text, sizeof(text), "xrdp_chansrv_%8.8x_thread_done", pid);
1964+
g_thread_done_event = g_create_wait_obj(text);
19601965
tc_thread_create(channel_thread_loop, 0);
19611966

19621967
while (g_term_event > 0 && !g_is_wait_obj_set(g_term_event))

0 commit comments

Comments
 (0)