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
|
@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
|
||||||
|
|
|
@ -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);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue