diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/Messages.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/Messages.java index fbd7f1ea3dc..8c01ee5369f 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/Messages.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/Messages.java @@ -14,6 +14,7 @@ import org.eclipse.osgi.util.NLS; public class Messages extends NLS { public static String Checksums_taskComputeChecksums; + public static String PDOM_waitingForWriteLock; public static String PDOMImportTask_errorInvalidArchive; public static String PDOMImportTask_errorInvalidPDOMVersion; public static String PDOMManager_ClosePDOMJob; diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/Messages.properties b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/Messages.properties index 6977d7751b9..19ac87bf8f5 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/Messages.properties +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/Messages.properties @@ -9,6 +9,7 @@ # Markus Schorn (Wind River Systems) ############################################################################### Checksums_taskComputeChecksums=Computing checksums +PDOM_waitingForWriteLock=Waiting for exclusive index access PDOMImportTask_errorInvalidArchive=Invalid Archive: {0} PDOMImportTask_errorInvalidPDOMVersion=The version of the {0} to import for project {1} does not match PDOMManager_notifyJob_label=Notify Index Change Listeners diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java index e0ac90c7895..c8a8b9547e1 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOM.java @@ -1043,11 +1043,16 @@ public class PDOM extends PlatformObject implements IPDOM { // Let the readers go first long start= sDEBUG_LOCKS ? System.currentTimeMillis() : 0; + int count = 0; while (lockCount > giveupReadLocks || waitingReaders > 0) { mutex.wait(CANCELLATION_CHECK_INTERVAL); if (monitor != null && monitor.isCanceled()) { throw new OperationCanceledException(); } + count++; + if (monitor != null && count == LONG_WRITE_LOCK_REPORT_THRESHOLD / CANCELLATION_CHECK_INTERVAL) { + monitor.subTask(Messages.PDOM_waitingForWriteLock); + } if (sDEBUG_LOCKS) { start = reportBlockedWriteLock(start, giveupReadLocks); } @@ -1057,6 +1062,8 @@ public class PDOM extends PlatformObject implements IPDOM { timeWriteLockAcquired = System.currentTimeMillis(); db.setExclusiveLock(); } + if (monitor != null) + monitor.subTask(""); //$NON-NLS-1$ } final public void releaseWriteLock() {