From 3eb2432ced0cba56ddb8fefac6da88f173a98703 Mon Sep 17 00:00:00 2001 From: Rossen Stoyanchev Date: Wed, 23 Nov 2016 15:47:08 -0500 Subject: [PATCH] Fix TODO in ReactorHttpServer --- .../reactive/bootstrap/ReactorHttpServer.java | 29 +++++++++---------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/spring-web/src/test/java/org/springframework/http/server/reactive/bootstrap/ReactorHttpServer.java b/spring-web/src/test/java/org/springframework/http/server/reactive/bootstrap/ReactorHttpServer.java index 5903996c818..2588e3172ae 100644 --- a/spring-web/src/test/java/org/springframework/http/server/reactive/bootstrap/ReactorHttpServer.java +++ b/spring-web/src/test/java/org/springframework/http/server/reactive/bootstrap/ReactorHttpServer.java @@ -16,6 +16,8 @@ package org.springframework.http.server.reactive.bootstrap; +import java.util.concurrent.atomic.AtomicReference; + import reactor.core.Loopback; import reactor.ipc.netty.NettyContext; @@ -31,7 +33,7 @@ public class ReactorHttpServer extends HttpServerSupport implements HttpServer, private reactor.ipc.netty.http.server.HttpServer reactorServer; - private NettyContext running; + private AtomicReference nettyContext = new AtomicReference<>(); @Override @@ -43,42 +45,39 @@ public class ReactorHttpServer extends HttpServerSupport implements HttpServer, Assert.notNull(getHttpHandler()); this.reactorHandler = new ReactorHttpHandlerAdapter(getHttpHandler()); } - this.reactorServer = reactor.ipc.netty.http.server.HttpServer.create(getHost(), - getPort()); + this.reactorServer = reactor.ipc.netty.http.server.HttpServer + .create(getHost(), getPort()); } @Override public boolean isRunning() { - NettyContext running = this.running; - return running != null && running.channel() - .isActive(); + NettyContext context = this.nettyContext.get(); + return (context != null && context.channel().isActive()); } @Override public Object connectedInput() { - return reactorServer; + return this.reactorServer; } @Override public Object connectedOutput() { - return reactorServer; + return this.reactorServer; } @Override public void start() { - // TODO: should be made thread-safe (compareAndSet..) - if (this.running == null) { - this.running = this.reactorServer.newHandler(reactorHandler).block(); + if (this.nettyContext.get() == null) { + this.nettyContext.set(this.reactorServer.newHandler(reactorHandler).block()); } } @Override public void stop() { - NettyContext running = this.running; - if (running != null) { - this.running = null; - running.dispose(); + NettyContext context = this.nettyContext.getAndSet(null); + if (context != null) { + context.dispose(); } } }