Clear global resources reference from HttpResources

When used as global Netty resources, ReactorResourceFactory creates and
sets those resources on Reactor's HttpResources directly.

When that ReactorResourceFactory bean is destroyed, those resources are
disposed but HttpResources still holds a reference to those and may try
to use them again.

This commit uses HttpResources to clear those resources and its
references to it, when the ReactorResourceFactory is treating those as
global.

Issue: SPR-17199
This commit is contained in:
Brian Clozel 2018-08-21 16:16:28 +02:00
parent 89e2caa4f3
commit 709b185177
1 changed files with 21 additions and 17 deletions

View File

@ -142,25 +142,29 @@ public class ReactorResourceFactory implements InitializingBean, DisposableBean
@Override
public void destroy() {
try {
ConnectionProvider provider = this.connectionProvider;
if (provider != null) {
provider.dispose();
if (this.globalResources) {
HttpResources.disposeLoopsAndConnections();
}
else {
try {
ConnectionProvider provider = this.connectionProvider;
if (provider != null) {
provider.dispose();
}
}
}
catch (Throwable ex) {
// ignore
}
try {
LoopResources resources = this.loopResources;
if (resources != null) {
resources.dispose();
catch (Throwable ex) {
// ignore
}
try {
LoopResources resources = this.loopResources;
if (resources != null) {
resources.dispose();
}
}
catch (Throwable ex) {
// ignore
}
}
catch (Throwable ex) {
// ignore
}
}