mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-08-08 16:55:38 +02:00
Bug 510054 - Unrecoverable index file corruption
Change-Id: I5ee83d637afd28388724a7402371fddb41e12c98
This commit is contained in:
parent
6adc3c29a6
commit
fe3a787663
1 changed files with 21 additions and 11 deletions
|
@ -344,15 +344,15 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
* case a pdom ready to use is returned.
|
* case a pdom ready to use is returned.
|
||||||
* @throws CoreException
|
* @throws CoreException
|
||||||
*/
|
*/
|
||||||
private WritablePDOM getOrCreatePDOM(ICProject project, IProgressMonitor monitor) throws CoreException {
|
private WritablePDOM getOrCreatePDOM(ICProject cProject, IProgressMonitor monitor) throws CoreException {
|
||||||
synchronized (fProjectToPDOM) {
|
synchronized (fProjectToPDOM) {
|
||||||
IProject rproject = project.getProject();
|
IProject project = cProject.getProject();
|
||||||
IPDOM pdomProxy= fProjectToPDOM.get(rproject);
|
IPDOM pdomProxy= fProjectToPDOM.get(project);
|
||||||
if (pdomProxy instanceof WritablePDOM) {
|
if (pdomProxy instanceof WritablePDOM) {
|
||||||
return (WritablePDOM) pdomProxy;
|
return (WritablePDOM) pdomProxy;
|
||||||
}
|
}
|
||||||
|
|
||||||
String dbName= rproject.getPersistentProperty(dbNameProperty);
|
String dbName= project.getPersistentProperty(dbNameProperty);
|
||||||
File dbFile= null;
|
File dbFile= null;
|
||||||
if (dbName != null) {
|
if (dbName != null) {
|
||||||
dbFile= fileFromDatabaseName(dbName);
|
dbFile= fileFromDatabaseName(dbName);
|
||||||
|
@ -375,13 +375,23 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
|
|
||||||
boolean fromScratch= false;
|
boolean fromScratch= false;
|
||||||
if (dbName == null) {
|
if (dbName == null) {
|
||||||
dbName = createNewDatabaseName(project);
|
dbName = createNewDatabaseName(cProject);
|
||||||
dbFile= fileFromDatabaseName(dbName);
|
dbFile= fileFromDatabaseName(dbName);
|
||||||
storeDatabaseName(rproject, dbName);
|
storeDatabaseName(project, dbName);
|
||||||
fromScratch= true;
|
fromScratch= true;
|
||||||
}
|
}
|
||||||
|
|
||||||
WritablePDOM pdom= new WritablePDOM(dbFile, new PDOMProjectIndexLocationConverter(rproject), getLinkageFactories());
|
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$
|
||||||
|
+ " - rebuilding the index", e); //$NON-NLS-1$
|
||||||
|
dbFile.delete();
|
||||||
|
fromScratch= true;
|
||||||
|
pdom= new WritablePDOM(dbFile, new PDOMProjectIndexLocationConverter(project), getLinkageFactories());
|
||||||
|
}
|
||||||
|
|
||||||
if (!pdom.isSupportedVersion() || fromScratch) {
|
if (!pdom.isSupportedVersion() || fromScratch) {
|
||||||
try {
|
try {
|
||||||
pdom.acquireWriteLock(monitor);
|
pdom.acquireWriteLock(monitor);
|
||||||
|
@ -394,14 +404,14 @@ public class PDOMManager implements IWritableIndexManager, IListener {
|
||||||
pdom.clear();
|
pdom.clear();
|
||||||
pdom.setClearedBecauseOfVersionMismatch(true);
|
pdom.setClearedBecauseOfVersionMismatch(true);
|
||||||
}
|
}
|
||||||
writeProjectPDOMProperties(pdom, rproject);
|
writeProjectPDOMProperties(pdom, project);
|
||||||
pdom.releaseWriteLock();
|
pdom.releaseWriteLock();
|
||||||
}
|
}
|
||||||
pdom.setASTFilePathResolver(new ProjectIndexerInputAdapter(project, false));
|
pdom.setASTFilePathResolver(new ProjectIndexerInputAdapter(cProject, false));
|
||||||
pdom.addListener(this);
|
pdom.addListener(this);
|
||||||
|
|
||||||
fFileToProject.put(dbFile, project);
|
fFileToProject.put(dbFile, cProject);
|
||||||
fProjectToPDOM.put(rproject, pdom);
|
fProjectToPDOM.put(project, pdom);
|
||||||
if (pdomProxy instanceof PDOMProxy) {
|
if (pdomProxy instanceof PDOMProxy) {
|
||||||
((PDOMProxy) pdomProxy).setDelegate(pdom);
|
((PDOMProxy) pdomProxy).setDelegate(pdom);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue