From a6148e742090e1c0ec965fb5f91abf6c7fc2a29c Mon Sep 17 00:00:00 2001 From: Olivier Dion <olivier.dion@savoirfairelinux.com> Date: Fri, 16 Sep 2022 09:34:09 -0400 Subject: [PATCH] agent: Remove AGENT_ASSERT in favor of Guile exception Instead of crashing the agent every time there's an error, just throw an exception that can be handled by the user. Change-Id: I18ac929e54b9cda6485754ccd52325db7dff66d9 --- test/agent/src/bindings/bindings.cpp | 4 ---- test/agent/src/bindings/signal.cpp | 4 +++- test/agent/src/main.cpp | 4 +++- test/agent/src/utils.h | 26 +++++--------------------- 4 files changed, 11 insertions(+), 27 deletions(-) diff --git a/test/agent/src/bindings/bindings.cpp b/test/agent/src/bindings/bindings.cpp index 6fc36ee44e..6ba1e926fa 100644 --- a/test/agent/src/bindings/bindings.cpp +++ b/test/agent/src/bindings/bindings.cpp @@ -68,10 +68,6 @@ install_scheme_primitives() void define_primitive(const char* name, int req, int opt, int rst, void* func) { - AGENT_ASSERT(req + opt + rst <= 10, "Primitive binding `%s` has too many argument", name); - - AGENT_ASSERT(0 == rst or 1 == rst, "Rest argument for binding `%s` must be 0 or 1", name); - scm_c_define_gsubr(name, req, opt, rst, func); scm_c_export(name, NULL); } diff --git a/test/agent/src/bindings/signal.cpp b/test/agent/src/bindings/signal.cpp index 50557fb0c5..d71bb0efca 100644 --- a/test/agent/src/bindings/signal.cpp +++ b/test/agent/src/bindings/signal.cpp @@ -128,7 +128,9 @@ on_signal_binding(SCM signal_sym, SCM handler_proc) std::vector<SCM>* callbacks; std::mutex* mutex; - AGENT_ASSERT(scm_is_true(scm_procedure_p(handler_proc)), "handler_proc must be a procedure"); + if (scm_is_false(scm_procedure_p(handler_proc))) { + scm_wrong_type_arg_msg("on_signal_binding", 0, handler_proc, "procedure"); + } handler_pair = scm_assq_ref(signal_alist, signal_sym); diff --git a/test/agent/src/main.cpp b/test/agent/src/main.cpp index 74984a221b..adf4c63124 100644 --- a/test/agent/src/main.cpp +++ b/test/agent/src/main.cpp @@ -86,7 +86,9 @@ main(int argc, char* argv[]) /* NOTE! It's very important to initialize the daemon before entering Guile!!! */ DRing::init(DRing::InitFlag(DRing::DRING_FLAG_DEBUG)); - AGENT_ASSERT(DRing::start(""), "Failed to start daemon"); + if (not DRing::start("")) { + scm_misc_error("Dring::start", NULL, 0); + } /* Entering guile context - This never returns */ scm_with_guile(main_in_guile, (void*)&args); diff --git a/test/agent/src/utils.h b/test/agent/src/utils.h index ebcbec36c7..c7db34651a 100644 --- a/test/agent/src/utils.h +++ b/test/agent/src/utils.h @@ -22,15 +22,6 @@ #include "logger.h" -#define AGENT_ERR(FMT, ARGS...) JAMI_ERR("AGENT: " FMT, ##ARGS) -#define AGENT_INFO(FMT, ARGS...) JAMI_INFO("AGENT: " FMT, ##ARGS) -#define AGENT_DBG(FMT, ARGS...) JAMI_DBG("AGENT: " FMT, ##ARGS) -#define AGENT_ASSERT(COND, MSG, ARGS...) \ - if (not(COND)) { \ - AGENT_ERR(MSG, ##ARGS); \ - exit(1); \ - } - static inline SCM to_guile(bool b) { @@ -93,8 +84,9 @@ template<typename... Args> static inline SCM apply_to_guile(SCM body_proc, Args... args) { - AGENT_ASSERT(scm_is_true(scm_procedure_p(body_proc)), - "body_proc must be a procedure"); + if (scm_is_false(scm_procedure_p(body_proc))) { + scm_wrong_type_arg_msg("apply_to_guile", 0, body_proc, "procedure"); + } SCM arglst = pack_to_guile(args...); @@ -118,16 +110,8 @@ struct from_guile template<typename Pred> void ensure_type(const char* msg, Pred&& pred) { - if (!pred(value)) { - jami::Logger::log(LOG_ERR, - file, - line, - false, - "[GUILE] For expression `%s`: " - "Scheme value must be of type %s\n", - expr, - msg); - exit(EXIT_FAILURE); + if (not pred(value)) { + scm_wrong_type_arg_msg("from_guile", 0, value, msg); } } -- GitLab