Issue #1496 Place finally on Jobs to always clean up properly.
Change-Id: I7923482fae1dff2f467605655582f96768146008 Former-commit-id:87ea06dfa3
[formerlyfa84461ac9
] [formerly87ea06dfa3
[formerlyfa84461ac9
] [formerlyfe0761d2de
[formerly c25a296b3362159230f1020b9800cc0b75d83b61]]] Former-commit-id:fe0761d2de
Former-commit-id:5328956362
[formerly37f6ac440f
] Former-commit-id:f4adecb7c0
This commit is contained in:
parent
04e0c7ca48
commit
3f8b7c2274
2 changed files with 66 additions and 43 deletions
|
@ -150,40 +150,51 @@ public class ProductQueryJob extends Job {
|
|||
}
|
||||
|
||||
Request request = null;
|
||||
while (!canceled.get()) {
|
||||
synchronized (this) {
|
||||
if (requests.size() > 0) {
|
||||
request = requests.remove(0);
|
||||
} else {
|
||||
break;
|
||||
try {
|
||||
while (true) {
|
||||
synchronized (this) {
|
||||
if (requests.size() > 0) {
|
||||
request = requests.remove(0);
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
final ICommand command = request.getCommand();
|
||||
final boolean isObsUpdated = request.isObsUpdated();
|
||||
final List<StdTextProduct> prodList = command
|
||||
.executeCommand(queryTransport);
|
||||
// User may have canceled during long query.
|
||||
if (!canceled.get()) {
|
||||
VizApp.runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
callback.requestDone(command, prodList,
|
||||
isObsUpdated);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
} catch (CommandFailedException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
if (!canceled.get()) {
|
||||
VizApp.runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
callback.requestDone(null, null, false);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
final ICommand command = request.getCommand();
|
||||
final boolean isObsUpdated = request.isObsUpdated();
|
||||
final List<StdTextProduct> prodList = command
|
||||
.executeCommand(queryTransport);
|
||||
// User may have canceled while long query is be performed.
|
||||
if (!canceled.get()) {
|
||||
VizApp.runAsync(new Runnable() {
|
||||
|
||||
@Override
|
||||
public void run() {
|
||||
callback.requestDone(command, prodList,
|
||||
isObsUpdated);
|
||||
}
|
||||
});
|
||||
} else {
|
||||
canceled.set(false);
|
||||
}
|
||||
} catch (CommandFailedException e) {
|
||||
statusHandler.handle(Priority.PROBLEM, e.getLocalizedMessage(),
|
||||
e);
|
||||
callback.requestDone(null, null, false);
|
||||
}
|
||||
} finally {
|
||||
canceled.set(false);
|
||||
}
|
||||
canceled.set(false);
|
||||
return Status.OK_STATUS;
|
||||
}
|
||||
|
||||
|
|
|
@ -1518,20 +1518,24 @@ public class AfosBrowserDlg extends CaveSWTDialog implements
|
|||
*/
|
||||
@Override
|
||||
protected IStatus run(IProgressMonitor monitor) {
|
||||
while (true) {
|
||||
TimesRequest timesRequest = timesRequestQueue.poll();
|
||||
if (timesRequest == null || canceled) {
|
||||
queryJobList.remove(this);
|
||||
return Status.OK_STATUS;
|
||||
}
|
||||
timesRequest.queryResults = timesRequest.query
|
||||
.executeQuery();
|
||||
timesRequest.query = null;
|
||||
try {
|
||||
while (true) {
|
||||
TimesRequest timesRequest = timesRequestQueue.poll();
|
||||
if (timesRequest == null || canceled) {
|
||||
break;
|
||||
}
|
||||
timesRequest.queryResults = timesRequest.query
|
||||
.executeQuery();
|
||||
timesRequest.query = null;
|
||||
|
||||
if (!canceled) {
|
||||
timesResultQueue.add(timesRequest);
|
||||
if (!canceled) {
|
||||
timesResultQueue.add(timesRequest);
|
||||
}
|
||||
}
|
||||
} finally {
|
||||
queryJobList.remove(this);
|
||||
}
|
||||
return Status.OK_STATUS;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1637,6 +1641,11 @@ public class AfosBrowserDlg extends CaveSWTDialog implements
|
|||
}
|
||||
}
|
||||
|
||||
// Shorter wait for better response when few product IDs.
|
||||
long waitTime = 40L;
|
||||
long waitDelta = 10L;
|
||||
long waitMax = 200L;
|
||||
|
||||
// Wait for all query jobs to finish and update results.
|
||||
boolean finished = false;
|
||||
while (!(finished || canceled)) {
|
||||
|
@ -1662,11 +1671,14 @@ public class AfosBrowserDlg extends CaveSWTDialog implements
|
|||
if (queryJobList.size() > 0) {
|
||||
synchronized (this) {
|
||||
try {
|
||||
wait(200L);
|
||||
wait(waitTime);
|
||||
} catch (InterruptedException e) {
|
||||
statusHandler.handle(Priority.PROBLEM,
|
||||
e.getLocalizedMessage(), e);
|
||||
}
|
||||
if (waitTime < waitMax) {
|
||||
waitTime += waitDelta;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
finished = timesResultQueue.isEmpty();
|
||||
|
|
Loading…
Add table
Reference in a new issue