From c1cda1553ae07409dd1e14092e83ae704e5154cb Mon Sep 17 00:00:00 2001 From: kennypm Date: Sat, 12 Feb 2022 01:51:11 -0500 Subject: [PATCH] fix callbacks --- include/modules/jack.hpp | 6 ++++++ src/modules/jack.cpp | 10 +++++++--- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/include/modules/jack.hpp b/include/modules/jack.hpp index df02096..2433a43 100644 --- a/include/modules/jack.hpp +++ b/include/modules/jack.hpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include "ALabel.hpp" #include "util/sleeper_thread.hpp" @@ -18,6 +19,7 @@ class JACK : public ALabel { jack_client_t* client_; unsigned int xruns_; std::string state_; + pthread_t jack_thread_; private: std::string JACKState(); @@ -27,3 +29,7 @@ class JACK : public ALabel { }; } // namespace waybar::modules + +int bufSizeCallback(unsigned int size, void *obj); +int xrunCallback(void *obj); +void shutdownCallback(void *obj); diff --git a/src/modules/jack.cpp b/src/modules/jack.cpp index 08d1414..ab43c33 100644 --- a/src/modules/jack.cpp +++ b/src/modules/jack.cpp @@ -1,6 +1,6 @@ #include "modules/jack.hpp" -extern "C" { +//extern "C" { int bufSizeCallback(unsigned int size, void *obj) { waybar::modules::JACK* x = (waybar::modules::JACK*)obj; @@ -17,12 +17,13 @@ extern "C" { void shutdownCallback(void *obj) { waybar::modules::JACK* x = (waybar::modules::JACK*)obj; + pthread_cancel(x->jack_thread_); x->client_ = NULL; x->state_ = "disconnected"; x->xruns_ = 0; } -} +//} waybar::modules::JACK::JACK(const std::string& id, const Json::Value& config) : ALabel(config, "jack", id, "{load}%", 1) { @@ -57,8 +58,11 @@ std::string waybar::modules::JACK::JACKState() { return "disconnected"; client_ = jack_client_open("waybar", JackNoStartServer, NULL); - if (client_) { + jack_thread_ = jack_client_thread_id(client_); + if(config_["realtime"].isBool() && !config_["realtime"].asBool()) + jack_drop_real_time_scheduling(jack_thread_); + bufsize_ = jack_get_buffer_size(client_); samplerate_ = jack_get_sample_rate(client_); jack_set_buffer_size_callback(client_, bufSizeCallback, this);