diff options
author | Keith Maxwell <keith.maxwell@gmail.com> | 2020-05-11 21:43:07 +0100 |
---|---|---|
committer | Rasmus Thomsen <oss@cogitri.dev> | 2020-05-12 06:22:41 +0000 |
commit | 1a7facbcc19063e529d3a72fb719e223c95a76c3 (patch) | |
tree | 1ba4fb4a53fa29aa4f90ccff7c30594185d2a982 /community/rstcheck/02-Close-the-multiprocessing.pool-after-use.patch | |
parent | 470184667e77e61df74b4b3e46c644173b9df1aa (diff) |
community/rstcheck: fix intermittent test failures
Add a patch to close the multiprocessing pool in line with the Python 3
documentation.
The patch introduced by this commit has been submitted upstream:
https://github.com/myint/rstcheck/pull/67
Testing inside `dabuild sh`, before this change we can't get above run 11:
```
$ cd src/rstcheck-3.3.1/
$ for i in $(seq 99) ; do printf '%3d' $i && ./rstcheck.py --recursive examples/good || break ; done ; echo
1 (stalled)
$ for i in $(seq 99) ; do printf '%3d' $i && ./rstcheck.py --recursive examples/good || break ; done ; echo
1 2 3 4 5 6 7 8 9 10 11 (stalled)
$ for i in $(seq 99) ; do printf '%3d' $i && ./rstcheck.py --recursive examples/good || break ; done ; echo
1 2 3 (stalled)
```
After this change, 99 runs finish three times in a row:
```
$ abuild deps unpack prepare build
$ cd src/rstcheck-3.3.1/
$ for i in $(seq 99) ; do printf '%3d' $i && ./rstcheck.py --recursive examples/good || break ; done ; echo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
$ for i in $(seq 99) ; do printf '%3d' $i && ./rstcheck.py --recursive examples/good || break ; done ; echo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
$ for i in $(seq 99) ; do printf '%3d' $i && ./rstcheck.py --recursive examples/good || break ; done ; echo
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
```
Diffstat (limited to 'community/rstcheck/02-Close-the-multiprocessing.pool-after-use.patch')
-rw-r--r-- | community/rstcheck/02-Close-the-multiprocessing.pool-after-use.patch | 59 |
1 files changed, 59 insertions, 0 deletions
diff --git a/community/rstcheck/02-Close-the-multiprocessing.pool-after-use.patch b/community/rstcheck/02-Close-the-multiprocessing.pool-after-use.patch new file mode 100644 index 00000000000..d0680ef23df --- /dev/null +++ b/community/rstcheck/02-Close-the-multiprocessing.pool-after-use.patch @@ -0,0 +1,59 @@ +https://github.com/myint/rstcheck/pull/67 + +From 5e6e995305f66246e8f98acd15de2c39a75efa5b Mon Sep 17 00:00:00 2001 +From: Keith Maxwell <keith.maxwell@gmail.com> +Date: Mon, 11 May 2020 20:53:14 +0100 +Subject: [PATCH] Close the multiprocessing.pool after use + +So that the tests do not hang intermittently + +When preparing to release Alpine Linux 3.12, the tests for this package +would hang intermittently. This problem was isolated to the tests in +test.bash that run rstcheck.py over multiple files. + +The documentation for multiprocessing.pool explains that: + +> Warning multiprocessing.pool objects have internal resources that need +> to be properly managed (like any other resource) by using the pool as +> a context manager or by calling close() and terminate() manually. +> Failure to do this can lead to the process hanging on finalization. + +> Note that is not correct to rely on the garbage colletor to destroy +> the pool as CPython does not assure that the finalizer of the pool +> will be called (see object.__del__() for more information). + +https://docs.python.org/3/library/multiprocessing.html#module-multiprocessing.pool + +Before this commit close() was not called on the multiprocessing pool; +after this commit close() is called. + +The change in this commit was tested in an Alpine Linux container: + + podman run -ti --rm -v $PWD:/srv:Z -w /srv alpine:edge sh + +By running: + + apk add alpine-sdk python3 py3-docutils py3-setuptools bash + python3 setup.py build + sed -i '1s|^#!/usr/bin/env python$|#!/usr/bin/python3|' rstcheck.py + python3 ./test_rstcheck.py + bash ./test.bash +--- + rstcheck.py | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/rstcheck.py b/rstcheck.py +index a13ec2b..959808a 100755 +--- a/rstcheck.py ++++ b/rstcheck.py +@@ -981,6 +981,7 @@ def main(): + except (IOError, UnicodeError) as exception: + output_message(exception) + status = 1 ++ pool.close() + + return status + +-- +2.26.2 + |