Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 294310

Summary: [Index] out of memory during indexing, most likely accessing deleted data.
Product: [Tools] CDT Reporter: Yevgeny Shifrin <yevshif>
Component: cdt-indexerAssignee: Markus Schorn <mschorn.eclipse>
Status: RESOLVED FIXED QA Contact: Markus Schorn <mschorn.eclipse>
Severity: normal    
Priority: P3    
Version: 6.0   
Target Milestone: 7.0   
Hardware: PC   
OS: Linux   
Whiteboard:
Bug Depends on: 294306    
Bug Blocks:    
Attachments:
Description Flags
fixes an invalid deletion in the index mschorn.eclipse: iplog-

Description Yevgeny Shifrin CLA 2009-11-05 07:49:20 EST
Hi,

I am working with CDT 6.0.0. When I index project first time it is ok. After it is changed and deltas are indexed, sometimes I get java.lang.OutOfMemoryError: Java heap space exception. In eclipse.ini file I changed value from 1G to 2G (-Xmx2048m) and it still did not help. Is this a CDT bug? Please take a look at the exception below:

ENTRY org.eclipse.cdt.core 4 4 2009-11-05 14:28:25.972
!MESSAGE Error while parsing FileName.c++.
!STACK 0
java.lang.OutOfMemoryError: Java heap space
	at org.eclipse.cdt.internal.core.pdom.db.LongString.getChars(LongString.java:361)
	at org.eclipse.cdt.internal.core.pdom.dom.PDOMNamedNode.getNameCharArray(PDOMNamedNode.java:82)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPParameter.getNameCharArray(PDOMCPPParameter.java:223)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSpecialization.getNameCharArray(CPPSpecialization.java:105)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPSpecialization.<init>(PDOMCPPSpecialization.java:49)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPParameterSpecialization.<init>(PDOMCPPParameterSpecialization.java:51)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPFunctionSpecialization.<init>(PDOMCPPFunctionSpecialization.java:102)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPMethodSpecialization.<init>(PDOMCPPMethodSpecialization.java:54)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.createSpecialization(PDOMCPPLinkage.java:412)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.createBinding(PDOMCPPLinkage.java:311)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.addBinding(PDOMCPPLinkage.java:256)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.addBinding(PDOMCPPLinkage.java:210)
	at org.eclipse.cdt.internal.core.pdom.dom.PDOMFile.createPDOMName(PDOMFile.java:306)
	at org.eclipse.cdt.internal.core.pdom.dom.PDOMFile.addNames(PDOMFile.java:273)
	at org.eclipse.cdt.internal.core.pdom.WritablePDOM.addFileContent(WritablePDOM.java:67)
	at org.eclipse.cdt.internal.core.index.WritableCIndex.setFileContent(WritableCIndex.java:75)
	at org.eclipse.cdt.internal.core.pdom.PDOMWriter.storeFileInIndex(PDOMWriter.java:477)
	at org.eclipse.cdt.internal.core.pdom.PDOMWriter.storeSymbolsInIndex(PDOMWriter.java:206)
	at org.eclipse.cdt.internal.core.pdom.PDOMWriter.addSymbols(PDOMWriter.java:162)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.writeToIndex(AbstractIndexerTask.java:719)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.parseFile(AbstractIndexerTask.java:677)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.parseLinkage(AbstractIndexerTask.java:563)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.runTask(AbstractIndexerTask.java:314)
	at org.eclipse.cdt.internal.core.pdom.indexer.PDOMIndexerTask.run(PDOMIndexerTask.java:122)
	at org.eclipse.cdt.internal.core.pdom.PDOMIndexerJob.run(PDOMIndexerJob.java:137)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

!ENTRY org.eclipse.cdt.core 4 4 2009-11-05 14:33:32.012
!MESSAGE Error: Java heap space
!STACK 0
java.lang.OutOfMemoryError: Java heap space
	at org.eclipse.cdt.internal.core.pdom.db.LongString.getChars(LongString.java:361)
	at org.eclipse.cdt.internal.core.pdom.dom.PDOMNamedNode.getNameCharArray(PDOMNamedNode.java:82)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPParameter.getNameCharArray(PDOMCPPParameter.java:223)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSpecialization.getNameCharArray(CPPSpecialization.java:105)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPSpecialization.<init>(PDOMCPPSpecialization.java:49)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPParameterSpecialization.<init>(PDOMCPPParameterSpecialization.java:51)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPFunctionSpecialization.<init>(PDOMCPPFunctionSpecialization.java:102)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPMethodSpecialization.<init>(PDOMCPPMethodSpecialization.java:54)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.createSpecialization(PDOMCPPLinkage.java:412)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.createBinding(PDOMCPPLinkage.java:311)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.addBinding(PDOMCPPLinkage.java:256)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.addBinding(PDOMCPPLinkage.java:210)
	at org.eclipse.cdt.internal.core.pdom.dom.PDOMFile.createPDOMName(PDOMFile.java:306)
	at org.eclipse.cdt.internal.core.pdom.dom.PDOMFile.addNames(PDOMFile.java:273)
	at org.eclipse.cdt.internal.core.pdom.WritablePDOM.addFileContent(WritablePDOM.java:67)
	at org.eclipse.cdt.internal.core.index.WritableCIndex.setFileContent(WritableCIndex.java:75)
	at org.eclipse.cdt.internal.core.pdom.PDOMWriter.storeFileInIndex(PDOMWriter.java:477)
	at org.eclipse.cdt.internal.core.pdom.PDOMWriter.storeSymbolsInIndex(PDOMWriter.java:206)
	at org.eclipse.cdt.internal.core.pdom.PDOMWriter.addSymbols(PDOMWriter.java:162)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.writeToIndex(AbstractIndexerTask.java:719)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.parseFile(AbstractIndexerTask.java:677)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.parseLinkage(AbstractIndexerTask.java:563)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.runTask(AbstractIndexerTask.java:314)
	at org.eclipse.cdt.internal.core.pdom.indexer.PDOMIndexerTask.run(PDOMIndexerTask.java:122)
	at org.eclipse.cdt.internal.core.pdom.PDOMIndexerJob.run(PDOMIndexerJob.java:137)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)

!ENTRY org.eclipse.core.jobs 4 2 2009-11-05 14:33:35.420
!MESSAGE An internal error occurred during: "C/C++ Indexer".
!STACK 0
java.lang.OutOfMemoryError: Java heap space
	at org.eclipse.cdt.internal.core.pdom.db.LongString.getChars(LongString.java:361)
	at org.eclipse.cdt.internal.core.pdom.dom.PDOMNamedNode.getNameCharArray(PDOMNamedNode.java:82)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPParameter.getNameCharArray(PDOMCPPParameter.java:223)
	at org.eclipse.cdt.internal.core.dom.parser.cpp.CPPSpecialization.getNameCharArray(CPPSpecialization.java:105)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPSpecialization.<init>(PDOMCPPSpecialization.java:49)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPParameterSpecialization.<init>(PDOMCPPParameterSpecialization.java:51)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPFunctionSpecialization.<init>(PDOMCPPFunctionSpecialization.java:102)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPMethodSpecialization.<init>(PDOMCPPMethodSpecialization.java:54)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.createSpecialization(PDOMCPPLinkage.java:412)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.createBinding(PDOMCPPLinkage.java:311)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.addBinding(PDOMCPPLinkage.java:256)
	at org.eclipse.cdt.internal.core.pdom.dom.cpp.PDOMCPPLinkage.addBinding(PDOMCPPLinkage.java:210)
	at org.eclipse.cdt.internal.core.pdom.dom.PDOMFile.createPDOMName(PDOMFile.java:306)
	at org.eclipse.cdt.internal.core.pdom.dom.PDOMFile.addNames(PDOMFile.java:273)
	at org.eclipse.cdt.internal.core.pdom.WritablePDOM.addFileContent(WritablePDOM.java:67)
	at org.eclipse.cdt.internal.core.index.WritableCIndex.setFileContent(WritableCIndex.java:75)
	at org.eclipse.cdt.internal.core.pdom.PDOMWriter.storeFileInIndex(PDOMWriter.java:477)
	at org.eclipse.cdt.internal.core.pdom.PDOMWriter.storeSymbolsInIndex(PDOMWriter.java:206)
	at org.eclipse.cdt.internal.core.pdom.PDOMWriter.addSymbols(PDOMWriter.java:162)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.writeToIndex(AbstractIndexerTask.java:719)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.parseFile(AbstractIndexerTask.java:677)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.parseLinkage(AbstractIndexerTask.java:563)
	at org.eclipse.cdt.internal.core.pdom.AbstractIndexerTask.runTask(AbstractIndexerTask.java:314)
	at org.eclipse.cdt.internal.core.pdom.indexer.PDOMIndexerTask.run(PDOMIndexerTask.java:122)
	at org.eclipse.cdt.internal.core.pdom.PDOMIndexerJob.run(PDOMIndexerJob.java:137)
	at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)


Thanks,
Yevgeny
Comment 1 Markus Schorn CLA 2009-11-05 08:03:29 EST
I am pretty sure this is a CDT bug. Looking at the stack-trace I think this is a variation of bug 294306, in that exposing the parameter bindings is just as unsafe as exposing the non-binding types.
Comment 2 Markus Schorn CLA 2009-11-09 10:44:55 EST
Created attachment 151703 [details]
fixes an invalid deletion in the index
Comment 3 Markus Schorn CLA 2009-11-09 10:51:27 EST
In CDT 6.1 will have a safe implementation of storing types in the index. I cannot apply the change to the maintenance stream. 

However, I have also found that updating a class template with a template-template parameter that has a default value can corrupt the index. I have fixed this on the 6.0.x stream.

So depending on where the problem came from it should be fixed (I cannot be sure) in 6.0.x or 6.1 > 20091109.