Fix various memory leaks caught by new tracer
This commit is contained in:
		
							parent
							
								
									d4fd1bfb43
								
							
						
					
					
						commit
						d63cfc23d6
					
				@ -7,7 +7,7 @@ const std = @import("std");
 | 
			
		||||
///
 | 
			
		||||
///
 | 
			
		||||
///
 | 
			
		||||
const stack_trace_frame_size = if (std.debug.sys_can_stack_trace) 4 else 0;
 | 
			
		||||
const stack_trace_frame_size = if (std.debug.sys_can_stack_trace) 16 else 0;
 | 
			
		||||
 | 
			
		||||
///
 | 
			
		||||
///
 | 
			
		||||
@ -166,7 +166,8 @@ pub const allocator = coral.io.Allocator.bind(Context, &context, struct {
 | 
			
		||||
pub fn trace_allocations() void {
 | 
			
		||||
	var current_allocation_info = context.allocation_info_head;
 | 
			
		||||
 | 
			
		||||
	while (current_allocation_info) |allocation_info| : (current_allocation_info = allocation_info) {
 | 
			
		||||
	while (current_allocation_info) |allocation_info| : (current_allocation_info = allocation_info.next_info) {
 | 
			
		||||
		std.debug.print("{d} byte leak detected", .{allocation_info.size});
 | 
			
		||||
		std.debug.dumpStackTrace(allocation_info.stack_trace);
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -185,8 +185,17 @@ pub fn check(self: *Self, condition: bool, failure_message: []const u8) !void {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn deinit(self: *Self) void {
 | 
			
		||||
	var global_data = self.heap.fetch(self.global_object);
 | 
			
		||||
 | 
			
		||||
	if (global_data.release(self)) {
 | 
			
		||||
		self.heap.remove(self.global_object);
 | 
			
		||||
	} else {
 | 
			
		||||
		self.heap.assign(self.global_object, global_data);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	self.values.deinit(self.allocator);
 | 
			
		||||
	self.calls.deinit(self.allocator);
 | 
			
		||||
	self.heap.deinit(self.allocator);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn discard(self: *Self, val: types.Val) void {
 | 
			
		||||
 | 
			
		||||
@ -55,7 +55,9 @@ const AppManifest = struct {
 | 
			
		||||
	}
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
pub fn run_app(base_file_system: file.System) void {
 | 
			
		||||
pub fn run_app(_: file.System) void {
 | 
			
		||||
	defer heap.trace_allocations();
 | 
			
		||||
 | 
			
		||||
	const Logger = struct {
 | 
			
		||||
		const Self = @This();
 | 
			
		||||
 | 
			
		||||
@ -74,12 +76,12 @@ pub fn run_app(base_file_system: file.System) void {
 | 
			
		||||
 | 
			
		||||
	defer script_environment.deinit();
 | 
			
		||||
 | 
			
		||||
	const app_file_name = "app.ona";
 | 
			
		||||
	// const app_file_name = "app.ona";
 | 
			
		||||
	var app_manifest = AppManifest{};
 | 
			
		||||
 | 
			
		||||
	app_manifest.load_script(&script_environment, base_file_system, app_file_name) catch {
 | 
			
		||||
		return ext.SDL_LogError(ext.SDL_LOG_CATEGORY_APPLICATION, "failed to load %s\n", app_file_name);
 | 
			
		||||
	};
 | 
			
		||||
	// app_manifest.load_script(&script_environment, base_file_system, app_file_name) catch {
 | 
			
		||||
	// 	return ext.SDL_LogError(ext.SDL_LOG_CATEGORY_APPLICATION, "failed to load %s\n", app_file_name);
 | 
			
		||||
	// };
 | 
			
		||||
 | 
			
		||||
	if (ext.SDL_Init(ext.SDL_INIT_EVERYTHING) != 0) {
 | 
			
		||||
		return ext.SDL_LogError(ext.SDL_LOG_CATEGORY_APPLICATION, "%s\n", ext.SDL_GetError());
 | 
			
		||||
@ -135,6 +137,4 @@ pub fn run_app(base_file_system: file.System) void {
 | 
			
		||||
			ext.SDL_RenderPresent(renderer);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	heap.trace_allocations();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user