synchronized setter method but unsynchronized getter method on field members in
class DownloadResults
-----------------------------------------------------------------------------------------------------
Key: GERONIMO-5490
URL: https://issues.apache.org/jira/browse/GERONIMO-5490
Project: Geronimo
Issue Type: Bug
Security Level: public (Regular issues)
Components: Plugins
Affects Versions: 2.1.5
Reporter: Wendy Feng
Though JLS guarantees that 32-bit reads will be atomic, synchronized setter
methods and unsynchronized similarly-named getter methods are not proper.
Unless the fields in question are declared volatile, the Java Memory Model
doesn't guarantee up-to-date field value visible to threads in the absent of
synchronization. Caller of unsynchronized getter method could read stale or
inconsistent values, which could cause serious problems.
Here's the synchronized stter methods and unsynchronized similarly-named getter
methods found in the class DownloadResults:
public class DownloadResults implements Serializable, DownloadPoller {
...
public synchronized void setCurrentFile(String currentFile) {
this.currentFile = currentFile;
}
public synchronized void setCurrentMessage(String currentMessage) {
this.currentMessage = currentMessage;
}
public synchronized void setCurrentFilePercent(int currentFileProgress) {
this.currentFileProgress = currentFileProgress;
}
public synchronized void setFailure(Exception failure) {
this.failure = failure;
}
....
public Exception getFailure() {
return failure;
}
public String getCurrentFile() {
return currentFile;
}
public String getCurrentMessage() {
return currentMessage;
}
public int getCurrentFilePercent() {
return currentFileProgress;
}
...
}
I suggest it would be better to write this instead:
public class DownloadResults implements Serializable, DownloadPoller {
...
....
public synchronized Exception getFailure() {
return failure;
}
public synchronized String getCurrentFile() {
return currentFile;
}
public synchronized String getCurrentMessage() {
return currentMessage;
}
public synchronized int getCurrentFilePercent() {
return currentFileProgress;
}
...
}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.