mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-04-29 19:45:01 +02:00
[233338] - [concurrency] RequestMonitor.isSuccess() is inconsistent with getStatus().
This commit is contained in:
parent
6f773242c6
commit
c604aca167
4 changed files with 13 additions and 6 deletions
|
@ -33,7 +33,10 @@ public class ViewerCountingRequestMonitor extends CountingRequestMonitor {
|
|||
|
||||
@Override
|
||||
public synchronized boolean isCanceled() {
|
||||
return fUpdate.isCanceled() || super.isCanceled();
|
||||
// isCanceled() is called implicitly by the super-constructor before fUpdate
|
||||
// is initialized. The fUpdate != null is here to protect against an NPE
|
||||
// from that.
|
||||
return (fUpdate != null && fUpdate.isCanceled()) || super.isCanceled();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -92,9 +92,8 @@ public class CountingRequestMonitor extends RequestMonitor {
|
|||
|
||||
@Override
|
||||
public synchronized void setStatus(IStatus status) {
|
||||
if (!(getStatus() instanceof MultiStatus)) {
|
||||
super.setStatus(new MultiStatus(DsfPlugin.PLUGIN_ID, 0, "Combined status of multiple asynchronous operations", null)); //$NON-NLS-1$
|
||||
}
|
||||
if ((getStatus() instanceof MultiStatus)) {
|
||||
((MultiStatus)getStatus()).add(status);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -73,8 +73,10 @@ public class MultiRequestMonitor<V extends RequestMonitor> extends RequestMonito
|
|||
* <br>
|
||||
* @param requestMonitor
|
||||
*/
|
||||
public void requestMonitorDone(V requestMonitor) {
|
||||
public synchronized void requestMonitorDone(V requestMonitor) {
|
||||
if (getStatus() instanceof MultiStatus) {
|
||||
((MultiStatus)getStatus()).merge(requestMonitor.getStatus());
|
||||
}
|
||||
assert fStatusMap.containsKey(requestMonitor);
|
||||
fStatusMap.put(requestMonitor, true);
|
||||
assert fDoneCounter > 0;
|
||||
|
|
|
@ -143,6 +143,9 @@ public class RequestMonitor {
|
|||
|
||||
/** Returns the status of the completed method. */
|
||||
public synchronized IStatus getStatus() {
|
||||
if (isCanceled()) {
|
||||
return Status.CANCEL_STATUS;
|
||||
}
|
||||
return fStatus;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue