The last of the mass checkins for separate (sub)interpreters.
Everything should now work again.

See the comments for the .h files mass checkin (e.g. pystate.h) for
more detail.
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index da40438..68b176f 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -52,8 +52,6 @@
 #include <unistd.h>
 #endif
 
-static PyObject *sysdict;
-
 #ifdef MS_COREDLL
 extern void *PyWin_DLLhModule;
 #endif
@@ -62,7 +60,9 @@
 PySys_GetObject(name)
 	char *name;
 {
-	return PyDict_GetItemString(sysdict, name);
+	PyThreadState *tstate = PyThreadState_Get();
+	PyObject *sd = tstate->interp->sysdict;
+	return PyDict_GetItemString(sd, name);
 }
 
 FILE *
@@ -84,14 +84,16 @@
 	char *name;
 	PyObject *v;
 {
+	PyThreadState *tstate = PyThreadState_Get();
+	PyObject *sd = tstate->interp->sysdict;
 	if (v == NULL) {
-		if (PyDict_GetItemString(sysdict, name) == NULL)
+		if (PyDict_GetItemString(sd, name) == NULL)
 			return 0;
 		else
-			return PyDict_DelItemString(sysdict, name);
+			return PyDict_DelItemString(sd, name);
 	}
 	else
-		return PyDict_SetItemString(sysdict, name, v);
+		return PyDict_SetItemString(sd, name, v);
 }
 
 static PyObject *
@@ -103,8 +105,6 @@
 	if (!PyArg_Parse(args, ""))
 		return NULL;
 	tstate = PyThreadState_Get();
-	if (tstate == NULL)
-		Py_FatalError("sys.exc_info(): no thread state");
 	return Py_BuildValue(
 		"(OOO)",
 		tstate->exc_type != NULL ? tstate->exc_type : Py_None,
@@ -161,7 +161,7 @@
 	PyObject *args;
 {
 	PyThreadState *tstate = PyThreadState_Get();
-	if (!PyArg_ParseTuple(args, "i", &tstate->sys_checkinterval))
+	if (!PyArg_ParseTuple(args, "i", &tstate->interp->checkinterval))
 		return NULL;
 	Py_INCREF(Py_None);
 	return Py_None;
@@ -242,8 +242,6 @@
 	{NULL,		NULL}		/* sentinel */
 };
 
-static PyObject *sysin, *sysout, *syserr;
-
 static PyObject *
 list_builtin_module_names()
 {
@@ -271,24 +269,28 @@
 	return list;
 }
 
-void
-PySys_Init()
+PyObject *
+_PySys_Init()
 {
 	extern int fclose Py_PROTO((FILE *));
-	PyObject *m = Py_InitModule("sys", sys_methods);
-	PyObject *v;
+	PyThreadState *tstate;
+	PyObject *m, *v, *sysdict;
+	PyObject *sysin, *sysout, *syserr;
+
+	m = Py_InitModule("sys", sys_methods);
 	sysdict = PyModule_GetDict(m);
-	Py_INCREF(sysdict);
-	/* NB keep an extra ref to the std files to avoid closing them
-	   when the user deletes them */
-	sysin = PyFile_FromFile(stdin, "<stdin>", "r", fclose);
-	sysout = PyFile_FromFile(stdout, "<stdout>", "w", fclose);
-	syserr = PyFile_FromFile(stderr, "<stderr>", "w", fclose);
+
+	sysin = PyFile_FromFile(stdin, "<stdin>", "r", NULL);
+	sysout = PyFile_FromFile(stdout, "<stdout>", "w", NULL);
+	syserr = PyFile_FromFile(stderr, "<stderr>", "w", NULL);
 	if (PyErr_Occurred())
-		Py_FatalError("can't initialize sys.std{in,out,err}");
+		return NULL;
 	PyDict_SetItemString(sysdict, "stdin", sysin);
 	PyDict_SetItemString(sysdict, "stdout", sysout);
 	PyDict_SetItemString(sysdict, "stderr", syserr);
+	Py_XDECREF(sysin);
+	Py_XDECREF(sysout);
+	Py_XDECREF(syserr);
 	PyDict_SetItemString(sysdict, "version",
 			     v = PyString_FromString(Py_GetVersion()));
 	Py_XDECREF(v);
@@ -310,7 +312,6 @@
 	PyDict_SetItemString(sysdict, "maxint",
 			     v = PyInt_FromLong(PyInt_GetMax()));
 	Py_XDECREF(v);
-	PyDict_SetItemString(sysdict, "modules", PyImport_GetModuleDict());
 	PyDict_SetItemString(sysdict, "builtin_module_names",
 		   v = list_builtin_module_names());
 	Py_XDECREF(v);
@@ -323,7 +324,8 @@
 	Py_XDECREF(v);
 #endif
 	if (PyErr_Occurred())
-		Py_FatalError("can't insert sys.* objects in sys dict");
+		return NULL;
+	return m;
 }
 
 static PyObject *