Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
RE: [cdt-patch] Core startup/shutdown

The patch looks fine, but I just want to make sure everyone is thinking
about ways of not doing things on startup, at least where it makes sense.
This is one of the Achilles heals of eclipse, especially with products that
have lots of plugins.

Cheers,
Doug Schaefer
Rational Software - IBM Software Group
Ottawa (Kanata), Ontario, Canada
 

-----Original Message-----
From: Alain Magloire [mailto:alain@xxxxxxx] 
Sent: Thursday, April 10, 2003 10:07 AM
To: cdt-patch@xxxxxxxxxxx
Subject: [cdt-patch] Core startup/shutdown


Index: ChangeLog
===================================================================
RCS file: /home/tools/org.eclipse.cdt.core/ChangeLog,v
retrieving revision 1.86
diff -u -r1.86 ChangeLog
--- ChangeLog	9 Apr 2003 03:07:30 -0000	1.86
+++ ChangeLog	10 Apr 2003 01:10:22 -0000
@@ -1,3 +1,18 @@
+2003-04-09 Alain Magloire
+
+	Give a chance to the manager to initialize and shutdown gracefully.
+	The CCorePlugin will call the managers, indexer, coreModel,
CDescriptorManager
+	startup() method and shutdown() method.
+
+	* src/org/eclipse/cdt/core/CCorePlugin.java:
+	Call {IndexModel,CoreModel}.{startup,shutdown}().
+	* model/org/eclipse/cdt/core/model/CoreModel.java:
+	New methods startup/shutdown.
+	* model/org/eclipse/cdt/internal/core/mode/CModelManager.java:
+	implement startup/shutdown.
+	* index/org/eclipse/cdt/core/model/IndexModel.java:
+	New methods startup/shutdown.
+
 2003-04-08 Alain Magloire
 
 	* model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java:
Index: index/org/eclipse/cdt/core/index/IndexModel.java
===================================================================
RCS file:
/home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/core/index/IndexModel
.java,v
retrieving revision 1.4
diff -u -r1.4 IndexModel.java
--- index/org/eclipse/cdt/core/index/IndexModel.java	12 Nov 2002 22:16:00
-0000	1.4
+++ index/org/eclipse/cdt/core/index/IndexModel.java	10 Apr 2003 01:10:23
-0000
@@ -89,6 +89,20 @@
 	}
 
 	/**
+	 * 
+	 */
+	public void startup() {
+		manager.startup();
+	}
+
+	/**
+	 * 
+	 */
+	public void shutdown() {
+		manager.shutdown();		
+	}
+
+	/**
 	 * Initialize default index Model.
 	 */
 	public static IndexModel getDefault() {
@@ -101,4 +115,5 @@
 
 	private IndexModel () {
 	}
+
 }
Index: index/org/eclipse/cdt/internal/core/index/IndexManager.java
===================================================================
RCS file:
/home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/I
ndexManager.java,v
retrieving revision 1.8
diff -u -r1.8 IndexManager.java
--- index/org/eclipse/cdt/internal/core/index/IndexManager.java	27 Mar 2003
19:29:40 -0000	1.8
+++ index/org/eclipse/cdt/internal/core/index/IndexManager.java	10 Apr 2003
01:10:24 -0000
@@ -78,7 +78,7 @@
 		return projectsMap;
 	}
 
-	protected void init () {
+	public void startup () {
 		requestList = new RequestList();
 		projectsMap = Collections.synchronizedMap(new HashMap());
 		CTagsRunner ctags = new CTagsRunner(this);
@@ -155,7 +155,9 @@
 
 	public void clearRequestList(IResource resource) {
 		if (resource instanceof IFile) {
-			requestList.removeItem(resource);
+			if (requestList != null) {
+				requestList.removeItem(resource);
+			}
 		} else if (resource instanceof IContainer) {
 			try {
 				IContainer container = (IContainer)resource;
@@ -189,7 +191,9 @@
 	public void addFile(IFile file) {
 		if (CoreModel.getDefault().isTranslationUnit(file) &&
 
IndexModel.getDefault().isEnabled(file.getProject())) {
-			requestList.addItem(file);
+			if (requestList != null) {
+				requestList.addItem(file);
+			}
 		}
 	}
 
@@ -248,7 +252,6 @@
 	public static IndexManager getDefault() {
 		if (indexManager == null) {
 			indexManager = new IndexManager();
-			indexManager.init();
 			// Register to the C Core Model for C specific
changes.
 
CoreModel.getDefault().addElementChangedListener(indexManager);
 		}
Index: index/org/eclipse/cdt/internal/core/index/RequestList.java
===================================================================
RCS file:
/home/tools/org.eclipse.cdt.core/index/org/eclipse/cdt/internal/core/index/R
equestList.java,v
retrieving revision 1.2
diff -u -r1.2 RequestList.java
--- index/org/eclipse/cdt/internal/core/index/RequestList.java	12 Nov 2002
20:52:39 -0000	1.2
+++ index/org/eclipse/cdt/internal/core/index/RequestList.java	10 Apr 2003
01:10:24 -0000
@@ -54,8 +54,8 @@
 		//print("in addItem() - leaving");
 	}
 
-	private static void print(String msg) {
-		String name = Thread.currentThread().getName();
-		System.out.println(name + ": " + msg);
-	}
+//	private static void print(String msg) {
+//		String name = Thread.currentThread().getName();
+//		System.out.println(name + ": " + msg);
+//	}
 }
Index: model/org/eclipse/cdt/core/model/CoreModel.java
===================================================================
RCS file:
/home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/core/model/CoreModel.
java,v
retrieving revision 1.10
diff -u -r1.10 CoreModel.java
--- model/org/eclipse/cdt/core/model/CoreModel.java	27 Mar 2003 16:04:19
-0000	1.10
+++ model/org/eclipse/cdt/core/model/CoreModel.java	10 Apr 2003 01:10:25
-0000
@@ -185,6 +185,17 @@
 		manager.removeElementChangedListener(listener);
 	}
 
+	/**
+	 * @see Plugin#startup
+	 */
+	public void startup() {
+		manager.startup();
+	}
+
+	public void shutdown() {
+		manager.shutdown();
+	}
+
 	private CoreModel() {
 	}
 
Index: model/org/eclipse/cdt/internal/core/model/CModelManager.java
===================================================================
RCS file:
/home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/C
ModelManager.java,v
retrieving revision 1.20
diff -u -r1.20 CModelManager.java
--- model/org/eclipse/cdt/internal/core/model/CModelManager.java	2
Apr 2003 04:55:44 -0000	1.20
+++ model/org/eclipse/cdt/internal/core/model/CModelManager.java	10
Apr 2003 01:10:27 -0000
@@ -747,5 +747,25 @@
 	protected void removeInfo(ICElement element) {
 		this.cache.removeInfo(element);
 	}
+
+	/**
+	 * 
+	 */
+	public void startup() {
+		// Do any initialization.	
+	}
+
+	/**
+	 * 
+	 */
+	public void shutdown() {
+		// Do any shutdown of services.
+		BinaryRunner[] runners =
(BinaryRunner[])binaryRunners.values().toArray(new BinaryRunner[0]);
+		for (int i = 0; i < runners.length; i++) {
+			if (runners[i].isAlive()) {
+				runners[i].interrupt();
+			}
+		}
+	}
 	
 }
Index: model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java
===================================================================
RCS file:
/home/tools/org.eclipse.cdt.core/model/org/eclipse/cdt/internal/core/model/D
eltaProcessor.java,v
retrieving revision 1.6
diff -u -r1.6 DeltaProcessor.java
--- model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java	9
Apr 2003 20:08:50 -0000	1.6
+++ model/org/eclipse/cdt/internal/core/model/DeltaProcessor.java	10
Apr 2003 01:10:28 -0000
@@ -10,7 +10,6 @@
 import org.eclipse.cdt.core.model.ICElement;
 import org.eclipse.cdt.core.model.ICElementDelta;
 import org.eclipse.cdt.core.model.ICModel;
-import org.eclipse.cdt.core.model.ICModelStatusConstants;
 import org.eclipse.cdt.core.model.IParent;
 import org.eclipse.core.resources.IProject;
 import org.eclipse.core.resources.IResource;
@@ -249,11 +248,6 @@
 			return CoreModel.getDefault().hasCNature(project);
 		}
 		return false;
-	}
-
-
-	private CModelException newInvalidElementType() {
-		return new CModelException(new
CModelStatus(ICModelStatusConstants.INVALID_ELEMENT_TYPES));
 	}
 
 	/**
Index: src/org/eclipse/cdt/core/CCorePlugin.java
===================================================================
RCS file:
/home/tools/org.eclipse.cdt.core/src/org/eclipse/cdt/core/CCorePlugin.java,v
retrieving revision 1.16
diff -u -r1.16 CCorePlugin.java
--- src/org/eclipse/cdt/core/CCorePlugin.java	2 Apr 2003 21:30:22 -0000
1.16
+++ src/org/eclipse/cdt/core/CCorePlugin.java	10 Apr 2003 01:10:30 -0000
@@ -52,6 +52,8 @@
 	private static ResourceBundle fgResourceBundle;
 
 	private CDescriptorManager fDescriptorManager;
+	private CoreModel fCoreModel;
+	private IndexModel fIndexModel;
 
 	// -------- static methods --------
 
@@ -113,7 +115,15 @@
 	 */
 	public void shutdown() throws CoreException {
 		super.shutdown();
-		fDescriptorManager.shutdown();
+		if (fDescriptorManager != null) {
+			fDescriptorManager.shutdown();
+		}
+		if (fIndexModel != null) {
+			fIndexModel.shutdown();
+		}
+		if (fCoreModel != null) {
+			fCoreModel.shutdown();
+		}
 	}
 
 	/**
@@ -123,9 +133,13 @@
 		super.startup();
 
 		// Fired up the model.
-		getCoreModel();
+		fCoreModel = CoreModel.getDefault();
+		fCoreModel.startup();
+
 		// Fired up the indexer. It should delay itself for 10
seconds
-		getIndexModel();
+		fIndexModel = IndexModel.getDefault();
+		fIndexModel.startup();
+
 		fDescriptorManager = new CDescriptorManager();
 		fDescriptorManager.startup();
 		
@@ -206,11 +220,11 @@
 	}
 
 	public CoreModel getCoreModel() {
-		return CoreModel.getDefault();
+		return fCoreModel;
 	}
 
 	public IndexModel getIndexModel() {
-		return IndexModel.getDefault();
+		return fIndexModel;
 	}
 
 	public ICDescriptor getCProjectDescription(IProject project) throws
CoreException {

_______________________________________________
cdt-patch mailing list
cdt-patch@xxxxxxxxxxx
http://dev.eclipse.org/mailman/listinfo/cdt-patch


Back to the top