mirror of
https://github.com/gwenhael-le-moine/sway-patched-tray-menu.git
synced 2024-12-26 21:58:08 +01:00
swaybar: Correct handling of SIGTERM.
Swaybar did not correctly handle the SIGTERM sent from sway when exiting, ultimately leaving the child status_command behind. This should correctly handle the SIGTERM signal and terminate the status_command. Fix #386
This commit is contained in:
parent
fc71c6303c
commit
5c8a3afff9
1 changed files with 22 additions and 8 deletions
|
@ -5,6 +5,7 @@
|
|||
#include <stdbool.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/select.h>
|
||||
#include <sys/wait.h>
|
||||
#include <errno.h>
|
||||
#include <json-c/json.h>
|
||||
#include <sys/un.h>
|
||||
|
@ -87,7 +88,7 @@ struct colors colors = {
|
|||
},
|
||||
};
|
||||
|
||||
void sway_terminate(void) {
|
||||
void swaybar_teardown() {
|
||||
window_teardown(window);
|
||||
if (registry) {
|
||||
registry_teardown(registry);
|
||||
|
@ -99,16 +100,31 @@ void sway_terminate(void) {
|
|||
|
||||
if (pid) {
|
||||
// terminate status_command process
|
||||
kill(pid, SIGTERM);
|
||||
int ret = kill(pid, SIGTERM);
|
||||
if (ret != 0) {
|
||||
sway_log(L_ERROR, "Unable to terminate status_command [pid: %d]", pid);
|
||||
} else {
|
||||
int status;
|
||||
waitpid(pid, &status, 0);
|
||||
}
|
||||
}
|
||||
|
||||
if (pipefd[0]) {
|
||||
close(pipefd[0]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void sway_terminate(void) {
|
||||
swaybar_teardown();
|
||||
exit(EXIT_FAILURE);
|
||||
}
|
||||
|
||||
void sig_handler(int signal) {
|
||||
swaybar_teardown();
|
||||
exit(0);
|
||||
}
|
||||
|
||||
void cairo_set_source_u32(cairo_t *cairo, uint32_t color) {
|
||||
cairo_set_source_rgba(cairo,
|
||||
((color & 0xFF000000) >> 24) / 256.0,
|
||||
|
@ -525,14 +541,12 @@ int main(int argc, char **argv) {
|
|||
line[0] = '\0';
|
||||
}
|
||||
|
||||
signal(SIGTERM, sig_handler);
|
||||
|
||||
poll_for_update();
|
||||
|
||||
window_teardown(window);
|
||||
registry_teardown(registry);
|
||||
fclose(command);
|
||||
// terminate status_command process
|
||||
kill(pid, SIGTERM);
|
||||
close(pipefd[0]);
|
||||
// gracefully shutdown swaybar and status_command
|
||||
swaybar_teardown();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue