diff --git a/test/agent/src/bindings/signal.cpp b/test/agent/src/bindings/signal.cpp index 85e044a87a33bc6daa8aa211581543c6b62a1926..eb5db8d55723779e8840bd152369fc9b64b8cabf 100644 --- a/test/agent/src/bindings/signal.cpp +++ b/test/agent/src/bindings/signal.cpp @@ -83,6 +83,8 @@ public: SCM ret = apply_to_guile(cb, args...); if (scm_is_true(ret)) { to_keep.emplace_back(cb); + } else { + scm_gc_unprotect_object(cb); } } @@ -138,6 +140,7 @@ on_signal_binding(SCM signal_sym, SCM handler_proc) mutex = static_cast<std::mutex*>(scm_to_pointer(scm_cdr(handler_pair))); std::unique_lock lck(*mutex); + scm_gc_protect_object(handler_proc); callbacks->push_back(handler_proc); return SCM_UNDEFINED;