Merged revisions 78101,78115,78117,78182,78188,78245,78386,78496 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/trunk

........
  r78101 | georg.brandl | 2010-02-08 01:04:54 +0100 (Mo, 08 Feb 2010) | 1 line

  Fix test_fnmatch.
........
  r78115 | georg.brandl | 2010-02-08 23:40:51 +0100 (Mo, 08 Feb 2010) | 1 line

  Fix missing string formatting placeholder.
........
  r78117 | georg.brandl | 2010-02-08 23:48:37 +0100 (Mo, 08 Feb 2010) | 1 line

  Convert test failure from output-producing to self.fail().
........
  r78182 | georg.brandl | 2010-02-14 09:18:23 +0100 (So, 14 Feb 2010) | 1 line

  #7926: fix stray parens.
........
  r78188 | georg.brandl | 2010-02-14 14:38:12 +0100 (So, 14 Feb 2010) | 1 line

  #7926: fix-up wording.
........
  r78245 | georg.brandl | 2010-02-19 20:36:08 +0100 (Fr, 19 Feb 2010) | 1 line

  #7967: PyXML is no more.
........
  r78386 | georg.brandl | 2010-02-23 22:48:57 +0100 (Di, 23 Feb 2010) | 1 line

  #6544: fix refleak in kqueue, occurring in certain error conditions.
........
  r78496 | georg.brandl | 2010-02-27 15:58:08 +0100 (Sa, 27 Feb 2010) | 1 line

  Link to http://www.python.org/dev/workflow/ from bugs page.
........
diff --git a/Modules/selectmodule.c b/Modules/selectmodule.c
index 9f1b968..c13bab9 100644
--- a/Modules/selectmodule.c
+++ b/Modules/selectmodule.c
@@ -1241,6 +1241,7 @@
 #undef KQ_OFF
 
 static PyObject *
+
 kqueue_event_repr(kqueue_event_Object *s)
 {
 	char buf[1024];
@@ -1526,19 +1527,6 @@
 		return NULL;
 	}
 
-	if (ch != NULL && ch != Py_None) {
-		it = PyObject_GetIter(ch);
-		if (it == NULL) {
-			PyErr_SetString(PyExc_TypeError,
-					"changelist is not iterable");
-			return NULL;
-		}
-		nchanges = PyObject_Size(ch);
-		if (nchanges < 0) {
-			return NULL;
-		}
-	}
-
 	if (otimeout == Py_None || otimeout == NULL) {
 		ptimeoutspec = NULL;
 	}
@@ -1574,11 +1562,22 @@
 		return NULL;
 	}
 
-	if (nchanges) {
+	if (ch != NULL && ch != Py_None) {
+		it = PyObject_GetIter(ch);
+		if (it == NULL) {
+			PyErr_SetString(PyExc_TypeError,
+					"changelist is not iterable");
+			return NULL;
+		}
+		nchanges = PyObject_Size(ch);
+		if (nchanges < 0) {
+			goto error;
+		}
+
 		chl = PyMem_New(struct kevent, nchanges);
 		if (chl == NULL) {
 			PyErr_NoMemory();
-			return NULL;
+			goto error;
 		}
 		i = 0;
 		while ((ei = PyIter_Next(it)) != NULL) {
@@ -1601,7 +1600,7 @@
 		evl = PyMem_New(struct kevent, nevents);
 		if (evl == NULL) {
 			PyErr_NoMemory();
-			return NULL;
+			goto error;
 		}
 	}