diff --git a/lightningd/plugin.c b/lightningd/plugin.c index 6d0a36fc6..aefa5a8f2 100644 --- a/lightningd/plugin.c +++ b/lightningd/plugin.c @@ -487,7 +487,7 @@ static bool plugin_opt_add(struct plugin *plugin, const char *buffer, popt = tal(plugin, struct plugin_opt); popt->value = talz(popt, struct plugin_opt_value); - popt->name = tal_fmt(plugin, "--%.*s", nametok->end - nametok->start, + popt->name = tal_fmt(popt, "--%.*s", nametok->end - nametok->start, buffer + nametok->start); if (json_tok_streq(buffer, typetok, "string")) { popt->type = "string"; diff --git a/lightningd/plugin_control.c b/lightningd/plugin_control.c index 18d4f2611..a5b83c8e9 100644 --- a/lightningd/plugin_control.c +++ b/lightningd/plugin_control.c @@ -1,3 +1,4 @@ +#include #include #include #include @@ -196,6 +197,18 @@ plugin_dynamic_startdir(struct command *cmd, const char *dir_path) return command_still_pending(cmd); } +static void clear_plugin(struct plugin *p, const char *name) +{ + struct plugin_opt *opt; + + list_for_each(&p->plugin_opts, opt, list) + if (!opt_unregister(opt->name)) + fatal("Could not unregister %s from plugin %s", + opt->name, name); + plugin_kill(p, "%s stopped by lightningd via RPC", name); + tal_free(p); +} + static struct command_result * plugin_dynamic_stop(struct command *cmd, const char *plugin_name) { @@ -209,9 +222,7 @@ plugin_dynamic_stop(struct command *cmd, const char *plugin_name) "%s cannot be managed when " "lightningd is up", plugin_name); - plugin_hook_unregister_all(p); - plugin_kill(p, "%s stopped by lightningd via RPC", plugin_name); - tal_free(p); + clear_plugin(p, plugin_name); response = json_stream_success(cmd); if (deprecated_apis) json_add_string(response, "", diff --git a/tests/test_plugin.py b/tests/test_plugin.py index 7c1850f4d..53a4eb233 100644 --- a/tests/test_plugin.py +++ b/tests/test_plugin.py @@ -791,6 +791,7 @@ def test_rpc_command_hook(node_factory): l1.rpc.plugin_stop('rpc_command.py') +@flaky def test_libplugin(node_factory): """Sanity checks for plugins made with libplugin""" plugin = os.path.join(os.getcwd(), "tests/plugins/test_libplugin")