Fixed very nasty null-dereferencing bug in DisposeControl/destroy
object.
diff --git a/Mac/Modules/ctl/Ctlmodule.c b/Mac/Modules/ctl/Ctlmodule.c
index 629d3fb..526338b 100644
--- a/Mac/Modules/ctl/Ctlmodule.c
+++ b/Mac/Modules/ctl/Ctlmodule.c
@@ -92,23 +92,10 @@
 static void CtlObj_dealloc(self)
 	ControlObject *self;
 {
-	SetCRefCon(self->ob_itself, (long)0); /* Make it forget about us */
+	if (self->ob_itself) SetCRefCon(self->ob_itself, (long)0); /* Make it forget about us */
 	PyMem_DEL(self);
 }
 
-static PyObject *CtlObj_DisposeControl(_self, _args)
-	ControlObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	if (!PyArg_ParseTuple(_args, ""))
-		return NULL;
-	DisposeControl(_self->ob_itself);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *CtlObj_ShowControl(_self, _args)
 	ControlObject *_self;
 	PyObject *_args;
@@ -452,9 +439,26 @@
 
 }
 
+static PyObject *CtlObj_DisposeControl(_self, _args)
+	ControlObject *_self;
+	PyObject *_args;
+{
+	PyObject *_res = NULL;
+
+		if (!PyArg_ParseTuple(_args, ""))
+			return NULL;
+		if ( _self->ob_itself ) {
+			SetCRefCon(_self->ob_itself, (long)0); /* Make it forget about us */
+			DisposeControl(_self->ob_itself);
+			_self->ob_itself = NULL;
+		}
+		Py_INCREF(Py_None);
+		_res = Py_None;
+		return _res;
+
+}
+
 static PyMethodDef CtlObj_methods[] = {
-	{"DisposeControl", (PyCFunction)CtlObj_DisposeControl, 1,
-	 "() -> None"},
 	{"ShowControl", (PyCFunction)CtlObj_ShowControl, 1,
 	 "() -> None"},
 	{"HideControl", (PyCFunction)CtlObj_HideControl, 1,
@@ -499,6 +503,8 @@
 	 "() -> (SInt32 _rv)"},
 	{"as_Resource", (PyCFunction)CtlObj_as_Resource, 1,
 	 "Return this Control as a Resource"},
+	{"DisposeControl", (PyCFunction)CtlObj_DisposeControl, 1,
+	 "() -> None"},
 	{NULL, NULL, 0}
 };
 
@@ -588,21 +594,6 @@
 	return _res;
 }
 
-static PyObject *Ctl_KillControls(_self, _args)
-	PyObject *_self;
-	PyObject *_args;
-{
-	PyObject *_res = NULL;
-	WindowPtr theWindow;
-	if (!PyArg_ParseTuple(_args, "O&",
-	                      WinObj_Convert, &theWindow))
-		return NULL;
-	KillControls(theWindow);
-	Py_INCREF(Py_None);
-	_res = Py_None;
-	return _res;
-}
-
 static PyObject *Ctl_DrawControls(_self, _args)
 	PyObject *_self;
 	PyObject *_args;
@@ -663,8 +654,6 @@
 	 "(WindowPtr theWindow, Rect boundsRect, Str255 title, Boolean visible, SInt16 value, SInt16 min, SInt16 max, SInt16 procID, SInt32 refCon) -> (ControlHandle _rv)"},
 	{"GetNewControl", (PyCFunction)Ctl_GetNewControl, 1,
 	 "(SInt16 controlID, WindowPtr owner) -> (ControlHandle _rv)"},
-	{"KillControls", (PyCFunction)Ctl_KillControls, 1,
-	 "(WindowPtr theWindow) -> None"},
 	{"DrawControls", (PyCFunction)Ctl_DrawControls, 1,
 	 "(WindowPtr theWindow) -> None"},
 	{"UpdateControls", (PyCFunction)Ctl_UpdateControls, 1,
diff --git a/Mac/Modules/ctl/ctledit.py b/Mac/Modules/ctl/ctledit.py
index d877012..9240851 100644
--- a/Mac/Modules/ctl/ctledit.py
+++ b/Mac/Modules/ctl/ctledit.py
@@ -6,3 +6,21 @@
 f.docstring = lambda : "Return this Control as a Resource"
 
 methods.append(f)
+
+DisposeControl_body = """
+	if (!PyArg_ParseTuple(_args, ""))
+		return NULL;
+	if ( _self->ob_itself ) {
+		SetCRefCon(_self->ob_itself, (long)0); /* Make it forget about us */
+		DisposeControl(_self->ob_itself);
+		_self->ob_itself = NULL;
+	}
+	Py_INCREF(Py_None);
+	_res = Py_None;
+	return _res;
+"""
+
+f = ManualGenerator("DisposeControl", DisposeControl_body)
+f.docstring = lambda : "() -> None"
+
+methods.append(f)
diff --git a/Mac/Modules/ctl/ctlscan.py b/Mac/Modules/ctl/ctlscan.py
index 661cbfe..d3e185e 100644
--- a/Mac/Modules/ctl/ctlscan.py
+++ b/Mac/Modules/ctl/ctlscan.py
@@ -30,7 +30,7 @@
 
 	def makeblacklistnames(self):
 		return [
-			'DisposeControl' # Implied by deletion of control object
+			'DisposeControl', # Generated manually
 			'KillControls', # Implied by close of dialog
 			'SetCtlAction',
 			]
diff --git a/Mac/Modules/ctl/ctlsupport.py b/Mac/Modules/ctl/ctlsupport.py
index cef9f8a..3b32164 100644
--- a/Mac/Modules/ctl/ctlsupport.py
+++ b/Mac/Modules/ctl/ctlsupport.py
@@ -69,7 +69,7 @@
 		GlobalObjectDefinition.outputInitStructMembers(self)
 		Output("SetCRefCon(itself, (long)it);")
 	def outputCleanupStructMembers(self):
-		Output("SetCRefCon(self->ob_itself, (long)0); /* Make it forget about us */")
+		Output("if (self->ob_itself) SetCRefCon(self->ob_itself, (long)0); /* Make it forget about us */")
 		
 # Create the generator groups and link them
 module = MacModule(MODNAME, MODPREFIX, includestuff, finalstuff, initstuff)