diff options
2 files changed, 23 insertions, 20 deletions
diff --git a/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/messaging/MessageSeQueue.java b/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/messaging/MessageSeQueue.java index 4496dd928..d33c4a63a 100644 --- a/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/messaging/MessageSeQueue.java +++ b/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/messaging/MessageSeQueue.java @@ -74,8 +74,12 @@ public class MessageSeQueue extends RTObject{ return last; } + public boolean isEmpty() { + return last == null; + } + public boolean isNotEmpty(){ - return last != null; + return !isEmpty(); } public long getHightWaterMark() { diff --git a/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/messaging/MessageService.java b/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/messaging/MessageService.java index 84a9bf98c..d8b5b58e1 100644 --- a/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/messaging/MessageService.java +++ b/runtime/org.eclipse.etrice.runtime.java/src/org/eclipse/etrice/runtime/java/messaging/MessageService.java @@ -70,34 +70,33 @@ public class MessageService extends AbstractMessageService { public void run() { running = true; - if(pollingScheduler != null) + if(pollingScheduler != null) { pollingScheduler.scheduleAtFixedRate(new PollingTask(), pollingInterval, pollingInterval, TimeUnit.NANOSECONDS); + } - while (running) { + while(true) { Message msg = null; - - // get next Message from Queue + synchronized(this) { - msg = getMessageQueue().pop(); - } - - if (msg == null) { - // no message in queue -> wait until Thread is notified - try { - synchronized(this) { - if (!running) - return; + while(getMessageQueue().isEmpty() && running) { + // no message in queue -> wait until Thread is notified + try { wait(); } + catch (InterruptedException e) {} } - catch (InterruptedException e) { + if(!running) { + return; + } + else { + // get next Message from Queue + msg = getMessageQueue().pop(); } } - else { - // process message - lastMessageTimestamp = System.currentTimeMillis(); - getMessageDispatcher().receive(msg); - } + + // process message + lastMessageTimestamp = System.currentTimeMillis(); + getMessageDispatcher().receive(msg); } } |