Merge pull request #2708 from wschaeferB/2453-AddImageCancelHanging-4.4.0

2453 add image cancel hanging 4.4.0
This commit is contained in:
Richard Cordovano 2017-04-24 14:10:38 -04:00 committed by GitHub
commit daa4650ea5
2 changed files with 22 additions and 9 deletions

View File

@ -21,6 +21,7 @@ package org.sleuthkit.autopsy.casemodule;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.logging.Level; import java.util.logging.Level;
import javax.annotation.concurrent.GuardedBy;
import org.openide.util.NbBundle; import org.openide.util.NbBundle;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback.DataSourceProcessorResult; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback.DataSourceProcessorResult;
@ -61,6 +62,8 @@ class AddImageTask implements Runnable {
* TODO (AUT-2021): Merge SleuthkitJNI.AddImageProcess and AddImageTask * TODO (AUT-2021): Merge SleuthkitJNI.AddImageProcess and AddImageTask
*/ */
private final Object tskAddImageProcessLock; private final Object tskAddImageProcessLock;
@GuardedBy("tskAddImageProcessLock")
private boolean tskAddImageProcessStopped; private boolean tskAddImageProcessStopped;
private SleuthkitJNI.CaseDbHandle.AddImageProcess tskAddImageProcess; private SleuthkitJNI.CaseDbHandle.AddImageProcess tskAddImageProcess;
@ -77,8 +80,9 @@ class AddImageTask implements Runnable {
* java.util.TimeZone.getID. * java.util.TimeZone.getID.
* @param ignoreFatOrphanFiles Whether to parse orphans if the image has a * @param ignoreFatOrphanFiles Whether to parse orphans if the image has a
* FAT filesystem. * FAT filesystem.
* @param imageWriterPath Path that a copy of the image should be written to. * @param imageWriterPath Path that a copy of the image should be
* Use empty string to disable image writing * written to. Use empty string to disable image
* writing
* @param progressMonitor Progress monitor to report progress during * @param progressMonitor Progress monitor to report progress during
* processing. * processing.
* @param callback Callback to call when processing is done. * @param callback Callback to call when processing is done.
@ -104,7 +108,7 @@ class AddImageTask implements Runnable {
progressMonitor.setProgress(0); progressMonitor.setProgress(0);
Case currentCase = Case.getCurrentCase(); Case currentCase = Case.getCurrentCase();
String imageWriterPath = ""; String imageWriterPath = "";
if(imageWriterSettings != null){ if (imageWriterSettings != null) {
imageWriterPath = imageWriterSettings.getPath(); imageWriterPath = imageWriterSettings.getPath();
} }
List<String> errorMessages = new ArrayList<>(); List<String> errorMessages = new ArrayList<>();
@ -112,8 +116,12 @@ class AddImageTask implements Runnable {
try { try {
currentCase.getSleuthkitCase().acquireExclusiveLock(); currentCase.getSleuthkitCase().acquireExclusiveLock();
synchronized (tskAddImageProcessLock) { synchronized (tskAddImageProcessLock) {
tskAddImageProcess = currentCase.getSleuthkitCase().makeAddImageProcess(timeZone, true, if (!tskAddImageProcessStopped) { //if we have already cancelled don't bother making an addImageProcess
ignoreFatOrphanFiles, imageWriterPath); tskAddImageProcess = currentCase.getSleuthkitCase().makeAddImageProcess(timeZone, true,
ignoreFatOrphanFiles, imageWriterPath);
} else {
return; //we have already cancelled so we do not want to add the image, returning will execute the finally block
}
} }
Thread progressUpdateThread = new Thread(new ProgressUpdater(progressMonitor, tskAddImageProcess)); Thread progressUpdateThread = new Thread(new ProgressUpdater(progressMonitor, tskAddImageProcess));
progressUpdateThread.start(); progressUpdateThread.start();
@ -142,6 +150,7 @@ class AddImageTask implements Runnable {
*/ */
public void cancelTask() { public void cancelTask() {
synchronized (tskAddImageProcessLock) { synchronized (tskAddImageProcessLock) {
tskAddImageProcessStopped = true;
if (null != tskAddImageProcess) { if (null != tskAddImageProcess) {
try { try {
/* /*
@ -153,7 +162,7 @@ class AddImageTask implements Runnable {
* called. * called.
*/ */
tskAddImageProcess.stop(); tskAddImageProcess.stop();
tskAddImageProcessStopped = true;
} catch (TskCoreException ex) { } catch (TskCoreException ex) {
logger.log(Level.SEVERE, String.format("Error cancelling adding image %s to the case database", imagePath), ex); //NON-NLS logger.log(Level.SEVERE, String.format("Error cancelling adding image %s to the case database", imagePath), ex); //NON-NLS
} }
@ -213,7 +222,7 @@ class AddImageTask implements Runnable {
if (!verificationError.isEmpty()) { if (!verificationError.isEmpty()) {
errorMessages.add(verificationError); errorMessages.add(verificationError);
} }
if(imageWriterSettings != null){ if (imageWriterSettings != null) {
ImageWriterService.createImageWriter(imageId, imageWriterSettings); ImageWriterService.createImageWriter(imageId, imageWriterSettings);
} }
newDataSources.add(newImage); newDataSources.add(newImage);

View File

@ -19,6 +19,7 @@
package org.sleuthkit.autopsy.casemodule; package org.sleuthkit.autopsy.casemodule;
import java.awt.Color; import java.awt.Color;
import java.awt.Cursor;
import java.awt.EventQueue; import java.awt.EventQueue;
import java.awt.Window; import java.awt.Window;
import java.util.ArrayList; import java.util.ArrayList;
@ -36,6 +37,7 @@ import org.openide.WizardDescriptor;
import org.openide.util.HelpCtx; import org.openide.util.HelpCtx;
import org.openide.util.Lookup; import org.openide.util.Lookup;
import org.openide.util.NbBundle; import org.openide.util.NbBundle;
import org.openide.windows.WindowManager;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessor;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorCallback;
import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor; import org.sleuthkit.autopsy.corecomponentinterfaces.DataSourceProcessorProgressMonitor;
@ -319,8 +321,10 @@ class AddImageWizardAddingProgressPanel extends ShortcutWizardDescriptorPanel {
cleanupTask = addImageAction.new CleanupTask() { cleanupTask = addImageAction.new CleanupTask() {
@Override @Override
void cleanup() throws Exception { void cleanup() throws Exception {
WindowManager.getDefault().getMainWindow().setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
cancelDataSourceProcessing(dataSourceId); cancelDataSourceProcessing(dataSourceId);
cancelled = true; cancelled = true;
WindowManager.getDefault().getMainWindow().setCursor(Cursor.getPredefinedCursor(Cursor.DEFAULT_CURSOR));
} }
}; };