@@ -34,16 +34,31 @@ export default class TraceReportClient implements Client {
3434 private readonly reporterClient : TraceSegmentReportServiceClient ;
3535 private readonly buffer : Segment [ ] = [ ] ;
3636 private timeout ?: NodeJS . Timeout ;
37+ private segmentFinishedListener : ( segment : Segment ) => void ;
3738
3839 constructor ( ) {
3940 this . reporterClient = new TraceSegmentReportServiceClient (
4041 config . collectorAddress ,
4142 config . secure ? grpc . credentials . createSsl ( ) : grpc . credentials . createInsecure ( ) ,
4243 ) ;
43- emitter . on ( 'segment-finished' , ( segment ) => {
44+
45+ // Store listener reference for cleanup
46+ this . segmentFinishedListener = ( segment : Segment ) => {
47+ // Limit buffer size to prevent memory leak during network issues
48+ if ( this . buffer . length >= config . maxBufferSize ) {
49+ logger . warn (
50+ `Trace buffer reached maximum size (${ config . maxBufferSize } ). ` +
51+ `Discarding oldest segment to prevent memory leak. ` +
52+ `This may indicate network connectivity issues with the collector.`
53+ ) ;
54+ this . buffer . shift ( ) ; // Remove oldest segment
55+ }
56+
4457 this . buffer . push ( segment ) ;
4558 this . timeout ?. ref ( ) ;
46- } ) ;
59+ } ;
60+
61+ emitter . on ( 'segment-finished' , this . segmentFinishedListener ) ;
4762 }
4863
4964 get isConnected ( ) : boolean {
@@ -107,4 +122,22 @@ export default class TraceReportClient implements Client {
107122 this . reportFunction ( resolve ) ;
108123 } ) ;
109124 }
125+
126+ destroy ( ) : void {
127+ // Clean up event listener to prevent memory leak
128+ if ( this . segmentFinishedListener ) {
129+ emitter . off ( 'segment-finished' , this . segmentFinishedListener ) ;
130+ }
131+
132+ // Clear timeout
133+ if ( this . timeout ) {
134+ clearTimeout ( this . timeout ) ;
135+ this . timeout = undefined ;
136+ }
137+
138+ // Clear buffer
139+ this . buffer . length = 0 ;
140+
141+ logger . info ( 'TraceReportClient destroyed and resources cleaned up' ) ;
142+ }
110143}
0 commit comments