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 = tal(plugin, struct plugin_opt);
|
||||||
popt->value = talz(popt, struct plugin_opt_value);
|
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);
|
buffer + nametok->start);
|
||||||
if (json_tok_streq(buffer, typetok, "string")) {
|
if (json_tok_streq(buffer, typetok, "string")) {
|
||||||
popt->type = "string";
|
popt->type = "string";
|
||||||
|
@ -1,3 +1,4 @@
|
|||||||
|
#include <ccan/opt/opt.h>
|
||||||
#include <lightningd/options.h>
|
#include <lightningd/options.h>
|
||||||
#include <lightningd/plugin_control.h>
|
#include <lightningd/plugin_control.h>
|
||||||
#include <lightningd/plugin_hook.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);
|
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 *
|
static struct command_result *
|
||||||
plugin_dynamic_stop(struct command *cmd, const char *plugin_name)
|
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 "
|
"%s cannot be managed when "
|
||||||
"lightningd is up",
|
"lightningd is up",
|
||||||
plugin_name);
|
plugin_name);
|
||||||
plugin_hook_unregister_all(p);
|
clear_plugin(p, plugin_name);
|
||||||
plugin_kill(p, "%s stopped by lightningd via RPC", plugin_name);
|
|
||||||
tal_free(p);
|
|
||||||
response = json_stream_success(cmd);
|
response = json_stream_success(cmd);
|
||||||
if (deprecated_apis)
|
if (deprecated_apis)
|
||||||
json_add_string(response, "",
|
json_add_string(response, "",
|
||||||
|
@ -791,6 +791,7 @@ def test_rpc_command_hook(node_factory):
|
|||||||
l1.rpc.plugin_stop('rpc_command.py')
|
l1.rpc.plugin_stop('rpc_command.py')
|
||||||
|
|
||||||
|
|
||||||
|
@flaky
|
||||||
def test_libplugin(node_factory):
|
def test_libplugin(node_factory):
|
||||||
"""Sanity checks for plugins made with libplugin"""
|
"""Sanity checks for plugins made with libplugin"""
|
||||||
plugin = os.path.join(os.getcwd(), "tests/plugins/test_libplugin")
|
plugin = os.path.join(os.getcwd(), "tests/plugins/test_libplugin")
|
||||||
|
Loading…
Reference in New Issue
Block a user