fix memory stuff

This commit is contained in:
Yuzu 2024-11-06 13:58:13 +00:00
parent 0708d6c5d0
commit 0303579074
2 changed files with 18 additions and 10 deletions

View File

@ -185,6 +185,7 @@ inflator: zlib.Decompressor,
mutex: std.Thread.Mutex = .{},
log: Log = .no,
/// caller must free the data
fn parseJson(self: *Self, raw: []const u8) !zmpl.Data {
var data = zmpl.Data.init(self.allocator);
try data.fromJson(raw);
@ -250,8 +251,8 @@ pub fn init(allocator: mem.Allocator, args: struct {
}
const parsed = try json.parseFromSlice(GatewayBotInfo, allocator, body, .{});
const url = parsed.value.url["wss://".len..];
defer parsed.deinit();
const url = parsed.value.url["wss://".len..];
return .{
.allocator = allocator,
@ -337,6 +338,8 @@ pub fn readMessage(self: *Self, _: anytype) !void {
{
const HelloPayload = struct { heartbeat_interval: u64, _trace: [][]const u8 };
const parsed = try json.parseFromValue(HelloPayload, self.allocator, payload.d, .{});
defer parsed.deinit();
const helloPayload = parsed.value;
// PARSE NEW URL IN READY
@ -391,6 +394,8 @@ pub fn readMessage(self: *Self, _: anytype) !void {
};
{
const parsed = try json.parseFromValue(WithSequence, self.allocator, payload.d, .{});
defer parsed.deinit();
const resume_payload = parsed.value;
self.setSequence(resume_payload.seq orelse 0);
@ -472,7 +477,7 @@ pub fn send(self: *Self, data: anytype) !void {
//self.logif("{s}\n", .{string.items});
try self.client.write(string.items);
try self.client.write(try string.toOwnedSlice());
}
pub inline fn getSequence(self: *Self) isize {
@ -552,7 +557,9 @@ pub fn handleEvent(self: *Self, name: []const u8, payload: []const u8) !void {
}
if (std.ascii.eqlIgnoreCase(name, "message_delete")) {
const attempt = try self.parseJson(payload);
var attempt = try self.parseJson(payload);
defer attempt.deinit();
const obj = attempt.getT(.object, "d").?;
const data = Discord.MessageDelete{
.id = obj.getT(.string, "id").?,
@ -564,7 +571,9 @@ pub fn handleEvent(self: *Self, name: []const u8, payload: []const u8) !void {
}
if (std.ascii.eqlIgnoreCase(name, "message_delete_bulk")) {
const attempt = try self.parseJson(payload);
var attempt = try self.parseJson(payload);
defer attempt.deinit();
const obj = attempt.getT(.object, "d").?;
var ids = std.ArrayList([]const u8).init(self.allocator);
@ -582,7 +591,8 @@ pub fn handleEvent(self: *Self, name: []const u8, payload: []const u8) !void {
}
if (std.ascii.eqlIgnoreCase(name, "message_update")) {
const attempt = try self.parseJson(payload);
var attempt = try self.parseJson(payload);
defer attempt.deinit();
const obj = attempt.getT(.object, "d").?;
const message = try Parser.parseMessage(self.allocator, obj);
@ -592,7 +602,8 @@ pub fn handleEvent(self: *Self, name: []const u8, payload: []const u8) !void {
}
if (std.ascii.eqlIgnoreCase(name, "message_create")) {
const attempt = try self.parseJson(payload);
var attempt = try self.parseJson(payload);
defer attempt.deinit();
const obj = attempt.getT(.object, "d").?;
const message = try Parser.parseMessage(self.allocator, obj);

View File

@ -13,10 +13,7 @@ fn message_create(message: Discord.Message) void {
}
pub fn main() !void {
var arena = std.heap.ArenaAllocator.init(std.heap.page_allocator);
defer arena.deinit();
const allocator = arena.allocator();
const allocator = std.heap.c_allocator;
const token = std.posix.getenv("TOKEN") orelse unreachable;
var handler = try Shard.init(allocator, .{