@@ -143,6 +143,9 @@ public class AppSecRequestContext implements DataBundle, Closeable {
143
143
// keep a reference to the last published usr.session_id
144
144
private volatile String sessionId ;
145
145
146
+ // Used to detect missing request-end event at close.
147
+ private volatile boolean requestEndCalled ;
148
+
146
149
private static final AtomicIntegerFieldUpdater <AppSecRequestContext > WAF_TIMEOUTS_UPDATER =
147
150
AtomicIntegerFieldUpdater .newUpdater (AppSecRequestContext .class , "wafTimeouts" );
148
151
private static final AtomicIntegerFieldUpdater <AppSecRequestContext > RASP_TIMEOUTS_UPDATER =
@@ -584,10 +587,15 @@ public void close() {
584
587
/* Should be accessible from the modules */
585
588
586
589
public void close (boolean requiresPostProcessing ) {
587
- if (additive != null || derivatives != null ) {
590
+ if (!requestEndCalled ) {
591
+ log .debug (SEND_TELEMETRY , "Request end event was not called before close" );
592
+ }
593
+ if (additive != null ) {
588
594
log .debug (
589
595
SEND_TELEMETRY , "WAF object had not been closed (probably missed request-end event)" );
590
596
closeAdditive ();
597
+ }
598
+ if (derivatives != null ) {
591
599
derivatives = null ;
592
600
}
593
601
@@ -699,4 +707,9 @@ public boolean isThrottled(RateLimiter rateLimiter) {
699
707
public boolean isAdditiveClosed () {
700
708
return additiveClosed ;
701
709
}
710
+
711
+ /** Must be called during request end event processing. */
712
+ void setRequestEndCalled () {
713
+ requestEndCalled = true ;
714
+ }
702
715
}
0 commit comments