DVUI

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);
    }
}