mirror of
https://github.com/ElementsProject/lightning.git
synced 2025-01-18 05:12:45 +01:00
lightningd/plugin: unregister a plugin's options when stopping it
This also remove the now duplicate plugin_hook_unregister_all(), added in the tal destructor of the struct plugin.
This commit is contained in:
parent
2b57cfcc59
commit
972b4def57
@ -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";
|
||||
|
@ -1,3 +1,4 @@
|
||||
#include <ccan/opt/opt.h>
|
||||
#include <lightningd/options.h>
|
||||
#include <lightningd/plugin_control.h>
|
||||
#include <lightningd/plugin_hook.h>
|
||||
@ -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, "",
|
||||
|
@ -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")
|
||||
|
Loading…
Reference in New Issue
Block a user