From 86fe2d1697531bebdf5d0d83609e91ed4006f54b Mon Sep 17 00:00:00 2001 From: Dean Lee Date: Wed, 6 Jan 2021 12:19:53 +0800 Subject: [PATCH] common exit handler (#19661) * common signal handle * fix typo * rename to ExitHandler * remove include signal.h * remove include csignal * rename variable exit to v * rebase master --- selfdrive/boardd/boardd.cc | 11 +-------- selfdrive/camerad/cameras/camera_common.cc | 4 ++-- .../camerad/cameras/camera_frame_stream.cc | 4 ++-- selfdrive/camerad/cameras/camera_qcom.cc | 2 +- selfdrive/camerad/cameras/camera_qcom2.cc | 3 +-- selfdrive/camerad/cameras/camera_webcam.cc | 4 ++-- selfdrive/camerad/main.cc | 11 ++------- selfdrive/clocksd/clocksd.cc | 12 ++-------- selfdrive/common/util.h | 4 ---- selfdrive/common/utilpp.h | 23 ++++++++++++++++++- selfdrive/locationd/ubloxd_main.cc | 11 ++------- selfdrive/logcatd/logcatd_android.cc | 11 ++------- selfdrive/logcatd/logcatd_systemd.cc | 12 ++-------- selfdrive/loggerd/loggerd.cc | 11 +-------- selfdrive/modeld/dmonitoringmodeld.cc | 10 +------- selfdrive/modeld/modeld.cc | 10 +------- selfdrive/proclogd/proclogd.cc | 12 +--------- selfdrive/sensord/gpsd.cc | 11 ++------- selfdrive/sensord/sensors_qcom.cc | 10 ++------ selfdrive/sensord/sensors_qcom2.cc | 11 ++------- selfdrive/ui/android/ui.cc | 7 +----- 21 files changed, 52 insertions(+), 142 deletions(-) diff --git a/selfdrive/boardd/boardd.cc b/selfdrive/boardd/boardd.cc index b59ea876e8..4ee31547a4 100644 --- a/selfdrive/boardd/boardd.cc +++ b/selfdrive/boardd/boardd.cc @@ -1,7 +1,6 @@ #include #include #include -#include #include #include #include @@ -45,11 +44,7 @@ bool fake_send = false; bool connected_once = false; bool ignition = false; -volatile sig_atomic_t do_exit = 0; -static void set_do_exit(int sig) { - do_exit = 1; -} - +ExitHandler do_exit; struct tm get_time(){ time_t rawtime; time(&rawtime); @@ -525,10 +520,6 @@ int main() { err = set_core_affinity(3); LOG("set affinity returns %d", err); - // setup signal handlers - signal(SIGINT, (sighandler_t)set_do_exit); - signal(SIGTERM, (sighandler_t)set_do_exit); - // check the environment if (getenv("STARTED")) { spoofing_started = true; diff --git a/selfdrive/camerad/cameras/camera_common.cc b/selfdrive/camerad/cameras/camera_common.cc index 48038d0f3b..5c0f43ca76 100644 --- a/selfdrive/camerad/cameras/camera_common.cc +++ b/selfdrive/camerad/cameras/camera_common.cc @@ -1,6 +1,5 @@ #include #include -#include #include #include @@ -22,6 +21,7 @@ #include "common/params.h" #include "common/swaglog.h" #include "common/util.h" +#include "common/utilpp.h" #include "imgproc/utils.h" const int env_xmin = getenv("XMIN") ? atoi(getenv("XMIN")) : 0; @@ -349,7 +349,7 @@ void set_exposure_target(CameraState *c, const uint8_t *pix_ptr, int x_start, in camera_autoexposure(c, lum_med / 256.0); } -extern volatile sig_atomic_t do_exit; +extern ExitHandler do_exit; void *processing_thread(MultiCameraState *cameras, const char *tname, CameraState *cs, process_thread_cb callback) { diff --git a/selfdrive/camerad/cameras/camera_frame_stream.cc b/selfdrive/camerad/cameras/camera_frame_stream.cc index 84483fee56..7512acf683 100644 --- a/selfdrive/camerad/cameras/camera_frame_stream.cc +++ b/selfdrive/camerad/cameras/camera_frame_stream.cc @@ -3,12 +3,12 @@ #include #include #include -#include #include #include "messaging.hpp" #include "common/util.h" +#include "common/utilpp.h" #include "common/timing.h" #include "common/swaglog.h" #include "buffering.h" @@ -17,7 +17,7 @@ extern "C" { #include } -extern volatile sig_atomic_t do_exit; +extern ExitHandler do_exit; #define FRAME_WIDTH 1164 #define FRAME_HEIGHT 874 diff --git a/selfdrive/camerad/cameras/camera_qcom.cc b/selfdrive/camerad/cameras/camera_qcom.cc index 3da23250bf..38fb5554bd 100644 --- a/selfdrive/camerad/cameras/camera_qcom.cc +++ b/selfdrive/camerad/cameras/camera_qcom.cc @@ -34,7 +34,7 @@ #include "camera_qcom.h" -extern volatile sig_atomic_t do_exit; +extern ExitHandler do_exit; // global var for AE/AF ops std::atomic rear_exp{{0}}; diff --git a/selfdrive/camerad/cameras/camera_qcom2.cc b/selfdrive/camerad/cameras/camera_qcom2.cc index b81c21a93d..3d31a0eb68 100644 --- a/selfdrive/camerad/cameras/camera_qcom2.cc +++ b/selfdrive/camerad/cameras/camera_qcom2.cc @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include @@ -32,7 +31,7 @@ #define FRAME_STRIDE 2416 // for 10 bit output -extern volatile sig_atomic_t do_exit; +extern ExitHandler do_exit; // global var for AE ops std::atomic cam_exp[3] = {{{0}}}; diff --git a/selfdrive/camerad/cameras/camera_webcam.cc b/selfdrive/camerad/cameras/camera_webcam.cc index c28c6665ed..9b8fb70de7 100644 --- a/selfdrive/camerad/cameras/camera_webcam.cc +++ b/selfdrive/camerad/cameras/camera_webcam.cc @@ -3,10 +3,10 @@ #include #include #include -#include #include #include "common/util.h" +#include "common/utilpp.h" #include "common/timing.h" #include "common/clutil.h" #include "common/swaglog.h" @@ -20,7 +20,7 @@ #pragma clang diagnostic pop -extern volatile sig_atomic_t do_exit; +extern ExitHandler do_exit; #define FRAME_WIDTH 1164 #define FRAME_HEIGHT 874 diff --git a/selfdrive/camerad/main.cc b/selfdrive/camerad/main.cc index a1e362e8e0..07125889a8 100644 --- a/selfdrive/camerad/main.cc +++ b/selfdrive/camerad/main.cc @@ -1,6 +1,5 @@ #include #include -#include #include #include #include @@ -23,15 +22,12 @@ #include "common/params.h" #include "common/swaglog.h" #include "common/util.h" +#include "common/utilpp.h" #include "common/visionipc.h" #define MAX_CLIENTS 6 -volatile sig_atomic_t do_exit = 0; - -static void set_do_exit(int sig) { - do_exit = 1; -} +ExitHandler do_exit; struct VisionState; @@ -331,9 +327,6 @@ int main(int argc, char *argv[]) { set_core_affinity(6); #endif - signal(SIGINT, (sighandler_t)set_do_exit); - signal(SIGTERM, (sighandler_t)set_do_exit); - cl_device_id device_id = cl_get_device_id(CL_DEVICE_TYPE_DEFAULT); // TODO: do this for QCOM2 too diff --git a/selfdrive/clocksd/clocksd.cc b/selfdrive/clocksd/clocksd.cc index c59511a0fa..1f8986ed22 100644 --- a/selfdrive/clocksd/clocksd.cc +++ b/selfdrive/clocksd/clocksd.cc @@ -1,6 +1,5 @@ #include #include -#include #include #include #include @@ -18,12 +17,9 @@ #include "messaging.hpp" #include "common/timing.h" #include "common/util.h" +#include "common/utilpp.h" -volatile sig_atomic_t do_exit = 0; -static void set_do_exit(int sig) { - do_exit = 1; -} - +ExitHandler do_exit; #ifdef QCOM namespace { @@ -37,10 +33,6 @@ namespace { int main() { setpriority(PRIO_PROCESS, 0, -13); - - signal(SIGINT, (sighandler_t)set_do_exit); - signal(SIGTERM, (sighandler_t)set_do_exit); - PubMaster pm({"clocks"}); #ifndef __APPLE__ diff --git a/selfdrive/common/util.h b/selfdrive/common/util.h index c7a1dbfc88..aa2f8d5084 100644 --- a/selfdrive/common/util.h +++ b/selfdrive/common/util.h @@ -3,10 +3,6 @@ #include -#ifndef sighandler_t -typedef void (*sighandler_t)(int sig); -#endif - #ifndef __cplusplus #define min(a,b) \ diff --git a/selfdrive/common/utilpp.h b/selfdrive/common/utilpp.h index 61e9307f4e..574413a950 100644 --- a/selfdrive/common/utilpp.h +++ b/selfdrive/common/utilpp.h @@ -2,14 +2,19 @@ #include #include - +#include #include #include +#include #include #include #include #include +#ifndef sighandler_t +typedef void (*sighandler_t)(int sig); +#endif + namespace util { inline bool starts_with(std::string s, std::string prefix) { @@ -76,6 +81,22 @@ inline void sleep_for(const int milliseconds) { } } +class ExitHandler { +public: + ExitHandler() { + std::signal(SIGINT, (sighandler_t)set_do_exit); + std::signal(SIGTERM, (sighandler_t)set_do_exit); + }; + inline operator bool() { return do_exit; } + inline ExitHandler& operator=(bool v) { + do_exit = v; + return *this; + } +private: + static void set_do_exit(int sig) { do_exit = true; } + inline static std::atomic do_exit = false; +}; + struct unique_fd { unique_fd(int fd = -1) : fd_(fd) {} unique_fd& operator=(unique_fd&& uf) { diff --git a/selfdrive/locationd/ubloxd_main.cc b/selfdrive/locationd/ubloxd_main.cc index 54cfb27998..ec145e6bc8 100644 --- a/selfdrive/locationd/ubloxd_main.cc +++ b/selfdrive/locationd/ubloxd_main.cc @@ -1,7 +1,6 @@ #include #include #include -#include #include #include #include @@ -14,23 +13,17 @@ #include "messaging.hpp" #include "common/util.h" +#include "common/utilpp.h" #include "common/params.h" #include "common/swaglog.h" #include "common/timing.h" #include "ublox_msg.h" -volatile sig_atomic_t do_exit = 0; // Flag for process exit on signal - -void set_do_exit(int sig) { - do_exit = 1; -} - +ExitHandler do_exit; using namespace ublox; int ubloxd_main(poll_ubloxraw_msg_func poll_func, send_gps_event_func send_func) { LOGW("starting ubloxd"); - signal(SIGINT, (sighandler_t) set_do_exit); - signal(SIGTERM, (sighandler_t) set_do_exit); UbloxMsgParser parser; diff --git a/selfdrive/logcatd/logcatd_android.cc b/selfdrive/logcatd/logcatd_android.cc index 8f1cf7c82e..de79cec2a7 100644 --- a/selfdrive/logcatd/logcatd_android.cc +++ b/selfdrive/logcatd/logcatd_android.cc @@ -11,20 +11,13 @@ #include #include "common/timing.h" +#include "common/utilpp.h" #include "messaging.hpp" -volatile sig_atomic_t do_exit = 0; -static void set_do_exit(int sig) { - do_exit = 1; -} - +ExitHandler do_exit; int main() { int err; - // setup signal handlers - signal(SIGINT, (sighandler_t)set_do_exit); - signal(SIGTERM, (sighandler_t)set_do_exit); - struct logger_list *logger_list = android_logger_list_alloc(ANDROID_LOG_RDONLY | ANDROID_LOG_NONBLOCK, 0, 0); assert(logger_list); struct logger *main_logger = android_logger_open(logger_list, LOG_ID_MAIN); diff --git a/selfdrive/logcatd/logcatd_systemd.cc b/selfdrive/logcatd/logcatd_systemd.cc index efa84d3d7d..644fc2c5c5 100644 --- a/selfdrive/logcatd/logcatd_systemd.cc +++ b/selfdrive/logcatd/logcatd_systemd.cc @@ -8,20 +8,12 @@ #include #include "common/timing.h" +#include "common/utilpp.h" #include "messaging.hpp" -volatile sig_atomic_t do_exit = 0; - -static void set_do_exit(int sig) { - do_exit = 1; -} - +ExitHandler do_exit; int main(int argc, char *argv[]) { - // setup signal handlers - signal(SIGINT, (sighandler_t)set_do_exit); - signal(SIGTERM, (sighandler_t)set_do_exit); - PubMaster pm({"androidLog"}); sd_journal *journal; diff --git a/selfdrive/loggerd/loggerd.cc b/selfdrive/loggerd/loggerd.cc index fdf958018e..1678000e78 100644 --- a/selfdrive/loggerd/loggerd.cc +++ b/selfdrive/loggerd/loggerd.cc @@ -3,7 +3,6 @@ #include #include #include -#include #include #include #include @@ -120,11 +119,7 @@ double randrange(double a, double b) { return dist(gen); } - -volatile sig_atomic_t do_exit = 0; -static void set_do_exit(int sig) { - do_exit = 1; -} +ExitHandler do_exit; static bool file_exists(const std::string& fn) { std::ifstream f(fn); @@ -541,10 +536,6 @@ int main(int argc, char** argv) { clear_locks(); - signal(SIGINT, (sighandler_t)set_do_exit); - signal(SIGTERM, (sighandler_t)set_do_exit); - - typedef struct QlogState { int counter, freq; } QlogState; diff --git a/selfdrive/modeld/dmonitoringmodeld.cc b/selfdrive/modeld/dmonitoringmodeld.cc index 0b71127381..41d7d91b08 100644 --- a/selfdrive/modeld/dmonitoringmodeld.cc +++ b/selfdrive/modeld/dmonitoringmodeld.cc @@ -1,7 +1,6 @@ #include #include #include -#include #include #include @@ -17,19 +16,12 @@ #endif -volatile sig_atomic_t do_exit = 0; - -static void set_do_exit(int sig) { - do_exit = 1; -} +ExitHandler do_exit; int main(int argc, char **argv) { int err; setpriority(PRIO_PROCESS, 0, -15); - signal(SIGINT, (sighandler_t)set_do_exit); - signal(SIGTERM, (sighandler_t)set_do_exit); - PubMaster pm({"driverState"}); // init the models diff --git a/selfdrive/modeld/modeld.cc b/selfdrive/modeld/modeld.cc index 2614f6f4e5..40a9a2e8a3 100644 --- a/selfdrive/modeld/modeld.cc +++ b/selfdrive/modeld/modeld.cc @@ -1,6 +1,5 @@ #include #include -#include #include #include @@ -13,11 +12,7 @@ #include "models/driving.h" #include "messaging.hpp" -volatile sig_atomic_t do_exit = 0; -static void set_do_exit(int sig) { - do_exit = 1; -} - +ExitHandler do_exit; // globals bool run_model; mat3 cur_transform; @@ -103,9 +98,6 @@ int main(int argc, char **argv) { set_core_affinity(4); #endif - signal(SIGINT, (sighandler_t)set_do_exit); - signal(SIGTERM, (sighandler_t)set_do_exit); - pthread_mutex_init(&transform_lock, NULL); // start calibration thread diff --git a/selfdrive/proclogd/proclogd.cc b/selfdrive/proclogd/proclogd.cc index 968d35caf9..050c47ab2d 100644 --- a/selfdrive/proclogd/proclogd.cc +++ b/selfdrive/proclogd/proclogd.cc @@ -5,7 +5,6 @@ #include #include #include -#include #include #include #include @@ -20,15 +19,9 @@ #include "common/util.h" #include "common/utilpp.h" - -volatile sig_atomic_t do_exit = 0; +ExitHandler do_exit; namespace { - -static void set_do_exit(int sig) { - do_exit = 1; -} - struct ProcCache { std::string name; std::vector cmdline; @@ -38,9 +31,6 @@ struct ProcCache { } int main() { - signal(SIGINT, (sighandler_t)set_do_exit); - signal(SIGTERM, (sighandler_t)set_do_exit); - PubMaster publisher({"procLog"}); double jiffy = sysconf(_SC_CLK_TCK); diff --git a/selfdrive/sensord/gpsd.cc b/selfdrive/sensord/gpsd.cc index 1978a239c8..83ecbf34a7 100644 --- a/selfdrive/sensord/gpsd.cc +++ b/selfdrive/sensord/gpsd.cc @@ -1,7 +1,6 @@ #include #include #include -#include #include #include #include @@ -18,9 +17,10 @@ #include "messaging.hpp" #include "common/timing.h" +#include "common/utilpp.h" #include "common/swaglog.h" -volatile sig_atomic_t do_exit = 0; +ExitHandler do_exit; namespace { @@ -29,10 +29,6 @@ PubMaster *pm; const GpsInterface* gGpsInterface = NULL; const AGpsInterface* gAGpsInterface = NULL; -void set_do_exit(int sig) { - do_exit = 1; -} - void nmea_callback(GpsUtcTime timestamp, const char* nmea, int length) { uint64_t log_time_wall = nanos_since_epoch(); @@ -149,9 +145,6 @@ void gps_destroy() { int main() { setpriority(PRIO_PROCESS, 0, -13); - signal(SIGINT, (sighandler_t)set_do_exit); - signal(SIGTERM, (sighandler_t)set_do_exit); - gps_init(); while(!do_exit) pause(); diff --git a/selfdrive/sensord/sensors_qcom.cc b/selfdrive/sensord/sensors_qcom.cc index 16b7fc98bf..763826cf68 100644 --- a/selfdrive/sensord/sensors_qcom.cc +++ b/selfdrive/sensord/sensors_qcom.cc @@ -2,7 +2,6 @@ #include #include #include -#include #include #include #include @@ -19,6 +18,7 @@ #include "messaging.hpp" #include "common/timing.h" +#include "common/utilpp.h" #include "common/swaglog.h" // ACCELEROMETER_UNCALIBRATED is only in Android O @@ -32,15 +32,11 @@ #define SENSOR_PROXIMITY 6 #define SENSOR_LIGHT 7 -volatile sig_atomic_t do_exit = 0; +ExitHandler do_exit; volatile sig_atomic_t re_init_sensors = 0; namespace { -void set_do_exit(int sig) { - do_exit = 1; -} - void sigpipe_handler(int sig) { LOGE("SIGPIPE received"); re_init_sensors = true; @@ -224,8 +220,6 @@ void sensor_loop() { int main(int argc, char *argv[]) { setpriority(PRIO_PROCESS, 0, -13); - signal(SIGINT, (sighandler_t)set_do_exit); - signal(SIGTERM, (sighandler_t)set_do_exit); signal(SIGPIPE, (sighandler_t)sigpipe_handler); sensor_loop(); diff --git a/selfdrive/sensord/sensors_qcom2.cc b/selfdrive/sensord/sensors_qcom2.cc index 80d8b3093e..7fe8440300 100644 --- a/selfdrive/sensord/sensors_qcom2.cc +++ b/selfdrive/sensord/sensors_qcom2.cc @@ -1,5 +1,4 @@ #include -#include #include #include #include @@ -7,6 +6,7 @@ #include "messaging.hpp" #include "common/i2c.h" #include "common/timing.h" +#include "common/utilpp.h" #include "common/swaglog.h" #include "sensors/sensor.hpp" @@ -25,11 +25,7 @@ #define I2C_BUS_IMU 1 -volatile sig_atomic_t do_exit = 0; - -void set_do_exit(int sig) { - do_exit = 1; -} +ExitHandler do_exit; int sensor_loop() { I2CBus *i2c_bus_imu; @@ -98,8 +94,5 @@ int sensor_loop() { int main(int argc, char *argv[]) { setpriority(PRIO_PROCESS, 0, -13); - signal(SIGINT, set_do_exit); - signal(SIGTERM, set_do_exit); - return sensor_loop(); } diff --git a/selfdrive/ui/android/ui.cc b/selfdrive/ui/android/ui.cc index e6f28d2286..44a8d7cc5a 100644 --- a/selfdrive/ui/android/ui.cc +++ b/selfdrive/ui/android/ui.cc @@ -15,11 +15,7 @@ #include "paint.hpp" #include "android/sl_sound.hpp" -volatile sig_atomic_t do_exit = 0; -static void set_do_exit(int sig) { - do_exit = 1; -} - +ExitHandler do_exit; static void ui_set_brightness(UIState *s, int brightness) { static int last_brightness = -1; if (last_brightness != brightness && (s->awake || brightness == 0)) { @@ -114,7 +110,6 @@ static void update_offroad_layout_state(UIState *s, PubMaster *pm) { int main(int argc, char* argv[]) { setpriority(PRIO_PROCESS, 0, -14); - signal(SIGINT, (sighandler_t)set_do_exit); SLSound sound; UIState uistate = {};