diff --git a/bundle/src/stats.ts b/bundle/src/stats.ts
index 18bb85ca..7928de89 100644
--- a/bundle/src/stats.ts
+++ b/bundle/src/stats.ts
@@ -31,5 +31,6 @@ export function initStats() {
process.memoryUsage().rss / 1024 / 1024
)}mb/${memory.totalMemMb.toFixed(0)}mb ${networkUsage}`
);
- }, 1000 * 10);
+ // TODO: node-os-utils might have a memory leak, more investigation needed
+ }, 1000 * 60 * 5);
}
diff --git a/gateway/src/events/Close.ts b/gateway/src/events/Close.ts
index 1299ad5c..5c1bd292 100644
--- a/gateway/src/events/Close.ts
+++ b/gateway/src/events/Close.ts
@@ -1,10 +1,13 @@
import { WebSocket } from "@fosscord/gateway";
-import { Message } from "./Message";
import { Session } from "@fosscord/util";
export async function Close(this: WebSocket, code: number, reason: string) {
console.log("[WebSocket] closed", code, reason);
if (this.session_id) await Session.delete({ session_id: this.session_id });
- // @ts-ignore
- this.off("message", Message);
+ if (this.heartbeatTimeout) clearTimeout(this.heartbeatTimeout);
+ if (this.readyTimeout) clearTimeout(this.readyTimeout);
+
+ this.deflate?.close();
+
+ this.removeAllListeners();
}
diff --git a/gateway/src/util/Send.ts b/gateway/src/util/Send.ts
index 4defa898..196d4205 100644
--- a/gateway/src/util/Send.ts
+++ b/gateway/src/util/Send.ts
@@ -18,6 +18,9 @@ export async function Send(socket: WebSocket, data: Payload) {
}
return new Promise((res, rej) => {
+ if (socket.readyState !== 1) {
+ return rej("socket not open");
+ }
socket.send(buffer, (err: any) => {
if (err) return rej(err);
return res(null);
diff --git a/util/src/util/Event.ts b/util/src/util/Event.ts
index bf9547b1..8ed009d5 100644
--- a/util/src/util/Event.ts
+++ b/util/src/util/Event.ts
@@ -46,7 +46,9 @@ export async function listenEvent(event: string, callback: (event: EventOpts) =>
} else {
const cancel = () => {
events.removeListener(event, callback);
+ events.setMaxListeners(events.getMaxListeners() - 1);
};
+ events.setMaxListeners(events.getMaxListeners() + 1);
events.addListener(event, (opts) => callback({ ...opts, cancel }));
return cancel;
|