]> git.ozlabs.org Git - petitboot/blobdiff - discover/device-handler.c
discover/device-handler: Ensure we free unresolved boot options on remove
[petitboot] / discover / device-handler.c
index 9033c4fdfb8d3162417ed332e415b6446d33df8e..d3256fa58321ee910cb546d282ff5f05ad0de4b9 100644 (file)
@@ -279,6 +279,7 @@ struct device_handler *device_handler_init(struct discover_server *server,
 void device_handler_remove(struct device_handler *handler,
                struct discover_device *device)
 {
 void device_handler_remove(struct device_handler *handler,
                struct discover_device *device)
 {
+       struct discover_boot_option *opt, *tmp;
        unsigned int i;
 
        for (i = 0; i < handler->n_devices; i++)
        unsigned int i;
 
        for (i = 0; i < handler->n_devices; i++)
@@ -290,6 +291,16 @@ void device_handler_remove(struct device_handler *handler,
                return;
        }
 
                return;
        }
 
+       /* Free any unresolved options, as they're currently allocated
+        * against the handler */
+       list_for_each_entry_safe(&handler->unresolved_boot_options,
+                       opt, tmp, list) {
+               if (opt->device != device)
+                       continue;
+               list_remove(&opt->list);
+               talloc_free(opt);
+       }
+
        handler->n_devices--;
        memmove(&handler->devices[i], &handler->devices[i + 1],
                (handler->n_devices - i) * sizeof(handler->devices[0]));
        handler->n_devices--;
        memmove(&handler->devices[i], &handler->devices[i + 1],
                (handler->n_devices - i) * sizeof(handler->devices[0]));