From 4217a2c5d7de480dc78b92e5f32a6e8a796834cd Mon Sep 17 00:00:00 2001
From: Matthew Swift <matthew.swift@forgerock.com>
Date: Tue, 02 Jul 2013 09:48:50 +0000
Subject: [PATCH] Fix OPENDJ-1043: Worker Thread was interrupted while waiting for new work while shutting down
---
opends/src/server/org/opends/server/replication/protocol/Session.java | 26 +++++++++++++++++++-------
1 files changed, 19 insertions(+), 7 deletions(-)
diff --git a/opends/src/server/org/opends/server/replication/protocol/Session.java b/opends/src/server/org/opends/server/replication/protocol/Session.java
index d54f8c8..6befa27 100644
--- a/opends/src/server/org/opends/server/replication/protocol/Session.java
+++ b/opends/src/server/org/opends/server/replication/protocol/Session.java
@@ -36,6 +36,7 @@
import java.net.Socket;
import java.net.SocketException;
import java.util.concurrent.CountDownLatch;
+import java.util.concurrent.TimeUnit;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.locks.Lock;
@@ -333,14 +334,25 @@
final byte[] buffer = msg.getBytes(protocolVersion);
if (isRunning.get())
{
- try {
- sendQueue.put(buffer);
+ while (!closeInitiated)
+ {
+ try
+ {
+ // Avoid blocking forever so that we can check for session closure.
+ if (sendQueue.offer(buffer, 100, TimeUnit.MILLISECONDS))
+ {
+ return;
+ }
+ }
+ catch (final InterruptedException e)
+ {
+ setSessionError(e);
+ throw new IOException(e.getMessage());
+ }
}
- catch (final InterruptedException e) {
- setSessionError(e);
- throw new IOException(e.getMessage());
- }
- } else {
+ }
+ else
+ {
send(buffer);
}
}
--
Gitblit v1.10.0