Compare commits

...

5 commits

3 changed files with 14 additions and 10 deletions

View file

@ -1606,14 +1606,13 @@ public class ElfHeader implements StructConverter {
* @return the section header that contains the address
*/
public ElfSectionHeader getSectionLoadHeaderContaining(long address) {
// FIXME: verify
for (ElfSectionHeader sectionHeader : sectionHeaders) {
if (!sectionHeader.isAlloc()) {
continue;
}
long start = sectionHeader.getAddress();
long end = start + sectionHeader.getSize();
if (start <= address && address <= end) {
if (start <= address && address < end) {
return sectionHeader;
}
}

View file

@ -35,10 +35,9 @@ public class IncrementalLoadJob<ROW_OBJECT> extends Job implements ThreadedTable
/**
* Used to signal that the updateManager has finished loading the final contents gathered
* by this job. By default, the value is 0, which means there is nothing to wait for. If we
* flush, this will be set to 1.
* by this job. This is also updated if this job is cancelled.
*/
private volatile CountDownLatch completedCallbackLatch = new CountDownLatch(0);
private volatile CountDownLatch completedCallbackLatch = new CountDownLatch(1);
private volatile boolean isCancelled = false;
private volatile IncrementalUpdatingAccumulator incrementalAccumulator;
@ -141,13 +140,18 @@ public class IncrementalLoadJob<ROW_OBJECT> extends Job implements ThreadedTable
// -A block on jobDone() can now complete as we release the lock
// -jobDone() will notify listeners in an invokeLater(), which puts it behind ours
//
completedCallbackLatch = new CountDownLatch(1);
Swing.runLater(() -> updateManager.addThreadedTableListener(IncrementalLoadJob.this));
}
waitForThreadedTableUpdateManagerToFinish();
}
/**
* Waits for the final flushed data to be added to the table. We will get called when the data
* is finished loading or cancelled. The latch will also be released if the cancel method of
* this job is called. This can happen if the work queue is told to cancel all jobs, which can
* happen if a new reload job is requested.
*/
private void waitForThreadedTableUpdateManagerToFinish() {
try {
completedCallbackLatch.await();
@ -179,6 +183,7 @@ public class IncrementalLoadJob<ROW_OBJECT> extends Job implements ThreadedTable
super.cancel();
isCancelled = true;
incrementalAccumulator.cancel();
completedCallbackLatch.countDown();
// Note: cannot do this here, since the cancel() call may happen asynchronously and after
// a call to reload() on the table model. Assume that the model itself has already

View file

@ -203,7 +203,7 @@ public abstract class ThreadedTableModel<ROW_OBJECT, DATA_SOURCE>
}
private void cancelCurrentWorkerJob() {
if (worker != null && worker.isBusy()) {
if (worker != null) {
worker.clearAllJobsWithInterrupt_IKnowTheRisks();
}
}