add better freeing procedures w/ errdefer
This commit is contained in:
parent
4aa9e9d7b9
commit
99382d0a66
1 changed files with 12 additions and 4 deletions
|
@ -95,6 +95,8 @@ pub const RunContext = struct {
|
|||
plugin: *const c.LilvPlugin,
|
||||
) !RunContext {
|
||||
var instance = c.lilv_plugin_instantiate(plugin, f64(44100), null);
|
||||
errdefer c.lilv_instance_free(instance);
|
||||
|
||||
if (instance == null) {
|
||||
return ImageError.InstantiateFail;
|
||||
}
|
||||
|
@ -139,13 +141,17 @@ pub const RunContext = struct {
|
|||
|
||||
pub fn makeContext(allocator: *std.mem.Allocator, plugin_uri: []const u8) !Context {
|
||||
const cstr_plugin_uri = try std.cstr.addNullByte(allocator, plugin_uri);
|
||||
var world = c.lilv_world_new().?;
|
||||
|
||||
var world: *c.LilvWorld = c.lilv_world_new().?;
|
||||
errdefer c.lilv_world_free(world);
|
||||
|
||||
c.lilv_world_load_all(world);
|
||||
|
||||
var uri: *c.LilvNode = c.lilv_new_uri(world, cstr_plugin_uri.ptr) orelse blk: {
|
||||
std.debug.warn("Invalid plugin URI <{}>\n", plugin_uri);
|
||||
return ImageError.InvalidPlugin;
|
||||
};
|
||||
defer c.lilv_node_free(uri);
|
||||
|
||||
const plugins: *const c.LilvPlugins = c.lilv_world_get_all_plugins(world);
|
||||
|
||||
|
@ -154,7 +160,9 @@ pub fn makeContext(allocator: *std.mem.Allocator, plugin_uri: []const u8) !Conte
|
|||
return ImageError.UnknownPlugin;
|
||||
};
|
||||
|
||||
c.lilv_node_free(uri);
|
||||
|
||||
return Context{ .allocator = allocator, .world = world, .plugin = plugin };
|
||||
return Context{
|
||||
.allocator = allocator,
|
||||
.world = world,
|
||||
.plugin = plugin,
|
||||
};
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue