| 361 | } |
| 362 | |
| 363 | @Override |
| 364 | public void shutdown() { |
| 365 | if (terminated) { |
| 366 | return; |
| 367 | } |
| 368 | ChannelGroupFuture groupFuture = channelGroup.close() |
| 369 | .addListener(new ChannelGroupFutureListener() { |
| 370 | @Override |
| 371 | public void operationComplete(ChannelGroupFuture future) throws Exception { |
| 372 | if (!future.isSuccess()) { |
| 373 | log.log(Level.WARNING, "Error closing server channel group", future.cause()); |
| 374 | } |
| 375 | sharedResourceReferenceCounter.release(); |
| 376 | protocolNegotiator.close(); |
| 377 | listenSocketStatsList = Collections.emptyList(); |
| 378 | synchronized (NettyServer.this) { |
| 379 | listener.serverShutdown(); |
| 380 | terminated = true; |
| 381 | } |
| 382 | } |
| 383 | }); |
| 384 | try { |
| 385 | groupFuture.await(); |
| 386 | } catch (InterruptedException e) { |
| 387 | log.log(Level.FINE, "Interrupted while shutting down", e); |
| 388 | Thread.currentThread().interrupt(); |
| 389 | } |
| 390 | } |
| 391 | |
| 392 | @Override |
| 393 | public InternalLogId getLogId() { |