Skip to content

ServletContextListeners added to _destroyServletContextListeners in ContextHandler::startContext() are not removed by ContextHandler::removeEventListener() #4594

@gonphsn

Description

@gonphsn

Jetty Version is:
9.4.26

Java Version is:
java version "1.8.0_241"
Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)

Windows, Linux, Qnx

See Jetty ContextHandler.java Looks like a bug in jetty, see where on startup the content of the _servletContextListeners is copied to _destroyContextListeners:

https://github.com/eclipse/jetty.project/blob/7b38981d25d14afb4a12ff1f2596756144edf695/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java#L874-L893

Afterwards, when removeEventListener is invoked:

https://github.com/eclipse/jetty.project/blob/7b38981d25d14afb4a12ff1f2596756144edf695/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java#L691-L709

We see that while the "_servletContextListeners" is cleared, the copy already made to the "_destroySerletContextListeners" is not removed. This means that the listener is still invoked on shutdown after the client has specified that it should not be.

The _destroyServletContextListeners is private final:

https://github.com/eclipse/jetty.project/blob/7b38981d25d14afb4a12ff1f2596756144edf695/jetty-server/src/main/java/org/eclipse/jetty/server/handler/ContextHandler.java#L209

So we can't remove this listener on shutdown without Jetty intervention.

Metadata

Metadata

Assignees

Labels

BugFor general bugs on Jetty side

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions