Fixed extraordinarily subtle race condition with contracts invariant
-- all of the methods in the class must be synchronized or the internal state can be inconsistent with the contract invariant when entering the class in a non-synchronized method, even when that method doesn't care about the object's internal state
This commit is contained in:
parent
2ebdff074c
commit
fd4540cd32
|
|
@ -46,7 +46,7 @@ public class SimpleTimer {
|
|||
* @return the name associated with this timer
|
||||
*/
|
||||
@Ensures("result != null")
|
||||
public String getName() {
|
||||
public synchronized String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
|
|
@ -82,14 +82,14 @@ public class SimpleTimer {
|
|||
/**
|
||||
* @return is this timer running?
|
||||
*/
|
||||
public boolean isRunning() {
|
||||
public synchronized boolean isRunning() {
|
||||
return running;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return A convenience function to obtain the current time in milliseconds from this timer
|
||||
*/
|
||||
public long currentTime() {
|
||||
public synchronized long currentTime() {
|
||||
return System.currentTimeMillis();
|
||||
}
|
||||
|
||||
|
|
@ -119,8 +119,4 @@ public class SimpleTimer {
|
|||
public synchronized double getElapsedTime() {
|
||||
return (running ? (currentTime() - startTime + elapsed) : elapsed) / 1000.0;
|
||||
}
|
||||
|
||||
public void printElapsedTime(PrintStream out) {
|
||||
out.printf("SimpleTimer %s: %.2f%n", name, getElapsedTime());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue