diff --git a/include/villas/hook.hpp b/include/villas/hook.hpp index 2d1b95a97..22617dea2 100644 --- a/include/villas/hook.hpp +++ b/include/villas/hook.hpp @@ -79,18 +79,7 @@ public: virtual ~Hook(); virtual void parse(json_t *c); - virtual void prepare(); - - void prepare(struct vlist *sigs) - { - int ret; - - ret = signal_list_copy(&signals, sigs); - if (ret) - throw RuntimeError("Failed to copy signal list"); - - prepare(); - } + void prepare(struct vlist *sigs); /** Called whenever a hook is started; before threads are created. */ virtual void start() @@ -115,6 +104,9 @@ public: state = State::CHECKED; } + virtual void prepare() + { } + /** Called periodically. Period is set by global 'stats' option in the configuration file. */ virtual void periodic() { diff --git a/lib/hook.cpp b/lib/hook.cpp index 5c8829f14..cefaa95b2 100644 --- a/lib/hook.cpp +++ b/lib/hook.cpp @@ -65,10 +65,18 @@ Hook::~Hook() ret = signal_list_destroy(&signals); } -void Hook::prepare() +void Hook::prepare(struct vlist *sigs) { + int ret; + assert(state == State::CHECKED); + ret = signal_list_copy(&signals, sigs); + if (ret) + throw RuntimeError("Failed to copy signal list"); + + prepare(); + state = State::PREPARED; }