Fix bug with XSetRoot deadlock
This commit is contained in:
parent
b7ed7e230a
commit
85e710d3d5
17
main.c
17
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);
|
||||
|
Reference in New Issue
Block a user