discover_server_notify_boot_option_add(handler->server,
opt->option);
} else {
- list_add(&handler->unresolved_boot_options, &opt->list);
- talloc_steal(handler, opt);
+ if (!opt->source->resolve_resource) {
+ pb_log("parser %s gave us an unresolved "
+ "resource (%s), but no way to "
+ "resolve it\n",
+ opt->source->name, opt->option->id);
+ talloc_free(opt);
+ } else {
+ pb_log("boot option %s is unresolved, "
+ "adding to queue\n",
+ opt->option->id);
+ list_add(&handler->unresolved_boot_options,
+ &opt->list);
+ talloc_steal(handler, opt);
+ }
}
}
}
struct discover_boot_option *boot_option)
{
boot_option->source = ctx->parser;
- list_add(&ctx->boot_options, &boot_option->list);
+ list_add_tail(&ctx->boot_options, &boot_option->list);
talloc_steal(ctx, boot_option);
}
return NULL;
}
+static void boot_status(void *arg, struct boot_status *status)
+{
+ struct device_handler *handler = arg;
+
+ discover_server_notify_boot_status(handler->server, status);
+}
+
void device_handler_boot(struct device_handler *handler,
struct boot_command *cmd)
{
opt = find_boot_option_by_id(handler, cmd->option_id);
- boot(handler, opt, cmd, handler->dry_run);
+ boot(handler, opt, cmd, handler->dry_run, boot_status, handler);
}