@@ -212,6 +212,7 @@ function createError (msg, code, statusCode) {
212
212
213
213
class ErrorHandler {
214
214
constructor ( ) {
215
+ this . released = true
215
216
this . hasError = false
216
217
this . req = null
217
218
this . resOrSocket = null
@@ -251,6 +252,11 @@ class ErrorHandler {
251
252
}
252
253
253
254
_release ( ) {
255
+ if ( this . released ) {
256
+ return
257
+ }
258
+
259
+ this . released = true
254
260
this . hasError = false
255
261
this . req = null
256
262
this . resOrSocket = null
@@ -261,18 +267,21 @@ class ErrorHandler {
261
267
262
268
static create ( req , resOrSocket , callback ) {
263
269
const handler = ErrorHandler . pool . pop ( ) || new ErrorHandler ( )
270
+ handler . released = false
264
271
handler . hasError = false
265
272
handler . req = req
266
273
handler . resOrSocket = resOrSocket
267
274
handler . callback = callback
268
275
handler . req . on ( 'close' , handler . _release )
276
+ handler . req . on ( 'error' , handler . _release )
269
277
return handler . _handle
270
278
}
271
279
}
272
280
ErrorHandler . pool = [ ]
273
281
274
282
class ProxyErrorHandler {
275
283
constructor ( ) {
284
+ this . released = true
276
285
this . hasError = false
277
286
this . req = null
278
287
this . proxyReq = null
@@ -323,8 +332,13 @@ class ProxyErrorHandler {
323
332
}
324
333
325
334
_release ( ) {
335
+ if ( this . released ) {
336
+ return
337
+ }
338
+
326
339
this . _abort ( )
327
340
341
+ this . released = true
328
342
this . hasError = false
329
343
this . req = null
330
344
this . proxyReq = null
@@ -335,17 +349,20 @@ class ProxyErrorHandler {
335
349
336
350
static create ( req , proxyReq , errorHandler ) {
337
351
const handler = ProxyErrorHandler . pool . pop ( ) || new ProxyErrorHandler ( )
352
+ handler . released = false
338
353
handler . req = req
339
354
handler . proxyReq = proxyReq
340
355
handler . errorHandler = errorHandler
341
356
handler . req . on ( 'close' , handler . _release )
357
+ handler . req . on ( 'error' , handler . _release )
342
358
return handler . _handle
343
359
}
344
360
}
345
361
ProxyErrorHandler . pool = [ ]
346
362
347
363
class ProxyResponseHandler {
348
364
constructor ( ) {
365
+ this . released = true
349
366
this . req = null
350
367
this . resOrSocket = null
351
368
this . onRes = null
@@ -395,10 +412,15 @@ class ProxyResponseHandler {
395
412
}
396
413
397
414
_release ( ) {
415
+ if ( this . released ) {
416
+ return
417
+ }
418
+
398
419
if ( this . proxyRes ) {
399
420
this . proxyRes . destroy ( )
400
421
}
401
422
423
+ this . released = true
402
424
this . req = null
403
425
this . resOrSocket = null
404
426
this . onRes = null
@@ -410,19 +432,22 @@ class ProxyResponseHandler {
410
432
411
433
static create ( req , resOrSocket , onRes , proxyErrorHandler ) {
412
434
const handler = ProxyResponseHandler . pool . pop ( ) || new ProxyResponseHandler ( )
435
+ handler . released = false
413
436
handler . req = req
414
437
handler . resOrSocket = resOrSocket
415
438
handler . onRes = onRes
416
439
handler . proxyErrorHandler = proxyErrorHandler
417
440
handler . proxyRes = null
418
441
handler . req . on ( 'close' , handler . _release )
442
+ handler . req . on ( 'error' , handler . _release )
419
443
return handler . _handle
420
444
}
421
445
}
422
446
ProxyResponseHandler . pool = [ ]
423
447
424
448
class ProxyUpgradeHandler {
425
449
constructor ( ) {
450
+ this . released = true
426
451
this . req = null
427
452
this . resOrSocket = null
428
453
this . proxyErrorHandler = null
@@ -470,13 +495,18 @@ class ProxyUpgradeHandler {
470
495
}
471
496
472
497
_release ( ) {
498
+ if ( this . released ) {
499
+ return
500
+ }
501
+
473
502
if ( this . proxyRes ) {
474
503
this . proxyRes . destroy ( )
475
504
}
476
505
if ( this . proxySocket ) {
477
506
this . proxySocket . destroy ( )
478
507
}
479
508
509
+ this . released = true
480
510
this . req = null
481
511
this . resOrSocket = null
482
512
this . proxyErrorHandler = null
@@ -488,10 +518,12 @@ class ProxyUpgradeHandler {
488
518
489
519
static create ( req , resOrSocket , proxyErrorHandler ) {
490
520
const handler = ProxyUpgradeHandler . pool . pop ( ) || new ProxyUpgradeHandler ( )
521
+ handler . released = false
491
522
handler . req = req
492
523
handler . resOrSocket = resOrSocket
493
524
handler . proxyErrorHandler = proxyErrorHandler
494
525
handler . req . on ( 'close' , handler . _release )
526
+ handler . req . on ( 'error' , handler . _release )
495
527
return handler . _handle
496
528
}
497
529
}
0 commit comments