Issue #1496 Place finally on Jobs to always clean up properly.

Change-Id: I7923482fae1dff2f467605655582f96768146008

Former-commit-id: fa84461ac9 [formerly c25a296b3362159230f1020b9800cc0b75d83b61]
Former-commit-id: fe0761d2de
This commit is contained in:
Roger Ferrel 2013-02-01 10:22:28 -06:00
parent 8c3deb1a93
commit 37f6ac440f
2 changed files with 66 additions and 43 deletions

View file

@ -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;
}

View file

@ -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();