diff options
| author | Alex Clayton <alex.clayton@isode.com> | 2018-03-16 14:12:08 (GMT) |
|---|---|---|
| committer | Alex Clayton <alex.clayton@isode.com> | 2018-03-21 09:27:34 (GMT) |
| commit | 17a1e7662102eea20ddc104133e2e30a70fefdc1 (patch) | |
| tree | b5d75cd518fe6924bfa4b3a5908bc95b7faf4e34 | |
| parent | bf4830bc9f51a27aba59bc5708caddb835e84789 (diff) | |
| download | stroke-17a1e7662102eea20ddc104133e2e30a70fefdc1.zip stroke-17a1e7662102eea20ddc104133e2e30a70fefdc1.tar.bz2 | |
Ensure JavaTimer.stop() cleans up any unresolved events
The code for stop() in JavaTimer read:
@Override
public void stop() {
timer_.stop();
//FIXME: This needs to clear any remaining events out of the EventLoop queue.
}
Where as the equivalent swiften code in BoostTimer was:
void BoostTimer::stop() {
{
std::unique_lock<std::mutex> lockTimer(timerMutex);
shuttingDown = true;
timer->cancel();
eventLoop->removeEventsFromOwner(shared_from_this());
}
}
This patch updates the java code to bring it inline with the swiften
code. In short to make sure it removes any remaining events from the
event loop when it is stopped.
Test-information:
Code Inspection.
Unit test still pass.
Ran update stroke against M-Link Console it ran ok.
Change-Id: Idf92e92d002b8404547702d1c34738165e331810
| -rw-r--r-- | src/com/isode/stroke/network/JavaTimer.java | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/src/com/isode/stroke/network/JavaTimer.java b/src/com/isode/stroke/network/JavaTimer.java index ac9e219..2baae3d 100644 --- a/src/com/isode/stroke/network/JavaTimer.java +++ b/src/com/isode/stroke/network/JavaTimer.java @@ -6,3 +6,3 @@ /* - * Copyright (c) 2010, Isode Limited, London, England. + * Copyright (c) 2010-2018, Isode Limited, London, England. * All rights reserved. @@ -11,6 +11,5 @@ package com.isode.stroke.network; -import java.util.Date; - import com.isode.stroke.eventloop.Event; import com.isode.stroke.eventloop.EventLoop; +import com.isode.stroke.eventloop.EventOwner; @@ -18,5 +17,5 @@ class JavaTimer extends Timer { - private class TimerRunnable implements Runnable { + private class TimerRunnable implements Runnable,EventOwner { - boolean running_ = true; + private boolean running_ = true; private final EventLoop eventLoop_; @@ -30,8 +29,8 @@ class JavaTimer extends Timer { public void run() { - long endTime = new Date().getTime() + milliseconds_; - while (shouldEmit() && new Date().getTime() < endTime) { + long endTime = System.currentTimeMillis() + milliseconds_; + while (shouldEmit() && System.currentTimeMillis() < endTime) { try { - long timeToWait = endTime - new Date().getTime(); + long timeToWait = endTime - System.currentTimeMillis(); if (timeToWait > 0) { - Thread.sleep(milliseconds_); + Thread.sleep(timeToWait); } @@ -41,10 +40,12 @@ class JavaTimer extends Timer { } - } - if (shouldEmit()) { - eventLoop_.postEvent(new Event.Callback() { - public void run() { - onTick.emit(); - } - }); - } + } + synchronized(this) { + if (shouldEmit()) { + eventLoop_.postEvent(new Event.Callback() { + public void run() { + onTick.emit(); + } + },this); + } + } } @@ -58,2 +59,3 @@ class JavaTimer extends Timer { running_ = false; + timer_.eventLoop_.removeEventsFromOwner(this); } @@ -87,10 +89,11 @@ class JavaTimer extends Timer { timer_.stop(); - //FIXME: This needs to clear any remaining events out of the EventLoop queue. } - + @Override public String toString() { - return "JavaTimer for " + timer_.milliseconds_ + - " milliseconds " + - (timer_.running_ ? "running" : "not running"); + synchronized (timer_) { + return "JavaTimer for " + timer_.milliseconds_ + + " milliseconds " + + (timer_.running_ ? "running" : "not running"); + } } |
Swift