From 2ee1d099181d904a120b380624bf7a99f34de0c7 Mon Sep 17 00:00:00 2001 From: Noah Swerhun Date: Tue, 14 Mar 2023 20:00:08 -0500 Subject: [PATCH] implemented SignalRouter; signal functionality complete --- easyconf-lemonbar/Module.py | 21 +++++++++------------ easyconf-lemonbar/SignalRouter.py | 18 +++++++++--------- easyconf-lemonbar/main.py | 2 ++ 3 files changed, 20 insertions(+), 21 deletions(-) diff --git a/easyconf-lemonbar/Module.py b/easyconf-lemonbar/Module.py index 83da8e2..537e58c 100644 --- a/easyconf-lemonbar/Module.py +++ b/easyconf-lemonbar/Module.py @@ -1,7 +1,7 @@ from threading import Thread from subprocess import run from time import sleep -from signal import SIGRTMIN, SIGUSR1, sigtimedwait +from signal import SIGRTMIN, SIGUSR1, sigtimedwait, sigwait class Module: # All text that the module contains. Will be re-generated every time the @@ -105,18 +105,15 @@ class Module: break sleep(self.refresh) else: - sig = sigtimedwait([self.signal], self.refresh) - if sig: - print("Recieved signal " + str(sig)) - continue + if self.refresh == 0: + sigwait([self.signal]) + else: + sig = sigtimedwait([self.signal], self.refresh) + if sig: + print("Recieved signal " + str(sig)) + continue def start_thread(self): thread = Thread(target=self.thread_callback) thread.start() - self.__ident = thread.ident - - def get_ident(self): - if self.__ident: - return self.__ident - else: - return None + self.ident = thread.ident diff --git a/easyconf-lemonbar/SignalRouter.py b/easyconf-lemonbar/SignalRouter.py index d9a975e..148c0ba 100644 --- a/easyconf-lemonbar/SignalRouter.py +++ b/easyconf-lemonbar/SignalRouter.py @@ -1,13 +1,13 @@ -from signal import SIGRTMIN, SIGTERM, pthread_kill, signal -from sys import exit -from threading import enumerate as th_enumerate +from signal import pthread_kill +from signal import signal as sigsignal class SignalRouter: - def term(self, sig, frame): - print("Term signal received! Safely closing threads!") - for thread in th_enumerate(): - pthread_kill(thread.ident, SIGTERM) + def __route_signal(self, signal, frame): + pthread_kill(self.signal_thread_dictionary[signal], signal) def __init__(self): - signal(SIGTERM, self.term) - signal(SIGRTMIN, self.rtmin) + self.signal_thread_dictionary = {} + + def register_signal_thread(self, signal, thread_ident): + self.signal_thread_dictionary[signal] = thread_ident + sigsignal(signal, self.__route_signal) diff --git a/easyconf-lemonbar/main.py b/easyconf-lemonbar/main.py index 01f944c..dbde538 100644 --- a/easyconf-lemonbar/main.py +++ b/easyconf-lemonbar/main.py @@ -21,6 +21,8 @@ def main(): module = Module(module_config, padding, bar) bar.add_module(module) module.start_thread() + if module.signal: + signal_router.register_signal_thread(module.signal, module.ident)