Hello community,

here is the log from the commit of package python-billiard for openSUSE:Factory 
checked in at 2019-09-23 12:10:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-billiard (Old)
 and      /work/SRC/openSUSE:Factory/.python-billiard.new.7948 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-billiard"

Mon Sep 23 12:10:13 2019 rev:18 rq:730686 version:3.6.1.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/python-billiard/python-billiard.changes  
2019-06-04 12:10:03.279866690 +0200
+++ 
/work/SRC/openSUSE:Factory/.python-billiard.new.7948/python-billiard.changes    
    2019-09-23 12:10:18.285876695 +0200
@@ -1,0 +2,11 @@
+Fri Sep 13 11:19:39 UTC 2019 - Tomáš Chvátal <[email protected]>
+
+- Update to 3.6.1.0:
+  - Logging max memory reached at INFO rather than WARNING (#255)
+  - Pass arguments when wrapping sys.exit (#275) 
+  - Remove win32/py2k special (#276) 
+  - Ensure READY messages sent out by exiting worker are consumed prior to it 
actually existing.
+  - Pass max_memory_per_child to child worker process (#251)
+  - Fix compatibility with Python 2.7 on Windows (#283) 
+
+-------------------------------------------------------------------

Old:
----
  billiard-3.6.0.0.tar.gz

New:
----
  billiard-3.6.1.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-billiard.spec ++++++
--- /var/tmp/diff_new_pack.urXzch/_old  2019-09-23 12:10:20.109876394 +0200
+++ /var/tmp/diff_new_pack.urXzch/_new  2019-09-23 12:10:20.113876394 +0200
@@ -18,7 +18,7 @@
 
 %{?!python_module:%define python_module() python-%{**} python3-%{**}}
 Name:           python-billiard
-Version:        3.6.0.0
+Version:        3.6.1.0
 Release:        0
 Summary:        Python multiprocessing fork
 License:        BSD-3-Clause
@@ -27,7 +27,7 @@
 Source:         
https://files.pythonhosted.org/packages/source/b/billiard/billiard-%{version}.tar.gz
 BuildRequires:  %{python_module case >= 1.3.1}
 BuildRequires:  %{python_module psutil}
-BuildRequires:  %{python_module pytest >= 3.0}
+BuildRequires:  %{python_module pytest < 5}
 BuildRequires:  %{python_module setuptools}
 BuildRequires:  fdupes
 BuildRequires:  python-rpm-macros

++++++ billiard-3.6.0.0.tar.gz -> billiard-3.6.1.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/CHANGES.txt 
new/billiard-3.6.1.0/CHANGES.txt
--- old/billiard-3.6.0.0/CHANGES.txt    2019-02-04 06:56:37.000000000 +0100
+++ new/billiard-3.6.1.0/CHANGES.txt    2019-08-14 18:05:59.000000000 +0200
@@ -1,4 +1,19 @@
-3.6.0.0 - 2018-02-04
+3.6.1 - 2019-08-14
+--------------------
+
+- Logging max memory reached at INFO rather than WARNING (#255)
+
+-  Pass arguments when wrapping sys.exit (#275) 
+
+-  Remove win32/py2k special (#276) 
+
+- Ensure READY messages sent out by exiting worker are consumed prior to it 
actually existing.
+
+- Pass max_memory_per_child to child worker process (#251)
+
+- Fix compatibility with Python 2.7 on Windows (#283) 
+
+3.6.0.0 - 2019-02-04
 --------------------
 
 - Add support of sending parent process death signal.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/Modules/_billiard/multiprocessing.h 
new/billiard-3.6.1.0/Modules/_billiard/multiprocessing.h
--- old/billiard-3.6.0.0/Modules/_billiard/multiprocessing.h    2018-12-03 
12:24:37.000000000 +0100
+++ new/billiard-3.6.1.0/Modules/_billiard/multiprocessing.h    2019-08-14 
17:53:16.000000000 +0200
@@ -4,7 +4,7 @@
 #define PY_SSIZE_T_CLEAN
 
 #ifdef __sun
-/* The control message API is only available on Solaris 
+/* The control message API is only available on Solaris
    if XPG 4.2 or later is requested. */
 #define _XOPEN_SOURCE 500
 #endif
@@ -37,7 +37,7 @@
 #    include <semaphore.h>
      typedef sem_t *SEM_HANDLE;
 #  endif
-#  define HANDLE int
+#  define HANDLE long
 #  define SOCKET int
 #  define BOOL int
 #  define UINT32 uint32_t
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/Modules/_billiard/win32_functions.c 
new/billiard-3.6.1.0/Modules/_billiard/win32_functions.c
--- old/billiard-3.6.0.0/Modules/_billiard/win32_functions.c    2018-12-03 
12:24:37.000000000 +0100
+++ new/billiard-3.6.1.0/Modules/_billiard/win32_functions.c    2019-08-14 
17:53:16.000000000 +0200
@@ -551,7 +551,7 @@
     else
         buf = &_buf;
 
-    if (!PyArg_Parse(bufobj, "y*", buf)) {
+    if (!PyArg_Parse(bufobj, "s*", buf)) {
         Py_XDECREF(overlapped);
         return NULL;
     }
@@ -685,7 +685,7 @@
         Py_DECREF(v);
     }
     /* If this is the main thread then make the wait interruptible
-       by Ctrl-C unless we are waiting for *all* handles 
+       by Ctrl-C unless we are waiting for *all* handles
     if (!wait_flag && _PyOS_IsMainThread()) {
         sigint_event = _PyOS_SigintEvent();
         assert(sigint_event != NULL);
@@ -904,6 +904,7 @@
     WIN32_CONSTANT(F_DWORD, ERROR_BROKEN_PIPE);
     WIN32_CONSTANT(F_DWORD, ERROR_IO_PENDING);
     WIN32_CONSTANT(F_DWORD, ERROR_NETNAME_DELETED);
+    WIN32_CONSTANT(F_DWORD, ERROR_OPERATION_ABORTED);
     WIN32_CONSTANT(F_DWORD, GENERIC_READ);
     WIN32_CONSTANT(F_DWORD, GENERIC_WRITE);
     WIN32_CONSTANT(F_DWORD, DUPLICATE_SAME_ACCESS);
@@ -924,6 +925,8 @@
     WIN32_CONSTANT(F_DWORD, WAIT_TIMEOUT);
     WIN32_CONSTANT(F_DWORD, FILE_FLAG_FIRST_PIPE_INSTANCE);
     WIN32_CONSTANT(F_DWORD, FILE_FLAG_OVERLAPPED);
+    WIN32_CONSTANT(F_DWORD, FILE_GENERIC_READ);
+    WIN32_CONSTANT(F_DWORD, FILE_GENERIC_WRITE);
 
     WIN32_CONSTANT("i", NULL);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/PKG-INFO 
new/billiard-3.6.1.0/PKG-INFO
--- old/billiard-3.6.0.0/PKG-INFO       2019-02-04 07:00:30.000000000 +0100
+++ new/billiard-3.6.1.0/PKG-INFO       2019-08-14 18:09:00.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: billiard
-Version: 3.6.0.0
+Version: 3.6.1.0
 Summary: Python multiprocessing fork with improvements and bugfixes
 Home-page: https://github.com/celery/billiard
 Author: R Oudkerk / Python Software Foundation
@@ -42,7 +42,7 @@
         About
         -----
         
-        `billiard` is a fork of the Python 2.7 `multiprocessing 
<https://docs.python.org/library/multiprocessing.html>`_
+        ``billiard`` is a fork of the Python 2.7 `multiprocessing 
<https://docs.python.org/library/multiprocessing.html>`_
         package. The multiprocessing package itself is a renamed and updated 
version of
         R Oudkerk's `pyprocessing <https://pypi.org/project/processing/>`_ 
package.
         This standalone variant draws its fixes/improvements from python-trunk 
and provides
@@ -50,9 +50,9 @@
         
         - This package would not be possible if not for the contributions of 
not only
           the current maintainers but all of the contributors to the original 
pyprocessing
-          package listed `here 
<http://pyprocessing.berlios.de/doc/THANKS.html>`_
+          package listed `here 
<http://pyprocessing.berlios.de/doc/THANKS.html>`_.
         
-        - Also it is a fork of the multiprocessing backport package by 
Christian Heims.
+        - Also, it is a fork of the multiprocessing backport package by 
Christian Heims.
         
         - It includes the no-execv patch contributed by R. Oudkerk.
         
@@ -63,6 +63,11 @@
         
         .. _`Celery`: http://celeryproject.org
         
+        Documentation
+        -------------
+        
+        The documentation for ``billiard`` is available on `Read the Docs 
<https://billiard.readthedocs.io>`_.
+        
         Bug reporting
         -------------
         
@@ -79,9 +84,9 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: Jython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/README.rst 
new/billiard-3.6.1.0/README.rst
--- old/billiard-3.6.0.0/README.rst     2019-02-04 06:57:33.000000000 +0100
+++ new/billiard-3.6.1.0/README.rst     2019-08-14 17:53:16.000000000 +0200
@@ -32,7 +32,7 @@
 About
 -----
 
-`billiard` is a fork of the Python 2.7 `multiprocessing 
<https://docs.python.org/library/multiprocessing.html>`_
+``billiard`` is a fork of the Python 2.7 `multiprocessing 
<https://docs.python.org/library/multiprocessing.html>`_
 package. The multiprocessing package itself is a renamed and updated version of
 R Oudkerk's `pyprocessing <https://pypi.org/project/processing/>`_ package.
 This standalone variant draws its fixes/improvements from python-trunk and 
provides
@@ -40,9 +40,9 @@
 
 - This package would not be possible if not for the contributions of not only
   the current maintainers but all of the contributors to the original 
pyprocessing
-  package listed `here <http://pyprocessing.berlios.de/doc/THANKS.html>`_
+  package listed `here <http://pyprocessing.berlios.de/doc/THANKS.html>`_.
 
-- Also it is a fork of the multiprocessing backport package by Christian Heims.
+- Also, it is a fork of the multiprocessing backport package by Christian 
Heims.
 
 - It includes the no-execv patch contributed by R. Oudkerk.
 
@@ -53,6 +53,11 @@
 
 .. _`Celery`: http://celeryproject.org
 
+Documentation
+-------------
+
+The documentation for ``billiard`` is available on `Read the Docs 
<https://billiard.readthedocs.io>`_.
+
 Bug reporting
 -------------
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard/__init__.py 
new/billiard-3.6.1.0/billiard/__init__.py
--- old/billiard-3.6.0.0/billiard/__init__.py   2019-02-04 06:57:14.000000000 
+0100
+++ new/billiard-3.6.1.0/billiard/__init__.py   2019-08-14 18:07:35.000000000 
+0200
@@ -22,7 +22,7 @@
 import sys
 from . import context
 
-VERSION = (3, 6, 0, 0)
+VERSION = (3, 6, 1, 0)
 __version__ = '.'.join(map(str, VERSION[0:4])) + "".join(VERSION[4:])
 __author__ = 'R Oudkerk / Python Software Foundation'
 __author_email__ = '[email protected]'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard/connection.py 
new/billiard-3.6.1.0/billiard/connection.py
--- old/billiard-3.6.0.0/billiard/connection.py 2018-12-03 12:24:37.000000000 
+0100
+++ new/billiard-3.6.1.0/billiard/connection.py 2019-08-14 17:53:16.000000000 
+0200
@@ -38,10 +38,8 @@
 else:
     if sys.platform == 'win32':
         WAIT_OBJECT_0 = _winapi.WAIT_OBJECT_0
-        try:
-            WAIT_ABANDONED_0 = _winapi.WAIT_ABANDONED_0
-        except AttributeError:
-            WAIT_ABANDONED_0 = 128  # noqa
+        WAIT_ABANDONED_0 = _winapi.WAIT_ABANDONED_0
+
         WAIT_TIMEOUT = _winapi.WAIT_TIMEOUT
         INFINITE = _winapi.INFINITE
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard/pool.py 
new/billiard-3.6.1.0/billiard/pool.py
--- old/billiard-3.6.0.0/billiard/pool.py       2019-02-04 06:39:49.000000000 
+0100
+++ new/billiard-3.6.1.0/billiard/pool.py       2019-08-14 17:53:16.000000000 
+0200
@@ -44,7 +44,7 @@
     WorkerLostError,
 )
 from .five import Empty, Queue, range, values, reraise, monotonic
-from .util import Finalize, debug
+from .util import Finalize, debug, warning
 
 MAXMEM_USED_FMT = """\
 child process exiting after exceeding memory limit ({0}KiB / {1}KiB)
@@ -110,6 +110,8 @@
 
 LOST_WORKER_TIMEOUT = 10.0
 EX_OK = getattr(os, "EX_OK", 0)
+GUARANTEE_MESSAGE_CONSUMPTION_RETRY_LIMIT = 300
+GUARANTEE_MESSAGE_CONSUMPTION_RETRY_INTERVAL = 0.1
 
 job_counter = itertools.count()
 
@@ -236,7 +238,7 @@
     def __init__(self, inq, outq, synq=None, initializer=None, initargs=(),
                  maxtasks=None, sentinel=None, on_exit=None,
                  sigprotection=True, wrap_exception=True,
-                 max_memory_per_child=None):
+                 max_memory_per_child=None, on_ready_counter=None):
         assert maxtasks is None or (type(maxtasks) == int and maxtasks > 0)
         self.initializer = initializer
         self.initargs = initargs
@@ -247,6 +249,7 @@
         self.sigprotection = sigprotection
         self.inq, self.outq, self.synq = inq, outq, synq
         self.wrap_exception = wrap_exception  # XXX cannot disable yet
+        self.on_ready_counter = on_ready_counter
         self.contribute_to_object(self)
 
     def contribute_to_object(self, obj):
@@ -268,7 +271,7 @@
         return self.__class__, (
             self.inq, self.outq, self.synq, self.initializer,
             self.initargs, self.maxtasks, self._shutdown, self.on_exit,
-            self.sigprotection, self.wrap_exception,
+            self.sigprotection, self.wrap_exception, self.max_memory_per_child,
         )
 
     def __call__(self):
@@ -277,7 +280,7 @@
 
         def exit(status=None):
             _exitcode[0] = status
-            return _exit()
+            return _exit(status)
         sys.exit = exit
 
         pid = os.getpid()
@@ -343,47 +346,70 @@
                 i += 1
 
         completed = 0
-        while maxtasks is None or (maxtasks and completed < maxtasks):
-            req = wait_for_job()
-            if req:
-                type_, args_ = req
-                assert type_ == TASK
-                job, i, fun, args, kwargs = args_
-                put((ACK, (job, i, now(), pid, synqW_fd)))
-                if _wait_for_syn:
-                    confirm = wait_for_syn(job)
-                    if not confirm:
-                        continue  # received NACK
-                try:
-                    result = (True, prepare_result(fun(*args, **kwargs)))
-                except Exception:
-                    result = (False, ExceptionInfo())
-                try:
-                    put((READY, (job, i, result, inqW_fd)))
-                except Exception as exc:
-                    _, _, tb = sys.exc_info()
+        try:
+            while maxtasks is None or (maxtasks and completed < maxtasks):
+                req = wait_for_job()
+                if req:
+                    type_, args_ = req
+                    assert type_ == TASK
+                    job, i, fun, args, kwargs = args_
+                    put((ACK, (job, i, now(), pid, synqW_fd)))
+                    if _wait_for_syn:
+                        confirm = wait_for_syn(job)
+                        if not confirm:
+                            continue  # received NACK
+                    try:
+                        result = (True, prepare_result(fun(*args, **kwargs)))
+                    except Exception:
+                        result = (False, ExceptionInfo())
                     try:
-                        wrapped = MaybeEncodingError(exc, result[1])
-                        einfo = ExceptionInfo((
-                            MaybeEncodingError, wrapped, tb,
-                        ))
-                        put((READY, (job, i, (False, einfo), inqW_fd)))
-                    finally:
-                        del(tb)
-                completed += 1
-                if max_memory_per_child > 0:
-                    used_kb = mem_rss()
-                    if used_kb <= 0:
-                        error('worker unable to determine memory usage')
-                    if used_kb > 0 and used_kb > max_memory_per_child:
-                        error(MAXMEM_USED_FMT.format(
-                            used_kb, max_memory_per_child))
-                        return EX_RECYCLE
-
-        debug('worker exiting after %d tasks', completed)
-        if maxtasks:
-            return EX_RECYCLE if completed == maxtasks else EX_FAILURE
-        return EX_OK
+                        put((READY, (job, i, result, inqW_fd)))
+                    except Exception as exc:
+                        _, _, tb = sys.exc_info()
+                        try:
+                            wrapped = MaybeEncodingError(exc, result[1])
+                            einfo = ExceptionInfo((
+                                MaybeEncodingError, wrapped, tb,
+                            ))
+                            put((READY, (job, i, (False, einfo), inqW_fd)))
+                        finally:
+                            del(tb)
+                    completed += 1
+                    if max_memory_per_child > 0:
+                        used_kb = mem_rss()
+                        if used_kb <= 0:
+                            error('worker unable to determine memory usage')
+                        if used_kb > 0 and used_kb > max_memory_per_child:
+                            warning(MAXMEM_USED_FMT.format(
+                                used_kb, max_memory_per_child))
+                            return EX_RECYCLE
+
+            debug('worker exiting after %d tasks', completed)
+            if maxtasks:
+                return EX_RECYCLE if completed == maxtasks else EX_FAILURE
+            return EX_OK
+        finally:
+            # Before exiting the worker, we want to ensure that that all
+            # messages produced by the worker have been consumed by the main
+            # process. This prevents the worker being terminated prematurely
+            # and messages being lost.
+            self._ensure_messages_consumed(completed=completed)
+
+    def _ensure_messages_consumed(self, completed):
+        """ Returns true if all messages sent out have been received and
+        consumed within a reasonable amount of time """
+
+        if not self.on_ready_counter:
+            return False
+
+        for retry in range(GUARANTEE_MESSAGE_CONSUMPTION_RETRY_LIMIT):
+            if self.on_ready_counter.value >= completed:
+                debug('ensured messages consumed after %d retries', retry)
+                return True
+            time.sleep(GUARANTEE_MESSAGE_CONSUMPTION_RETRY_INTERVAL)
+        warning('could not ensure all messages were consumed prior to '
+                'exiting')
+        return False
 
     def after_fork(self):
         if hasattr(self.inq, '_writer'):
@@ -753,7 +779,7 @@
 
     def __init__(self, outqueue, get, cache, poll,
                  join_exited_workers, putlock, restart_state,
-                 check_timeouts, on_job_ready):
+                 check_timeouts, on_job_ready, on_ready_counters=None):
         self.outqueue = outqueue
         self.get = get
         self.cache = cache
@@ -765,6 +791,7 @@
         self._shutdown_complete = False
         self.check_timeouts = check_timeouts
         self.on_job_ready = on_job_ready
+        self.on_ready_counters = on_ready_counters
         self._make_methods()
         super(ResultHandler, self).__init__()
 
@@ -793,6 +820,14 @@
                 item = cache[job]
             except KeyError:
                 return
+
+            if self.on_ready_counters:
+                worker_pid = next(iter(item.worker_pids()), None)
+                if worker_pid and worker_pid in self.on_ready_counters:
+                    on_ready_counter = self.on_ready_counters[worker_pid]
+                    with on_ready_counter.get_lock():
+                        on_ready_counter.value += 1
+
             if not item.ready():
                 if putlock is not None:
                     putlock.release()
@@ -1004,6 +1039,7 @@
 
         self._pool = []
         self._poolctrl = {}
+        self._on_ready_counters = {}
         self.putlocks = putlocks
         self._putlock = semaphore or LaxBoundedSemaphore(self._processes)
         for i in range(self._processes):
@@ -1069,7 +1105,8 @@
             self._outqueue, self._quick_get, self._cache,
             self._poll_result, self._join_exited_workers,
             self._putlock, self.restart_state, self.check_timeouts,
-            self.on_job_ready, **extra_kwargs
+            self.on_job_ready, on_ready_counters=self._on_ready_counters,
+            **extra_kwargs
         )
 
     def on_job_ready(self, job, i, obj, inqW_fd):
@@ -1102,6 +1139,7 @@
     def _create_worker_process(self, i):
         sentinel = self._ctx.Event() if self.allow_restart else None
         inq, outq, synq = self.get_process_queues()
+        on_ready_counter = self._ctx.Value('i')
         w = self.WorkerProcess(self.Worker(
             inq, outq, synq, self._initializer, self._initargs,
             self._maxtasksperchild, sentinel, self._on_process_exit,
@@ -1110,6 +1148,7 @@
             sigprotection=self.threads,
             wrap_exception=self._wrap_exception,
             max_memory_per_child=self._max_memory_per_child,
+            on_ready_counter=on_ready_counter,
         ))
         self._pool.append(w)
         self._process_register_queues(w, (inq, outq, synq))
@@ -1118,6 +1157,7 @@
         w.index = i
         w.start()
         self._poolctrl[w.pid] = sentinel
+        self._on_ready_counters[w.pid] = on_ready_counter
         if self.on_process_up:
             self.on_process_up(w)
         return w
@@ -1168,6 +1208,7 @@
                 self.process_flush_queues(worker)
                 del self._pool[i]
                 del self._poolctrl[worker.pid]
+                del self._on_ready_counters[worker.pid]
         if cleaned:
             all_pids = [w.pid for w in self._pool]
             for job in list(self._cache.values()):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard/popen_spawn_win32.py 
new/billiard-3.6.1.0/billiard/popen_spawn_win32.py
--- old/billiard-3.6.0.0/billiard/popen_spawn_win32.py  2018-12-03 
12:24:37.000000000 +0100
+++ new/billiard-3.6.1.0/billiard/popen_spawn_win32.py  2019-08-14 
17:53:16.000000000 +0200
@@ -30,9 +30,13 @@
 
 if sys.platform == 'win32':
     try:
-        from _winapi import CreateProcess
+        from _winapi import CreateProcess, GetExitCodeProcess
+        close_thread_handle = _winapi.CloseHandle
     except ImportError:  # Py2.7
-        from _subprocess import CreateProcess
+        from _subprocess import CreateProcess, GetExitCodeProcess
+
+        def close_thread_handle(handle):
+            handle.Close()
 
 
 class Popen(object):
@@ -61,7 +65,7 @@
                 hp, ht, pid, tid = CreateProcess(
                     spawn.get_executable(), cmd,
                     None, None, False, 0, None, None, None)
-                _winapi.CloseHandle(ht)
+                close_thread_handle(ht)
             except:
                 _winapi.CloseHandle(rhandle)
                 raise
@@ -100,7 +104,7 @@
 
             res = _winapi.WaitForSingleObject(int(self._handle), msecs)
             if res == _winapi.WAIT_OBJECT_0:
-                code = _winapi.GetExitCodeProcess(self._handle)
+                code = GetExitCodeProcess(self._handle)
                 if code == TERMINATE:
                     code = -signal.SIGTERM
                 self.returncode = code
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard/util.py 
new/billiard-3.6.1.0/billiard/util.py
--- old/billiard-3.6.0.0/billiard/util.py       2019-01-06 15:47:21.000000000 
+0100
+++ new/billiard-3.6.1.0/billiard/util.py       2019-08-14 17:53:16.000000000 
+0200
@@ -84,6 +84,7 @@
 DEBUG = 10
 INFO = 20
 SUBWARNING = 25
+WARNING = 30
 ERROR = 40
 
 LOGGER_NAME = 'multiprocessing'
@@ -112,6 +113,9 @@
     if _logger:
         _logger.log(SUBWARNING, msg, *args, **kwargs)
 
+def warning(msg, *args, **kwargs):
+    if _logger:
+        _logger.log(WARNING, msg, *args, **kwargs)
 
 def error(msg, *args, **kwargs):
     if _logger:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard.egg-info/PKG-INFO 
new/billiard-3.6.1.0/billiard.egg-info/PKG-INFO
--- old/billiard-3.6.0.0/billiard.egg-info/PKG-INFO     2019-02-04 
07:00:30.000000000 +0100
+++ new/billiard-3.6.1.0/billiard.egg-info/PKG-INFO     2019-08-14 
18:08:59.000000000 +0200
@@ -1,6 +1,6 @@
 Metadata-Version: 1.2
 Name: billiard
-Version: 3.6.0.0
+Version: 3.6.1.0
 Summary: Python multiprocessing fork with improvements and bugfixes
 Home-page: https://github.com/celery/billiard
 Author: R Oudkerk / Python Software Foundation
@@ -42,7 +42,7 @@
         About
         -----
         
-        `billiard` is a fork of the Python 2.7 `multiprocessing 
<https://docs.python.org/library/multiprocessing.html>`_
+        ``billiard`` is a fork of the Python 2.7 `multiprocessing 
<https://docs.python.org/library/multiprocessing.html>`_
         package. The multiprocessing package itself is a renamed and updated 
version of
         R Oudkerk's `pyprocessing <https://pypi.org/project/processing/>`_ 
package.
         This standalone variant draws its fixes/improvements from python-trunk 
and provides
@@ -50,9 +50,9 @@
         
         - This package would not be possible if not for the contributions of 
not only
           the current maintainers but all of the contributors to the original 
pyprocessing
-          package listed `here 
<http://pyprocessing.berlios.de/doc/THANKS.html>`_
+          package listed `here 
<http://pyprocessing.berlios.de/doc/THANKS.html>`_.
         
-        - Also it is a fork of the multiprocessing backport package by 
Christian Heims.
+        - Also, it is a fork of the multiprocessing backport package by 
Christian Heims.
         
         - It includes the no-execv patch contributed by R. Oudkerk.
         
@@ -63,6 +63,11 @@
         
         .. _`Celery`: http://celeryproject.org
         
+        Documentation
+        -------------
+        
+        The documentation for ``billiard`` is available on `Read the Docs 
<https://billiard.readthedocs.io>`_.
+        
         Bug reporting
         -------------
         
@@ -79,9 +84,9 @@
 Classifier: Programming Language :: Python :: 2
 Classifier: Programming Language :: Python :: 2.7
 Classifier: Programming Language :: Python :: 3
-Classifier: Programming Language :: Python :: 3.4
 Classifier: Programming Language :: Python :: 3.5
 Classifier: Programming Language :: Python :: 3.6
+Classifier: Programming Language :: Python :: 3.7
 Classifier: Programming Language :: Python :: Implementation :: CPython
 Classifier: Programming Language :: Python :: Implementation :: Jython
 Classifier: Programming Language :: Python :: Implementation :: PyPy
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/billiard.egg-info/top_level.txt 
new/billiard-3.6.1.0/billiard.egg-info/top_level.txt
--- old/billiard-3.6.0.0/billiard.egg-info/top_level.txt        2019-02-04 
07:00:30.000000000 +0100
+++ new/billiard-3.6.1.0/billiard.egg-info/top_level.txt        2019-08-14 
18:08:59.000000000 +0200
@@ -1,2 +1 @@
-_billiard
 billiard
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/requirements/test.txt 
new/billiard-3.6.1.0/requirements/test.txt
--- old/billiard-3.6.0.0/requirements/test.txt  2019-01-06 15:47:21.000000000 
+0100
+++ new/billiard-3.6.1.0/requirements/test.txt  2019-08-14 17:53:16.000000000 
+0200
@@ -1,3 +1,3 @@
 case>=1.3.1
-pytest>=3.0
+pytest<5
 psutil
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/billiard-3.6.0.0/setup.py 
new/billiard-3.6.1.0/setup.py
--- old/billiard-3.6.0.0/setup.py       2019-02-04 06:39:49.000000000 +0100
+++ new/billiard-3.6.1.0/setup.py       2019-08-14 17:53:16.000000000 +0200
@@ -242,9 +242,9 @@
             'Programming Language :: Python :: 2',
             'Programming Language :: Python :: 2.7',
             'Programming Language :: Python :: 3',
-            'Programming Language :: Python :: 3.4',
             'Programming Language :: Python :: 3.5',
             'Programming Language :: Python :: 3.6',
+            'Programming Language :: Python :: 3.7',
             'Programming Language :: Python :: Implementation :: CPython',
             'Programming Language :: Python :: Implementation :: Jython',
             'Programming Language :: Python :: Implementation :: PyPy',


Reply via email to