mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-06-07 17:56: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
|
2005-07-11 Vladimir Hirsl
|
||||||
Fix for PR 100585: [Scanner Discovery - Indexer] Indexer not notified of scanner info change
|
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
|
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.ICElement;
|
||||||
import org.eclipse.cdt.core.model.ICElementDelta;
|
import org.eclipse.cdt.core.model.ICElementDelta;
|
||||||
import org.eclipse.cdt.core.model.ICModelMarker;
|
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.IElementChangedListener;
|
||||||
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.core.parser.util.ArrayUtil;
|
import org.eclipse.cdt.core.parser.util.ArrayUtil;
|
||||||
import org.eclipse.cdt.internal.core.index.IndexRequest;
|
import org.eclipse.cdt.internal.core.index.IndexRequest;
|
||||||
import org.eclipse.cdt.internal.core.index.cindexstorage.CIndexStorage;
|
import org.eclipse.cdt.internal.core.index.cindexstorage.CIndexStorage;
|
||||||
|
@ -98,6 +100,8 @@ public class IndexManager extends JobManager{
|
||||||
|
|
||||||
private ReadWriteMonitor monitor = new ReadWriteMonitor();
|
private ReadWriteMonitor monitor = new ReadWriteMonitor();
|
||||||
|
|
||||||
|
private static ElementChangeListener elementChangeListener = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Flush current state
|
* Flush current state
|
||||||
*/
|
*/
|
||||||
|
@ -110,7 +114,11 @@ public class IndexManager extends JobManager{
|
||||||
this.indexerMap = new HashMap(5);
|
this.indexerMap = new HashMap(5);
|
||||||
|
|
||||||
// subscribe for path entry changes
|
// 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{
|
} finally{
|
||||||
monitor.exitWrite();
|
monitor.exitWrite();
|
||||||
}
|
}
|
||||||
|
@ -152,12 +160,12 @@ public class IndexManager extends JobManager{
|
||||||
ICElement element= delta.getElement();
|
ICElement element= delta.getElement();
|
||||||
|
|
||||||
IResource res = element.getResource();
|
IResource res = element.getResource();
|
||||||
if (res instanceof IProject) {
|
if (element instanceof ICProject && res instanceof IProject) {
|
||||||
currentProject = (IProject) res;
|
currentProject = (IProject) res;
|
||||||
}
|
}
|
||||||
if (isPathEntryChange(delta)) {
|
if (isPathEntryChange(delta)) {
|
||||||
scannerInfoChanged = true;
|
scannerInfoChanged = true;
|
||||||
if (res instanceof IFile) {
|
if (element instanceof ITranslationUnit && res instanceof IFile) {
|
||||||
if (!changedElements.contains(res)) {
|
if (!changedElements.contains(res)) {
|
||||||
changedElements.add(res);
|
changedElements.add(res);
|
||||||
}
|
}
|
||||||
|
@ -328,6 +336,10 @@ public class IndexManager extends JobManager{
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (elementChangeListener != null) {
|
||||||
|
CoreModel.getDefault().removeElementChangedListener(elementChangeListener);
|
||||||
|
elementChangeListener = null;
|
||||||
|
}
|
||||||
super.shutdown();
|
super.shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue