]> granicus.if.org Git - python/commitdiff
Merged revisions 74055 via svnmerge from
authorGeorg Brandl <georg@python.org>
Thu, 13 Aug 2009 12:26:19 +0000 (12:26 +0000)
committerGeorg Brandl <georg@python.org>
Thu, 13 Aug 2009 12:26:19 +0000 (12:26 +0000)
svn+ssh://svn.python.org/python/branches/py3k

(Selected changes only.)

................
  r74055 | alexandre.vassalotti | 2009-07-17 11:18:18 +0200 (Fr, 17 Jul 2009) | 55 lines

  Merged revisions 73995,74002,74005,74007-74008,74011,74019-74023 via svnmerge from
  svn+ssh://pythondev@svn.python.org/python/trunk

  ........
    r74008 | benjamin.peterson | 2009-07-14 20:46:42 -0400 (Tue, 14 Jul 2009) | 1 line

    update year
  ........
    r74011 | ezio.melotti | 2009-07-15 13:07:04 -0400 (Wed, 15 Jul 2009) | 1 line

    methods' names pep8ification
  ........
    r74019 | amaury.forgeotdarc | 2009-07-15 17:29:27 -0400 (Wed, 15 Jul 2009) | 2 lines

    #6076 Add a title to the IDLE Preferences window.
  ........
    r74020 | georg.brandl | 2009-07-16 03:18:07 -0400 (Thu, 16 Jul 2009) | 1 line

    #5910: fix kqueue for calls with more than one event.
  ........
    r74021 | georg.brandl | 2009-07-16 03:33:04 -0400 (Thu, 16 Jul 2009) | 1 line

    #6486: start with built in functions rather than "built in objects".
  ........
    r74022 | georg.brandl | 2009-07-16 03:38:35 -0400 (Thu, 16 Jul 2009) | 1 line

    #6481: fix typo in os.system() replacement.
  ........
    r74023 | jesse.noller | 2009-07-16 10:23:04 -0400 (Thu, 16 Jul 2009) | 1 line

    Issue 6433: multiprocessing.pool.map hangs on empty list
  ........
................

Doc/copyright.rst
Doc/library/intro.rst
Doc/library/subprocess.rst
Lib/idlelib/configDialog.py
Lib/multiprocessing/pool.py
Lib/test/test_kqueue.py
Lib/test/test_multiprocessing.py
Misc/ACKS
Misc/NEWS
Modules/selectmodule.c

index 376b1c4d63d2ba32e99a24877e5a4da2dd422625..ec78a38c38c2dbc38d22ff1332a82420f18e098a 100644 (file)
@@ -4,7 +4,7 @@ Copyright
 
 Python and this documentation is:
 
-Copyright © 2001-2008 Python Software Foundation. All rights reserved.
+Copyright © 2001-2009 Python Software Foundation. All rights reserved.
 
 Copyright © 2000 BeOpen.com. All rights reserved.
 
index ce1691d346b85eb6eebc54c1c8afe977bd9cfa77..a0f2d6324f6539e71d38858ed05df93ce057532b 100644 (file)
@@ -43,8 +43,9 @@ browse the table of contents (in front of the manual), or look for a specific
 function, module or term in the index (in the back).  And finally, if you enjoy
 learning about random subjects, you choose a random page number (see module
 :mod:`random`) and read a section or two.  Regardless of the order in which you
-read the sections of this manual, it helps to start with chapter :ref:`builtin`,
-as the remainder of the manual assumes familiarity with this material.
+read the sections of this manual, it helps to start with chapter
+:ref:`built-in-funcs`, as the remainder of the manual assumes familiarity with
+this material.
 
 Let the show begin!
 
index bf4ead7c88a8284bbe40ef3a0f07451ff397028e..2af54895f9e16cafa8e0ddb8a1b741d06b3f649d 100644 (file)
@@ -424,7 +424,7 @@ Replacing :func:`os.system`
    sts = os.system("mycmd" + " myarg")
    ==>
    p = Popen("mycmd" + " myarg", shell=True)
-   sts = os.waitpid(p.pid, 0)
+   sts = os.waitpid(p.pid, 0)[1]
 
 Notes:
 
index 20ed8278b535cd0c02e5aa8873d3993062dcf8cb..6482119efef76884ad66cf09c213c3d954b0a7d4 100644 (file)
@@ -30,6 +30,7 @@ class ConfigDialog(Toplevel):
         self.wm_withdraw()
 
         self.configure(borderwidth=5)
+        self.title('IDLE Preferences')
         self.geometry("+%d+%d" % (parent.winfo_rootx()+20,
                 parent.winfo_rooty()+30))
         #Theme Elements. Each theme element key is its display name.
index 5c1805f73e9f925f9e6d9895f0f7c488f93ed2df..d3ecc9b84b35a0d3579fd0d74b61fc0ced5c8b24 100644 (file)
@@ -208,6 +208,8 @@ class Pool(object):
             chunksize, extra = divmod(len(iterable), len(self._pool) * 4)
             if extra:
                 chunksize += 1
+        if len(iterable) == 0:
+            chunksize = 0
 
         task_batches = Pool._get_tasks(func, iterable, chunksize)
         result = MapResult(self._cache, chunksize, len(iterable), callback)
index dd1ecc8cf0ba66b4dd9825ec230723d17398474b..5ba21a2765ea5533ecb4eae03ff4b38f56f963e2 100644 (file)
@@ -163,6 +163,22 @@ class TestKQueue(unittest.TestCase):
         server.close()
         serverSocket.close()
 
+    def testPair(self):
+        kq = select.kqueue()
+        a, b = socket.socketpair()
+
+        a.send(b'foo')
+        event1 = select.kevent(a, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE)
+        event2 = select.kevent(b, select.KQ_FILTER_READ, select.KQ_EV_ADD | select.KQ_EV_ENABLE)
+        r = kq.control([event1, event2], 1, 1)
+        self.assertTrue(r)
+        self.assertFalse(r[0].flags & select.KQ_EV_ERROR)
+        self.assertEquals(b.recv(r[0].data), b'foo')
+
+        a.close()
+        b.close()
+        kq.close()
+
 def test_main():
     support.run_unittest(TestKQueue)
 
index 9f4e1a243512db1de0899a63e95aaacc42e3d71d..18066ba18ac0dbae2abdbaf845731c5d0ee128ae 100644 (file)
@@ -991,6 +991,12 @@ class _TestPool(BaseTestCase):
         self.assertEqual(pmap(sqr, list(range(100)), chunksize=20),
                          list(map(sqr, list(range(100)))))
 
+    def test_map_chunksize(self):
+        try:
+            self.pool.map_async(sqr, [], chunksize=1).get(timeout=TIMEOUT1)
+        except multiprocessing.TimeoutError:
+            self.fail("pool.map_async with chunksize stalled on null list")
+
     def test_async(self):
         res = self.pool.apply_async(sqr, (7, TIMEOUT1,))
         get = TimingWrapper(res.get)
index cd8605f34649f773b193c0975776c93cb1dd0ab3..959f2d502afffc3b928714847eac4a2cee92cec2 100644 (file)
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -199,6 +199,7 @@ Walter D
 Hans Eckardt
 Grant Edwards
 John Ehresman
+Eric Eisner
 Andrew Eland
 Lance Ellinghaus
 David Ely
index 3de1557a656dbaf55240484cdc6ba871247ff3b1..2b7fe803e0e5fef97654084ad483cbd5f77783a6 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -950,6 +950,8 @@ Library
 - Issue #6459: distutils.command.build_ext.get_export_symbols now uses the 
   "PyInit" prefix, rather than "init". 
 
+- Issue #6433: fixed issues with multiprocessing.pool.map hanging on empty list
+
 - Issue #6455: Fixed test_build_ext under win32. 
 
 - Issue #6413: Fixed the log level in distutils.dist for announce.
index 191296e0d9e9810df7683d599a8941f196eac577..13ac1150155c6d81e28da7d22629502d16841c36 100644 (file)
@@ -1492,7 +1492,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
        if (nevents < 0) {
                PyErr_Format(PyExc_ValueError,
                        "Length of eventlist must be 0 or positive, got %d",
-                       nchanges);
+                       nevents);
                return NULL;
        }
 
@@ -1550,6 +1550,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
                        PyErr_NoMemory();
                        return NULL;
                }
+               i = 0;
                while ((ei = PyIter_Next(it)) != NULL) {
                        if (!kqueue_event_Check(ei)) {
                                Py_DECREF(ei);
@@ -1558,7 +1559,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
                                        "select.kevent objects");
                                goto error;
                        } else {
-                               chl[i] = ((kqueue_event_Object *)ei)->e;
+                               chl[i++] = ((kqueue_event_Object *)ei)->e;
                        }
                        Py_DECREF(ei);
                }
@@ -1589,7 +1590,7 @@ kqueue_queue_control(kqueue_queue_Object *self, PyObject *args)
                goto error;
        }
 
-       for (i=0; i < gotevents; i++) {
+       for (i = 0; i < gotevents; i++) {
                kqueue_event_Object *ch;
 
                ch = PyObject_New(kqueue_event_Object, &kqueue_event_Type);