From 7bfdf9a591acd3d2ea7bc6ab57fa245c423d1c2e Mon Sep 17 00:00:00 2001 From: Sergey Prigogin Date: Fri, 6 Jan 2017 13:46:38 -0800 Subject: [PATCH] Bug 510054 - Unrecoverable index file corruption Change-Id: Iba386baf2c62f10044c4ffc1f399823a94aacf84 --- .../parser/org/eclipse/cdt/internal/core/pdom/PDOM.java | 9 ++++++--- .../org/eclipse/cdt/internal/core/pdom/PDOMManager.java | 6 ++++-- 2 files changed, 10 insertions(+), 5 deletions(-) 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 1f02d646a29..3d9680f6d68 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 @@ -425,10 +425,13 @@ public class PDOM extends PlatformObject implements IPDOM { db = new Database(fPath, cache, getDefaultVersion(), isPermanentlyReadOnly()); db.setLocked(lockDB); - if (isSupportedVersion()) { - readLinkages(); + try { + if (isSupportedVersion()) { + readLinkages(); + } + } finally { + db.setLocked(lockCount != 0); } - db.setLocked(lockCount != 0); } public IIndexLocationConverter getLocationConverter() { diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java index 01defac2337..02ac75d1194 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/pdom/PDOMManager.java @@ -384,8 +384,10 @@ public class PDOMManager implements IWritableIndexManager, IListener { WritablePDOM pdom; try { pdom= new WritablePDOM(dbFile, new PDOMProjectIndexLocationConverter(project), getLinkageFactories()); - } catch (CoreException e) { - CCorePlugin.log("Failed to open C/C++ index " + dbFile.getAbsolutePath() //$NON-NLS-1$ + } catch (CoreException | RuntimeException e) { + // Index file is likely corrupted. Recover by rebuilding the index. + // See http://bugs.eclipse.org/510054 + CCorePlugin.log("Failed to open C/C++ index file " + dbFile.getAbsolutePath() //$NON-NLS-1$ + " - rebuilding the index", e); //$NON-NLS-1$ dbFile.delete(); fromScratch= true;