diff --git a/ratbagd/ratbagd.c b/ratbagd/ratbagd.c index 9c831ea9..ab32ff42 100644 --- a/ratbagd/ratbagd.c +++ b/ratbagd/ratbagd.c @@ -486,12 +486,12 @@ static const struct ratbag_interface ratbagd_lib_interface = { static struct ratbagd *ratbagd_free(struct ratbagd *ctx) { - struct ratbagd_device *device; + struct ratbagd_device *device, *tmp; if (!ctx) return NULL; - RATBAGD_DEVICE_FOREACH(device, ctx) + RATBAGD_DEVICE_FOREACH_SAFE(device, tmp, ctx) ratbagd_device_unlink(device); ctx->bus = sd_bus_flush_close_unref(ctx->bus); diff --git a/ratbagd/ratbagd.h b/ratbagd/ratbagd.h index 341d74a1..75eb9a1a 100644 --- a/ratbagd/ratbagd.h +++ b/ratbagd/ratbagd.h @@ -169,6 +169,12 @@ struct ratbagd_device *ratbagd_device_next(struct ratbagd_device *device); (_device); \ (_device) = ratbagd_device_next(_device)) +#define RATBAGD_DEVICE_FOREACH_SAFE(_device, _safe, _ctx) \ + for (_device = ratbagd_device_first(_ctx), \ + _safe = (_device) ? ratbagd_device_next(_device) : NULL; \ + (_device); \ + _device = (_safe), \ + _safe = (_safe) ? ratbagd_device_next(_safe) : NULL) /* * Context */