From 85e710d3d54afe2dbb5f76fd4bca9c49dd5c6a97 Mon Sep 17 00:00:00 2001 From: Alexander Rosenberg Date: Sun, 4 Sep 2022 14:09:57 -0700 Subject: [PATCH] Fix bug with XSetRoot deadlock --- main.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/main.c b/main.c index d3be57d..dc357b1 100644 --- a/main.c +++ b/main.c @@ -316,7 +316,8 @@ static arg_action interpret_flag_arg(const char *arg, const char *next) { interpret_flag_character(*arg, next, return_action); if (current_action == ARG_ACTION_STOP) { return ARG_ACTION_STOP; - } else if (current_action == ARG_ACTION_CONTINUE && return_action != ARG_ACTION_SKIP) { + } else if (current_action == ARG_ACTION_CONTINUE && + return_action != ARG_ACTION_SKIP) { return_action = ARG_ACTION_CONTINUE; } else if (current_action == ARG_ACTION_SKIP) { return_action = ARG_ACTION_SKIP; @@ -563,7 +564,6 @@ static void do_initial_refresh() { } static void refresh_module(struct BarModule *module) { - sigprocmask(SIG_BLOCK, &global_real_time_mask, NULL); if (module->last_text) { qtb_free(module->last_text); module->last_text = NULL; @@ -574,7 +574,6 @@ static void refresh_module(struct BarModule *module) { } else { module->last_text_length = 0; } - sigprocmask(SIG_UNBLOCK, &global_real_time_mask, NULL); } /* return TRUE if the module was refreshed, FALSE otherwise */ @@ -595,6 +594,7 @@ static int check_and_refresh_module(struct BarModule *module, static void module_poll_loop() { while (TRUE) { + sigprocmask(SIG_BLOCK, &global_real_time_mask, NULL); struct timespec current_time; clock_gettime(global_cpu_clock_id, ¤t_time); unsigned long current_time_ms = timespec_to_miliseconds(¤t_time); @@ -616,6 +616,7 @@ static void module_poll_loop() { timespec_diff(¤t_time, &end_time, &span_time); struct timespec final_sleep_time; timespec_diff(&span_time, &global_refresh_time, &final_sleep_time); + sigprocmask(SIG_UNBLOCK, &global_real_time_mask, NULL); nanosleep(&final_sleep_time, NULL); } } @@ -629,17 +630,17 @@ static void rewrite_bar() { size_t i; for (i = 0; i < global_module_count - 1; ++i) { if (modules[i].last_text) { - bar_text = qtb_realloc( - bar_text, (bar_length += modules[i].last_text_length + - global_seperator_length)); + bar_text = qtb_realloc(bar_text, + (bar_length += modules[i].last_text_length + + global_seperator_length)); strcat(bar_text, modules[i].last_text); strcat(bar_text, SEPERATOR_TEXT); } } struct BarModule *last_module = &modules[global_module_count - 1]; if (last_module->last_text) { - bar_text = qtb_realloc( - bar_text, (bar_length += last_module->last_text_length)); + bar_text = qtb_realloc(bar_text, + (bar_length += last_module->last_text_length)); strcat(bar_text, last_module->last_text); } strcat(bar_text, SUFFIX_TEXT);