1
0
Fork 0
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:
Pawel Piech 2008-05-22 04:56:38 +00:00
parent 6f773242c6
commit c604aca167
4 changed files with 13 additions and 6 deletions

View file

@ -33,7 +33,10 @@ public class ViewerCountingRequestMonitor extends CountingRequestMonitor {
@Override @Override
public synchronized boolean isCanceled() { 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 @Override

View file

@ -92,9 +92,8 @@ public class CountingRequestMonitor extends RequestMonitor {
@Override @Override
public synchronized void setStatus(IStatus status) { public synchronized void setStatus(IStatus status) {
if (!(getStatus() instanceof MultiStatus)) { if ((getStatus() instanceof MultiStatus)) {
super.setStatus(new MultiStatus(DsfPlugin.PLUGIN_ID, 0, "Combined status of multiple asynchronous operations", null)); //$NON-NLS-1$ ((MultiStatus)getStatus()).add(status);
} }
((MultiStatus)getStatus()).add(status);
}; };
} }

View file

@ -73,8 +73,10 @@ public class MultiRequestMonitor<V extends RequestMonitor> extends RequestMonito
* <br> * <br>
* @param requestMonitor * @param requestMonitor
*/ */
public void requestMonitorDone(V requestMonitor) { public synchronized void requestMonitorDone(V requestMonitor) {
((MultiStatus)getStatus()).merge(requestMonitor.getStatus()); if (getStatus() instanceof MultiStatus) {
((MultiStatus)getStatus()).merge(requestMonitor.getStatus());
}
assert fStatusMap.containsKey(requestMonitor); assert fStatusMap.containsKey(requestMonitor);
fStatusMap.put(requestMonitor, true); fStatusMap.put(requestMonitor, true);
assert fDoneCounter > 0; assert fDoneCounter > 0;

View file

@ -143,6 +143,9 @@ public class RequestMonitor {
/** Returns the status of the completed method. */ /** Returns the status of the completed method. */
public synchronized IStatus getStatus() { public synchronized IStatus getStatus() {
if (isCanceled()) {
return Status.CANCEL_STATUS;
}
return fStatus; return fStatus;
} }