aboutsummaryrefslogtreecommitdiff
path: root/harness/src/plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'harness/src/plugin.c')
-rw-r--r--harness/src/plugin.c25
1 files changed, 22 insertions, 3 deletions
diff --git a/harness/src/plugin.c b/harness/src/plugin.c
index f1cc361..1d7c992 100644
--- a/harness/src/plugin.c
+++ b/harness/src/plugin.c
@@ -86,11 +86,29 @@ void do_request_log(void *plugv, const char* str)
size_t n = plugin->n_requested_actions++;
if (n < 8) {
plugin->requested_actions[n].action = plugin_do_log;
- plugin->requested_actions[n].arg = strdup(str);
+ plugin->requested_actions[n].str_arg = strdup(str);
plugin->requested_actions[n].arg_dtor = free;
}
}
+static int plugin_do_exit(void* plugv, int ec)
+{
+ exit(ec);
+ return 0;
+}
+
+void do_request_exit(void *plugv, int ec)
+{
+ plugin_t *plugin = plugv;
+
+ size_t n = plugin->n_requested_actions++;
+ if (n < 8) {
+ plugin->requested_actions[n].action = (int(*)(plugin_t*,void*)) plugin_do_exit;
+ plugin->requested_actions[n].int_arg = ec;
+ plugin->requested_actions[n].arg_dtor = NULL;
+ }
+}
+
static int load_plugin_from_file_(int argc, char **argv, const char *filename,
plugin_t *plugin)
{
@@ -117,6 +135,7 @@ static int load_plugin_from_file_(int argc, char **argv, const char *filename,
plugin->foreign_intf.ctx = plugin;
plugin->foreign_intf.request_hot_reload = do_request_hot_reload;
plugin->foreign_intf.do_log = do_request_log;
+ plugin->foreign_intf.request_exit = do_request_exit;
plugin->plugin_load(plugin->argc, plugin->argv, &plugin->foreign_intf);
end:
@@ -206,9 +225,9 @@ void plugin_run_requested_actions(plugin_t *plugin)
size_t i;
for (i = 0; i < n_requested_actions; ++i) {
- requested_actions[i].action(plugin, requested_actions[i].arg);
+ requested_actions[i].action(plugin, requested_actions[i].str_arg);
if (requested_actions[i].arg_dtor) {
- requested_actions[i].arg_dtor(requested_actions[i].arg);
+ requested_actions[i].arg_dtor(requested_actions[i].ptr_arg);
}
}
}