reset
Destroys all unused and trashed datas since the last call to reset
Parameters
- self:*Data
- *Data
- gpa:std.mem.Allocator
- std.mem.Allocator
Source
Implementation
pub fn reset(self: *Data, gpa: std.mem.Allocator) void {
const io = dvui.io;
var temp: std.ArrayList(SavedData) = .empty;
defer temp.deinit(gpa);
{
self.mutex.lockUncancelable(io);
defer self.mutex.unlock(io);
var it = self.storage.iterator();
while (it.next_resetting()) |kv| {
if (kv.value.deinit) |_| {
temp.append(gpa, kv.value) catch |err| {
dvui.logError(@src(), err, "data with key {x} failed to call deinit function", .{kv.key});
};
} else {
kv.value.free(gpa);
}
}
for (self.trash.items) |sd| {
if (sd.deinit) |_| {
temp.append(gpa, sd) catch |err| {
dvui.logError(@src(), err, "trash data failed to call deinit function", .{});
};
} else {
sd.free(gpa);
}
}
self.trash.clearRetainingCapacity();
}
// We need to not be holding the mutex when these run their deinit
// functions, because those functions might call data stuff like
// `retainClear`
for (temp.items) |sd| {
sd.free(gpa);
}
}