Merge pull request #1588 from karlmortensen/addressDeadlock

Address deadlock when service manager cancels jobs due to a service o…
This commit is contained in:
Richard Cordovano 2015-09-24 11:10:52 -04:00
commit 5734522a3d

View File

@ -68,6 +68,7 @@ public class IngestManager {
private static final Logger logger = Logger.getLogger(IngestManager.class.getName()); private static final Logger logger = Logger.getLogger(IngestManager.class.getName());
private static IngestManager instance; private static IngestManager instance;
private final Object ingestMessageBoxLock = new Object();
/** /**
* The ingest manager maintains a mapping of ingest job IDs to running * The ingest manager maintains a mapping of ingest job IDs to running
@ -435,7 +436,9 @@ public class IngestManager {
* display ingest messages. * display ingest messages.
*/ */
void initIngestMessageInbox() { void initIngestMessageInbox() {
ingestMessageBox = IngestMessageTopComponent.findInstance(); synchronized (this.ingestMessageBoxLock) {
ingestMessageBox = IngestMessageTopComponent.findInstance();
}
} }
/** /**
@ -443,30 +446,34 @@ public class IngestManager {
* *
* @param message The message to be posted. * @param message The message to be posted.
*/ */
synchronized void postIngestMessage(IngestMessage message) { void postIngestMessage(IngestMessage message) {
if (ingestMessageBox != null && this.runInteractively) { synchronized (this.ingestMessageBoxLock) {
if (message.getMessageType() != IngestMessage.MessageType.ERROR && message.getMessageType() != IngestMessage.MessageType.WARNING) { if (ingestMessageBox != null && this.runInteractively) {
ingestMessageBox.displayMessage(message); if (message.getMessageType() != IngestMessage.MessageType.ERROR && message.getMessageType() != IngestMessage.MessageType.WARNING) {
} else {
long errorPosts = ingestErrorMessagePosts.incrementAndGet();
if (errorPosts <= MAX_ERROR_MESSAGE_POSTS) {
ingestMessageBox.displayMessage(message); ingestMessageBox.displayMessage(message);
} else if (errorPosts == MAX_ERROR_MESSAGE_POSTS + 1) { } else {
IngestMessage errorMessageLimitReachedMessage = IngestMessage.createErrorMessage( long errorPosts = ingestErrorMessagePosts.incrementAndGet();
NbBundle.getMessage(this.getClass(), "IngestManager.IngestMessage.ErrorMessageLimitReached.title"), if (errorPosts <= MAX_ERROR_MESSAGE_POSTS) {
NbBundle.getMessage(this.getClass(), "IngestManager.IngestMessage.ErrorMessageLimitReached.subject"), ingestMessageBox.displayMessage(message);
NbBundle.getMessage(this.getClass(), "IngestManager.IngestMessage.ErrorMessageLimitReached.msg", MAX_ERROR_MESSAGE_POSTS)); } else if (errorPosts == MAX_ERROR_MESSAGE_POSTS + 1) {
ingestMessageBox.displayMessage(errorMessageLimitReachedMessage); IngestMessage errorMessageLimitReachedMessage = IngestMessage.createErrorMessage(
NbBundle.getMessage(this.getClass(), "IngestManager.IngestMessage.ErrorMessageLimitReached.title"),
NbBundle.getMessage(this.getClass(), "IngestManager.IngestMessage.ErrorMessageLimitReached.subject"),
NbBundle.getMessage(this.getClass(), "IngestManager.IngestMessage.ErrorMessageLimitReached.msg", MAX_ERROR_MESSAGE_POSTS));
ingestMessageBox.displayMessage(errorMessageLimitReachedMessage);
}
} }
} }
} }
} }
private void clearIngestMessageBox() { private void clearIngestMessageBox() {
if (ingestMessageBox != null) { synchronized (this.ingestMessageBoxLock) {
ingestMessageBox.clearMessages(); if (ingestMessageBox != null) {
ingestMessageBox.clearMessages();
}
ingestErrorMessagePosts.set(0);
} }
ingestErrorMessagePosts.set(0);
} }
/** /**