Staging
v0.8.1
https://github.com/python/cpython
Revision c41559021213cfc9dc62a83fc63306b3bdc3e64b authored by MARUYAMA Norihiro on 01 November 2020, 23:51:04 UTC, committed by GitHub on 01 November 2020, 23:51:04 UTC
* bpo-37193: remove the thread which finished process request from threads list

* rename variable t to thread.

* don't remove thread from list if it is daemon.

* use lock to protect self._threads.

* use finally block in case of exception from shutdown_request().

* check "not thread.daemon" before lock to avoid holding the lock if it's unnecessary.

* fix the place of _threads_lock.

* separate code to remove a current thread into a function.

* check ValueError when removing thread.

* fix wrong code which all instance shared same lock.

* Extract thread management into a _Threads class to encapsulate atomic operations and separate concerns.

* Replace multiple references of 'block_on_close' with one, avoiding the possibility that 'block_on_close' could change during the course of processing requests. Now, there's exactly one _threads object with behavior fixed for the duration.

* Add docstrings to private classes.

* Add test to ensure that a ThreadingTCPServer can be closed without serving any requests.

* Use _NoThreads as the default value. Fixes AttributeError when server is closed without serving any requests.

* Add blurb

* Add test capturing failure.

Co-authored-by: Jason R. Coombs <jaraco@jaraco.com>
1 parent e662c39
History
Tip revision: c41559021213cfc9dc62a83fc63306b3bdc3e64b authored by MARUYAMA Norihiro on 01 November 2020, 23:51:04 UTC
bpo-37193: remove thread objects which finished process its request (GH-13893)
Tip revision: c415590
File Mode Size
cpython
internal
Python-ast.h -rw-r--r-- 28.3 KB
Python.h -rw-r--r-- 3.6 KB
abstract.h -rw-r--r-- 28.3 KB
asdl.h -rw-r--r-- 2.7 KB
ast.h -rw-r--r-- 604 bytes
bltinmodule.h -rw-r--r-- 264 bytes
boolobject.h -rw-r--r-- 885 bytes
bytearrayobject.h -rw-r--r-- 1.4 KB
bytesobject.h -rw-r--r-- 3.0 KB
cellobject.h -rw-r--r-- 712 bytes
ceval.h -rw-r--r-- 5.6 KB
classobject.h -rw-r--r-- 1.6 KB
code.h -rw-r--r-- 318 bytes
codecs.h -rw-r--r-- 6.9 KB
compile.h -rw-r--r-- 3.5 KB
complexobject.h -rw-r--r-- 1.8 KB
context.h -rw-r--r-- 1.9 KB
datetime.h -rw-r--r-- 9.4 KB
descrobject.h -rw-r--r-- 2.9 KB
dictobject.h -rw-r--r-- 3.8 KB
dynamic_annotations.h -rw-r--r-- 21.9 KB
enumobject.h -rw-r--r-- 253 bytes
errcode.h -rw-r--r-- 1.6 KB
eval.h -rw-r--r-- 1.2 KB
exports.h -rw-r--r-- 1.1 KB
fileobject.h -rw-r--r-- 1.5 KB
fileutils.h -rw-r--r-- 597 bytes
floatobject.h -rw-r--r-- 4.3 KB
frameobject.h -rw-r--r-- 337 bytes
funcobject.h -rw-r--r-- 4.0 KB
genericaliasobject.h -rw-r--r-- 334 bytes
genobject.h -rw-r--r-- 3.3 KB
import.h -rw-r--r-- 3.0 KB
interpreteridobject.h -rw-r--r-- 334 bytes
intrcheck.h -rw-r--r-- 816 bytes
iterobject.h -rw-r--r-- 521 bytes
listobject.h -rw-r--r-- 1.7 KB
longintrepr.h -rw-r--r-- 3.7 KB
longobject.h -rw-r--r-- 8.4 KB
marshal.h -rw-r--r-- 803 bytes
memoryobject.h -rw-r--r-- 2.7 KB
methodobject.h -rw-r--r-- 3.7 KB
modsupport.h -rw-r--r-- 9.7 KB
moduleobject.h -rw-r--r-- 2.3 KB
namespaceobject.h -rw-r--r-- 349 bytes
object.h -rw-r--r-- 24.4 KB
objimpl.h -rw-r--r-- 7.9 KB
odictobject.h -rw-r--r-- 1.3 KB
opcode.h -rw-r--r-- 5.1 KB
osdefs.h -rw-r--r-- 737 bytes
osmodule.h -rw-r--r-- 291 bytes
parser_interface.h -rw-r--r-- 1.1 KB
patchlevel.h -rw-r--r-- 1.3 KB
picklebufobject.h -rw-r--r-- 846 bytes
py_curses.h -rw-r--r-- 2.4 KB
pyarena.h -rw-r--r-- 2.7 KB
pycapsule.h -rw-r--r-- 1.7 KB
pyctype.h -rw-r--r-- 1.3 KB
pydebug.h -rw-r--r-- 1.1 KB
pydecimal.h -rw-r--r-- 5.7 KB
pydtrace.d -rw-r--r-- 1008 bytes
pydtrace.h -rw-r--r-- 2.4 KB
pyerrors.h -rw-r--r-- 12.1 KB
pyexpat.h -rw-r--r-- 2.4 KB
pyfpe.h -rw-r--r-- 444 bytes
pyframe.h -rw-r--r-- 466 bytes
pyhash.h -rw-r--r-- 4.2 KB
pylifecycle.h -rw-r--r-- 2.0 KB
pymacconfig.h -rw-r--r-- 2.9 KB
pymacro.h -rw-r--r-- 4.8 KB
pymath.h -rw-r--r-- 8.1 KB
pymem.h -rw-r--r-- 4.3 KB
pyport.h -rw-r--r-- 30.6 KB
pystate.h -rw-r--r-- 5.1 KB
pystrcmp.h -rw-r--r-- 436 bytes
pystrhex.h -rw-r--r-- 849 bytes
pystrtod.h -rw-r--r-- 1.4 KB
pythonrun.h -rw-r--r-- 5.8 KB
pythread.h -rw-r--r-- 5.8 KB
pytime.h -rw-r--r-- 8.7 KB
rangeobject.h -rw-r--r-- 628 bytes
setobject.h -rw-r--r-- 3.2 KB
sliceobject.h -rw-r--r-- 2.5 KB
structmember.h -rw-r--r-- 2.0 KB
structseq.h -rw-r--r-- 1.4 KB
symtable.h -rw-r--r-- 5.2 KB
sysmodule.h -rw-r--r-- 1.2 KB
token.h -rw-r--r-- 2.6 KB
traceback.h -rw-r--r-- 584 bytes
tracemalloc.h -rw-r--r-- 1.1 KB
tupleobject.h -rw-r--r-- 1.6 KB
typeslots.h -rw-r--r-- 2.3 KB
unicodeobject.h -rw-r--r-- 35.3 KB
warnings.h -rw-r--r-- 1.7 KB
weakrefobject.h -rw-r--r-- 2.8 KB

back to top