Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
C
cpython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
cpython
Commits
507761da
Commit
507761da
authored
Jan 04, 2007
by
Martin v. Löwis
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Bug #1566280: Explicitly invoke threading._shutdown from Py_Main,
to avoid relying on atexit. Will backport to 2.5.
parent
27049ba1
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
37 additions
and
5 deletions
+37
-5
Lib/threading.py
Lib/threading.py
+5
-5
Misc/NEWS
Misc/NEWS
+3
-0
Modules/main.c
Modules/main.c
+29
-0
No files found.
Lib/threading.py
View file @
507761da
...
...
@@ -636,13 +636,11 @@ class _MainThread(Thread):
_active_limbo_lock
.
acquire
()
_active
[
_get_ident
()]
=
self
_active_limbo_lock
.
release
()
import
atexit
atexit
.
register
(
self
.
__exitfunc
)
def
_set_daemon
(
self
):
return
False
def
_
_
exitfunc
(
self
):
def
_exitfunc
(
self
):
self
.
_Thread__stop
()
t
=
_pickSomeNonDaemonThread
()
if
t
:
...
...
@@ -715,9 +713,11 @@ def enumerate():
from
thread
import
stack_size
# Create the main thread object
# Create the main thread object,
# and make it available for the interpreter
# (Py_Main) as threading._shutdown.
_
MainThread
()
_
shutdown
=
_MainThread
().
_exitfunc
# get thread-local implementation, either from the thread
# module, or from the python fallback
...
...
Misc/NEWS
View file @
507761da
...
...
@@ -12,6 +12,9 @@ What's New in Python 2.6 alpha 1?
Core and builtins
-----------------
- Bug #1566280: Explicitly invoke threading._shutdown from Py_Main,
to avoid relying on atexit.
- Bug #1590891: random.randrange don'
t
return
correct
value
for
big
number
-
Patch
#
1586791
:
Better
exception
messages
for
some
operations
on
strings
,
...
...
Modules/main.c
View file @
507761da
...
...
@@ -177,6 +177,33 @@ static int RunModule(char *module)
return
0
;
}
/* Wait until threading._shutdown completes, provided
the threading module was imported in the first place.
The shutdown routine will wait until all non-daemon
"threading" threads have completed. */
#include "abstract.h"
static
void
WaitForThreadShutdown
()
{
#ifdef WITH_THREAD
PyObject
*
result
;
PyThreadState
*
tstate
=
PyThreadState_GET
();
PyObject
*
threading
=
PyMapping_GetItemString
(
tstate
->
interp
->
modules
,
"threading"
);
if
(
threading
==
NULL
)
{
/* threading not imported */
PyErr_Clear
();
return
;
}
result
=
PyObject_CallMethod
(
threading
,
"_shutdown"
,
""
);
if
(
result
==
NULL
)
PyErr_WriteUnraisable
(
threading
);
else
Py_DECREF
(
result
);
Py_DECREF
(
threading
);
#endif
}
/* Main program */
int
...
...
@@ -514,6 +541,8 @@ Py_Main(int argc, char **argv)
/* XXX */
sts
=
PyRun_AnyFileFlags
(
stdin
,
"<stdin>"
,
&
cf
)
!=
0
;
WaitForThreadShutdown
();
Py_Finalize
();
#ifdef RISCOS
if
(
Py_RISCOSWimpFlag
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment