Fix PR comments. Use thread.join to wait for AddMultipleImageTask thread.

This commit is contained in:
Joe Ho 2019-09-13 13:39:54 -04:00
parent b08f4a7119
commit 9db0cf2b7e
3 changed files with 43 additions and 40 deletions

View File

@ -72,9 +72,10 @@ final class AddLogicalImageTask implements Runnable {
private final Case currentCase;
private volatile boolean cancelled;
private boolean addingInterestingFiles;
private volatile boolean addingInterestingFiles;
private AddMultipleImageTask addMultipleImageTask;
private boolean createVHD;
private Thread multipleImageThread;
private volatile boolean createVHD;
private long totalFiles;
private Map<String, Long> imagePathToObjIdMap;
@ -183,7 +184,8 @@ final class AddLogicalImageTask implements Runnable {
return;
}
AddDataSourceCallback privateCallback = null;
addMultipleImageTask = null;
AddDataSourceCallback privateCallback = new AddDataSourceCallback();
List<Content> newDataSources = new ArrayList<>();
if (imagePaths.isEmpty()) {
@ -213,13 +215,14 @@ final class AddLogicalImageTask implements Runnable {
createVHD = true;
// ingest the VHDs
try {
privateCallback = new AddDataSourceCallback();
addMultipleImageTask = new AddMultipleImageTask(deviceId, imagePaths, timeZone , progressMonitor, privateCallback);
addMultipleImageTask.run();
if (privateCallback.getResult() == DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS) {
// TODO: Delete destination directory when 5453 (VHD file is not closed upon revert) is fixed.
// bait out
callback.done(privateCallback.getResult(), privateCallback.getErrorMessages(), privateCallback.getNewDataSources());
multipleImageThread = new Thread(addMultipleImageTask);
multipleImageThread.start();
try {
multipleImageThread.join();
} catch (InterruptedException ex) {
LOGGER.log(Level.SEVERE, "Add Image interrupted", ex); // NON-NLS
callback.done(DataSourceProcessorCallback.DataSourceProcessorResult.CRITICAL_ERRORS, errorList, emptyDataSources);
return;
}
} catch (NoCurrentCaseException ex) {
@ -235,7 +238,7 @@ final class AddLogicalImageTask implements Runnable {
addingInterestingFiles = true;
addInterestingFiles(Paths.get(dest.toString(), resultsFilename), createVHD);
progressMonitor.setProgressText(Bundle.AddLogicalImageTask_doneAddingInterestingFiles());
if (addMultipleImageTask != null && privateCallback != null) {
if (createVHD) {
callback.done(privateCallback.getResult(), privateCallback.getErrorMessages(), privateCallback.getNewDataSources());
} else {
callback.done(DataSourceProcessorCallback.DataSourceProcessorResult.NO_ERRORS, errorList, newDataSources);

View File

@ -213,14 +213,15 @@ class AddMultipleImageTask implements Runnable {
tskAddImageProcessStopped = true;
if (addImageProcess != null) {
try {
/*
* All this does is set a flag that will make the TSK add
* image process exit when the flag is checked between
* processing steps. The state of the flag is not
* accessible, so record it here so that it is known that
* the revert method of the process object needs to be
* called.
*/
addImageProcess.stop();
addImageProcess.revert();
if (tskAddImageProcessStopped) {
List<String> errorMessages = new ArrayList<>();
List<Content> emptyDataSources = new ArrayList<>();
errorMessages.add(Bundle.AddMultipleImageTask_cancelled());
callback.done(DataSourceProcessorResult.CRITICAL_ERRORS, errorMessages, emptyDataSources);
}
} catch (TskCoreException ex) {
LOGGER.log(Level.SEVERE, "Cancellation: addImagePRocess.stop failed", ex); // NON-NLS
}
@ -295,7 +296,6 @@ class AddMultipleImageTask implements Runnable {
return;
}
if (!tskAddImageProcessStopped) {
/*
* Try to commit the results of the add image process, retrieve the new
* image from the case database, and add it to the list of new data
@ -326,4 +326,3 @@ class AddMultipleImageTask implements Runnable {
}
}
}
}

View File

@ -36,6 +36,7 @@ import org.sleuthkit.autopsy.casemodule.NoCurrentCaseException;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
import org.sleuthkit.autopsy.coreutils.TimeStampUtils;
import org.sleuthkit.datamodel.Content;
/**
@ -173,7 +174,7 @@ public final class LogicalImagerDSProcessor implements DataSourceProcessor {
JOptionPane.YES_NO_OPTION);
if (showConfirmDialog == YES_OPTION) {
// Get unique dest directory
String uniqueDirectory = imageDirPath.getFileName() + "_" + UUID.randomUUID();
String uniqueDirectory = imageDirPath.getFileName() + "_" + TimeStampUtils.createTimeStamp();
dest = Paths.get(logicalImagerDir.toString(), uniqueDirectory).toFile();
} else {
String msg = Bundle.LogicalImagerDSProcessor_directoryAlreadyExists(dest.toString());