@@ -378,39 +378,48 @@ public boolean onHttpPacketParsed(HttpHeader httpHeader, FilterChainContext ctx)
378
378
}
379
379
380
380
result = false ;
381
-
381
+ final HttpResponsePacket response =
382
+ (HttpResponsePacket ) httpHeader ;
382
383
final HttpTransactionContext context = HttpTransactionContext .get (ctx .getConnection ());
383
- if (context .isEstablishingTunnel ()
384
- && HttpStatus .OK_200 .statusMatches (
385
- ((HttpResponsePacket ) httpHeader ).getStatus ())) {
386
- context .setEstablishingTunnel (false );
387
- final Connection c = ctx .getConnection ();
388
- context .tunnelEstablished (c );
389
- context .getProvider ().execute (c ,
390
- context .getRequest (),
391
- context .getHandler (),
392
- context .getFuture ());
393
- return result ;
394
- } else {
395
- cleanup (ctx );
396
- final AsyncHandler handler = context .getHandler ();
397
- if (handler != null ) {
398
- try {
399
- context .result (handler .onCompleted ());
400
- } catch (Exception e ) {
401
- context .abort (e );
402
- }
384
+ try {
385
+ if (context .isEstablishingTunnel ()
386
+ && HttpStatus .OK_200 .statusMatches (response .getStatus ())) {
387
+ context .setEstablishingTunnel (false );
388
+ final Connection c = ctx .getConnection ();
389
+ context .tunnelEstablished (c );
390
+ context .getProvider ().execute (c ,
391
+ context .getRequest (),
392
+ context .getHandler (),
393
+ context .getFuture ());
394
+ return result ;
403
395
} else {
404
- context .done (null );
396
+ cleanup (ctx );
397
+ final AsyncHandler handler = context .getHandler ();
398
+ if (handler != null ) {
399
+ try {
400
+ context .result (handler .onCompleted ());
401
+ } catch (Exception e ) {
402
+ context .abort (e );
403
+ }
404
+ } else {
405
+ context .done (null );
406
+ }
407
+ return result ;
405
408
}
406
-
407
- return result ;
409
+ } finally {
410
+ recycleResponsePacket ( response ) ;
408
411
}
412
+
409
413
}
410
414
411
415
412
416
// ----------------------------------------------------- Private Methods
413
417
418
+ private static void recycleResponsePacket (final HttpResponsePacket response ) {
419
+ response .getRequest ().setExpectContent (false );
420
+ response .recycle ();
421
+ }
422
+
414
423
private static void processKeepAlive (final Connection c ,
415
424
final HttpHeader header ) {
416
425
final ProcessingState state = header .getProcessingState ();
0 commit comments