From d27570168fd6d5a2144553002c8082ae626b7e84 Mon Sep 17 00:00:00 2001 From: Jeremy Kerr Date: Mon, 2 Dec 2013 11:20:04 +0800 Subject: discover/device-handler: Ensure we free unresolved boot options on remove When we remove a device, some options may still be unresolved, and so won't be deallocated through freeing the device. This chagne explicitly removes & frees any currently-unresolved options for this device. Signed-off-by: Jeremy Kerr --- test/parser/test-unresolved-remove.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 test/parser/test-unresolved-remove.c (limited to 'test/parser/test-unresolved-remove.c') diff --git a/test/parser/test-unresolved-remove.c b/test/parser/test-unresolved-remove.c new file mode 100644 index 0000000..7e0a306 --- /dev/null +++ b/test/parser/test-unresolved-remove.c @@ -0,0 +1,35 @@ + +#include "parser-test.h" + +#if 0 /* PARSER_EMBEDDED_CONFIG */ +menuentry 'Linux' { + search --set=root ec50d321-aab1-4335-8a87-aa8fadd80a09 + linux /vmlinux +} +#endif + +void run_test(struct parser_test *test) +{ + struct discover_boot_option *opt; + struct discover_context *ctx; + struct discover_device *dev; + + test_read_conf_embedded(test, "/grub.cfg"); + + test_run_parser(test, "grub2"); + + ctx = test->ctx; + + check_boot_option_count(ctx, 1); + opt = get_boot_option(ctx, 0); + check_name(opt, "Linux"); + check_unresolved_resource(opt->boot_image); + + test_remove_device(test, test->ctx->device); + + dev = test_create_device(test, "external"); + dev->uuid = "ec50d321-aab1-4335-8a87-aa8fadd80a09"; + test_hotplug_device(test, dev); + + check_boot_option_count(ctx, 0); +} -- cgit v1.2.1