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
This commit is contained in:
Olivier Dion
2022-09-16 09:34:09 -04:00
committed by Adrien Béraud
parent 3eb7416985
commit a6148e7420
4 changed files with 11 additions and 27 deletions

View File

@ -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);
}

View File

@ -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);

View File

@ -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);

View File

@ -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);
}
}