Skip to content

Commit bacd721

Browse files
committed
Fix MaxListenersExceededWarning memory leak
1 parent 139fbd0 commit bacd721

3 files changed

Lines changed: 15 additions & 18 deletions

File tree

apps/twig/src/main/lib/typed-event-emitter.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
import { EventEmitter, on } from "node:events";
22

33
export class TypedEventEmitter<TEvents> extends EventEmitter {
4+
constructor() {
5+
super();
6+
this.setMaxListeners(0);
7+
}
8+
49
emit<K extends keyof TEvents & string>(
510
event: K,
611
payload: TEvents[K],

packages/agent/src/agent.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,9 @@ export class Agent {
100100
}
101101

102102
async cleanup(): Promise<void> {
103+
if (this.sessionLogWriter && this.taskRunId) {
104+
await this.sessionLogWriter.flush(this.taskRunId);
105+
}
103106
await this.acpConnection?.cleanup();
104107
}
105108
}

packages/agent/src/session-log-writer.ts

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,14 @@ export class SessionLogWriter {
1818
this.posthogAPI = posthogAPI;
1919
this.logger =
2020
logger ?? new Logger({ debug: false, prefix: "[SessionLogWriter]" });
21+
}
2122

22-
const flushAllAndExit = async () => {
23-
const flushPromises: Promise<void>[] = [];
24-
for (const sessionId of this.configs.keys()) {
25-
flushPromises.push(this.flush(sessionId));
26-
}
27-
await Promise.all(flushPromises);
28-
process.exit(0);
29-
};
30-
31-
process.on("beforeExit", () => {
32-
flushAllAndExit().catch((e) => this.logger.error("Flush failed:", e));
33-
});
34-
process.on("SIGINT", () => {
35-
flushAllAndExit().catch((e) => this.logger.error("Flush failed:", e));
36-
});
37-
process.on("SIGTERM", () => {
38-
flushAllAndExit().catch((e) => this.logger.error("Flush failed:", e));
39-
});
23+
async flushAll(): Promise<void> {
24+
const flushPromises: Promise<void>[] = [];
25+
for (const sessionId of this.configs.keys()) {
26+
flushPromises.push(this.flush(sessionId));
27+
}
28+
await Promise.all(flushPromises);
4029
}
4130

4231
register(sessionId: string, config: SessionLogConfig): void {

0 commit comments

Comments
 (0)