From a4cd53a9260c95744b1efc7cb86026e61271b510 Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Fri, 27 May 2016 11:10:59 -0700 Subject: [PATCH] More robust handing of indexer cancellation. Change-Id: I5c2baf7fab8560a0cc11bfc74994b6e9135e7cce --- .../internal/core/pdom/PDOMIndexerJob.java | 20 ++++++++++++------- 1 file changed, 13 insertions(+), 7 deletions(-) diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMIndexerJob.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMIndexerJob.java index 9574205c673..8722a8d42cb 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMIndexerJob.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMIndexerJob.java @@ -127,6 +127,7 @@ public class PDOMIndexerJob extends Job { sMonitorDetail= name; } }; + do { synchronized (taskMutex) { currentTask= null; @@ -158,25 +159,30 @@ public class PDOMIndexerJob extends Job { } } catch (InterruptedException e) { Thread.currentThread().interrupt(); - } catch (OperationCanceledException e) { } } } while (currentTask != null); return Status.OK_STATUS; + } catch (OperationCanceledException e) { + indexingAborted(); + throw e; } catch (RuntimeException | Error e) { CCorePlugin.log(e); - pdomManager.cancelledIndexerJob(true); - synchronized (taskMutex) { - currentTask= null; - taskMutex.notifyAll(); - } + indexingAborted(); throw e; } finally { synchronized (this) { fMonitor= null; } monitorJob.cancel(); - monitor.done(); + } + } + + private void indexingAborted() { + pdomManager.cancelledIndexerJob(true); + synchronized (taskMutex) { + currentTask= null; + taskMutex.notifyAll(); } }