mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-06 17:26:01 +02:00
Fix for PR 103428: IndexerManager leaks elementchangelisteners on reset()
In case of indexer thread restart after crash/shutdown previous listener is deregistered before registering a new one.
This commit is contained in:
parent
0caa2a5bd5
commit
da12ba63cf
2 changed files with 22 additions and 3 deletions
|
@ -1,3 +1,10 @@
|
|||
2005-07-13 Vladimir Hirsl
|
||||
Fix for PR 103428: IndexerManager leaks elementchangelisteners on reset()
|
||||
In case of indexer thread restart after crash/shutdown previous listener is
|
||||
deregistered before registering a new one.
|
||||
|
||||
* index/org/eclipse/cdt/internal/core/search/indexing/IndexManager.java
|
||||
|
||||
2005-07-11 Vladimir Hirsl
|
||||
Fix for PR 100585: [Scanner Discovery - Indexer] Indexer not notified of scanner info change
|
||||
Change in project/file scanner info will now cause whole project or just affected files
|
||||
|
|
|
@ -26,7 +26,9 @@ import org.eclipse.cdt.core.model.ElementChangedEvent;
|
|||
import org.eclipse.cdt.core.model.ICElement;
|
||||
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||
import org.eclipse.cdt.core.model.ICModelMarker;
|
||||
import org.eclipse.cdt.core.model.ICProject;
|
||||
import org.eclipse.cdt.core.model.IElementChangedListener;
|
||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||
import org.eclipse.cdt.core.parser.util.ArrayUtil;
|
||||
import org.eclipse.cdt.internal.core.index.IndexRequest;
|
||||
import org.eclipse.cdt.internal.core.index.cindexstorage.CIndexStorage;
|
||||
|
@ -98,6 +100,8 @@ public class IndexManager extends JobManager{
|
|||
|
||||
private ReadWriteMonitor monitor = new ReadWriteMonitor();
|
||||
|
||||
private static ElementChangeListener elementChangeListener = null;
|
||||
|
||||
/**
|
||||
* Flush current state
|
||||
*/
|
||||
|
@ -110,7 +114,11 @@ public class IndexManager extends JobManager{
|
|||
this.indexerMap = new HashMap(5);
|
||||
|
||||
// subscribe for path entry changes
|
||||
CoreModel.getDefault().addElementChangedListener(new ElementChangeListener());
|
||||
if (elementChangeListener != null) {
|
||||
CoreModel.getDefault().removeElementChangedListener(elementChangeListener);
|
||||
}
|
||||
elementChangeListener = new ElementChangeListener();
|
||||
CoreModel.getDefault().addElementChangedListener(elementChangeListener);
|
||||
} finally{
|
||||
monitor.exitWrite();
|
||||
}
|
||||
|
@ -152,12 +160,12 @@ public class IndexManager extends JobManager{
|
|||
ICElement element= delta.getElement();
|
||||
|
||||
IResource res = element.getResource();
|
||||
if (res instanceof IProject) {
|
||||
if (element instanceof ICProject && res instanceof IProject) {
|
||||
currentProject = (IProject) res;
|
||||
}
|
||||
if (isPathEntryChange(delta)) {
|
||||
scannerInfoChanged = true;
|
||||
if (res instanceof IFile) {
|
||||
if (element instanceof ITranslationUnit && res instanceof IFile) {
|
||||
if (!changedElements.contains(res)) {
|
||||
changedElements.add(res);
|
||||
}
|
||||
|
@ -328,6 +336,10 @@ public class IndexManager extends JobManager{
|
|||
}
|
||||
}
|
||||
|
||||
if (elementChangeListener != null) {
|
||||
CoreModel.getDefault().removeElementChangedListener(elementChangeListener);
|
||||
elementChangeListener = null;
|
||||
}
|
||||
super.shutdown();
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue