Commit bb9cddf3 authored by chiaming2000's avatar chiaming2000
Browse files

1. Improved logging in MessageHandler run loop.

2. Submit a blank KineticMessage, not a Message, to internal queue when
closed.

Thanks to Marshall (marshallpierce) for contributing to the fixes.
parent 6fd9f92d
Loading
Loading
Loading
Loading
+38 −38
Original line number Diff line number Diff line
@@ -143,38 +143,39 @@ public class MessageHandler implements ClientMessageService, Runnable {
    public void run() {

        try {

            if (logger.isLoggable(Level.FINEST)) {
                logger.finest("thread started, name=" + this.myThread.getName());
            }

			while (isRunning && (isClosed == false)) {

            while (isRunning && !isClosed) {
                // poll message from queue
				KineticMessage msg = this.asyncQueue.poll(7000,
						TimeUnit.MILLISECONDS);
                KineticMessage msg;
                try {
                    msg = this.asyncQueue.poll(7000, TimeUnit.MILLISECONDS);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                    logger.info("Interrupted");
                    isClosed = true;
                    exitRunning();
                    break;
                }

                if (msg != null) {
                    // process message
                    doProcessMessage(msg);
                } else {
                    // exit thread
					this.exitRunning();
                    exitRunning();
                }

            }
		} catch (Exception e) {

			// conservative behaver, no retry.
			this.isClosed = true;

			logger.warning(e.getMessage());
        } catch (Throwable t) {
            logger.log(Level.WARNING, "Main run loop failed", t);
            isClosed = true;
        } finally {
            if (logger.isLoggable(Level.FINEST)) {
                logger.finest("thread exited ." + this.myThread.getName());
            }
        }

    }

	/**
@@ -487,8 +488,7 @@ public class MessageHandler implements ClientMessageService, Runnable {
			try {
				if (obj instanceof LinkedBlockingQueue) {
					// the connection is closed, unblock callers
					((LinkedBlockingQueue<Message>) obj).put(Message.newBuilder()
							.build());
				    ((LinkedBlockingQueue<KineticMessage>) obj).put(new KineticMessage());
				}
			} catch (Exception e) {
				logger.log(Level.WARNING, e.getMessage(), e);