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
452b8701
Commit
452b8701
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.
parent
39ce15a7
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 @
452b8701
...
@@ -636,13 +636,11 @@ class _MainThread(Thread):
...
@@ -636,13 +636,11 @@ class _MainThread(Thread):
_active_limbo_lock
.
acquire
()
_active_limbo_lock
.
acquire
()
_active
[
_get_ident
()]
=
self
_active
[
_get_ident
()]
=
self
_active_limbo_lock
.
release
()
_active_limbo_lock
.
release
()
import
atexit
atexit
.
register
(
self
.
__exitfunc
)
def
_set_daemon
(
self
):
def
_set_daemon
(
self
):
return
False
return
False
def
_
_
exitfunc
(
self
):
def
_exitfunc
(
self
):
self
.
_Thread__stop
()
self
.
_Thread__stop
()
t
=
_pickSomeNonDaemonThread
()
t
=
_pickSomeNonDaemonThread
()
if
t
:
if
t
:
...
@@ -715,9 +713,11 @@ def enumerate():
...
@@ -715,9 +713,11 @@ def enumerate():
from
thread
import
stack_size
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
# get thread-local implementation, either from the thread
# module, or from the python fallback
# module, or from the python fallback
...
...
Misc/NEWS
View file @
452b8701
...
@@ -12,6 +12,9 @@ What's New in Python 2.5.1c1?
...
@@ -12,6 +12,9 @@ What's New in Python 2.5.1c1?
Core and builtins
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
- Bug #1590891: random.randrange don'
t
return
correct
value
for
big
number
-
Bug
#
1456209
:
In
some
obscure
cases
it
was
possible
for
a
class
with
a
-
Bug
#
1456209
:
In
some
obscure
cases
it
was
possible
for
a
class
with
a
...
...
Modules/main.c
View file @
452b8701
...
@@ -176,6 +176,33 @@ static int RunModule(char *module)
...
@@ -176,6 +176,33 @@ static int RunModule(char *module)
return
0
;
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 */
/* Main program */
int
int
...
@@ -513,6 +540,8 @@ Py_Main(int argc, char **argv)
...
@@ -513,6 +540,8 @@ Py_Main(int argc, char **argv)
/* XXX */
/* XXX */
sts
=
PyRun_AnyFileFlags
(
stdin
,
"<stdin>"
,
&
cf
)
!=
0
;
sts
=
PyRun_AnyFileFlags
(
stdin
,
"<stdin>"
,
&
cf
)
!=
0
;
WaitForThreadShutdown
();
Py_Finalize
();
Py_Finalize
();
#ifdef RISCOS
#ifdef RISCOS
if
(
Py_RISCOSWimpFlag
)
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