From 51734551e8315b4b0ecae16ce4bc12a9b040e079 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 20 Mar 2018 18:04:19 -0400 Subject: [PATCH 1/2] Make DataSourceIngestJob's IngestJobInfo threadsafe --- .../autopsy/ingest/DataSourceIngestJob.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestJob.java b/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestJob.java index ebdfb6146f..089ebec1ad 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestJob.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestJob.java @@ -165,7 +165,7 @@ final class DataSourceIngestJob { private String currentFileIngestModule = ""; private String currentFileIngestTask = ""; private final List ingestModules = new ArrayList<>(); - private IngestJobInfo ingestJob; + private volatile IngestJobInfo ingestJob; /** * A data source ingest job uses this field to report its creation time. @@ -414,6 +414,11 @@ final class DataSourceIngestJob { List start() { List errors = startUpIngestPipelines(); if (errors.isEmpty()) { + try { + this.ingestJob = Case.getOpenCase().getSleuthkitCase().addIngestJob(dataSource, NetworkUtils.getLocalHostName(), ingestModules, new Date(this.createTime), new Date(0), IngestJobStatusType.STARTED, ""); + } catch (TskCoreException | NoCurrentCaseException ex) { + logger.log(Level.SEVERE, "Failed to add ingest job to database.", ex); + } if (this.hasFirstStageDataSourceIngestPipeline() || this.hasFileIngestPipeline()) { logger.log(Level.INFO, "Starting first stage analysis for {0} (jobId={1})", new Object[]{dataSource.getName(), this.id}); //NON-NLS this.startFirstStage(); @@ -421,11 +426,6 @@ final class DataSourceIngestJob { logger.log(Level.INFO, "Starting second stage analysis for {0} (jobId={1}), no first stage configured", new Object[]{dataSource.getName(), this.id}); //NON-NLS this.startSecondStage(); } - try { - this.ingestJob = Case.getOpenCase().getSleuthkitCase().addIngestJob(dataSource, NetworkUtils.getLocalHostName(), ingestModules, new Date(this.createTime), new Date(0), IngestJobStatusType.STARTED, ""); - } catch (TskCoreException | NoCurrentCaseException ex) { - logger.log(Level.SEVERE, "Failed to add ingest job to database.", ex); - } } return errors; } From 3d1b7bbe0bbd3e127cc216d644355637d3975319 Mon Sep 17 00:00:00 2001 From: Richard Cordovano Date: Tue, 20 Mar 2018 18:08:41 -0400 Subject: [PATCH 2/2] Make DataSourceIngestJob's IngestJobInfo threadsafe --- .../autopsy/ingest/DataSourceIngestJob.java | 29 ++++++++++--------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestJob.java b/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestJob.java index 089ebec1ad..d39acd8f49 100644 --- a/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestJob.java +++ b/Core/src/org/sleuthkit/autopsy/ingest/DataSourceIngestJob.java @@ -702,26 +702,27 @@ final class DataSourceIngestJob { } } } - if (this.cancelled) { - try { - ingestJob.setIngestJobStatus(IngestJobStatusType.CANCELLED); - } catch (TskCoreException ex) { - logger.log(Level.SEVERE, "Failed to set ingest status for ingest job in database.", ex); + if (ingestJob != null) { + if (this.cancelled) { + try { + ingestJob.setIngestJobStatus(IngestJobStatusType.CANCELLED); + } catch (TskCoreException ex) { + logger.log(Level.SEVERE, "Failed to set ingest status for ingest job in database.", ex); + } + } else { + try { + ingestJob.setIngestJobStatus(IngestJobStatusType.COMPLETED); + } catch (TskCoreException ex) { + logger.log(Level.SEVERE, "Failed to set ingest status for ingest job in database.", ex); + } } - } else { try { - ingestJob.setIngestJobStatus(IngestJobStatusType.COMPLETED); + this.ingestJob.setEndDateTime(new Date()); } catch (TskCoreException ex) { - logger.log(Level.SEVERE, "Failed to set ingest status for ingest job in database.", ex); + logger.log(Level.SEVERE, "Failed to set end date for ingest job in database.", ex); } } - try { - this.ingestJob.setEndDateTime(new Date()); - } catch (TskCoreException ex) { - logger.log(Level.SEVERE, "Failed to set end date for ingest job in database.", ex); - } this.parentJob.dataSourceJobFinished(this); - } /**