This issue tracker has been migrated to GitHub ,
and is currently read-only.
For more information,
see the GitHub FAQs in the Python's Developer Guide.
Created on 2011年05月04日 10:30 by vstinner, last changed 2022年04月11日 14:57 by admin. This issue is now closed.
| Files | ||||
|---|---|---|---|---|
| File name | Uploaded | Description | Edit | |
| tkinter_finalize.patch | vstinner, 2011年05月04日 11:05 | review | ||
| Pull Requests | |||
|---|---|---|---|
| URL | Status | Linked | Edit |
| PR 23490 | closed | python-dev, 2020年11月24日 10:52 | |
| Messages (4) | |||
|---|---|---|---|
| msg135109 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年05月04日 10:30 | |
I'm working on signals, especially on pthread_sigmask(), and I'm trying to understand test_signal failures. test_signal fails if the _tkinter module is loaded, because _tkinter loads the Tcl library which create a thread waiting events in select(). For example, "python -m test test_pydoc test_signal" fails, because test_pydoc loads ALL Python modules. I opened an issue for test_pydoc: http://bugs.python.org/issue11995 _tkinter.c contains the following code: #if 0 /* This was not a good idea; through <Destroy> bindings, Tcl_Finalize() may invoke Python code but at that point the interpreter and thread state have already been destroyed! */ Py_AtExit(Tcl_Finalize); #endif Tcl_Finalize() exits the thread, but this function is never called in Python. Anyway, it is not possible to unload a module implemented in C. I would like to know if it would be possible to mask all signals in the Tcl thread, or if Tcl supports/uses signals. It is possible to mask all signals in the Tcl thread using: ---------- allsignals = range(1, signal.NSIG) oldmask = signal.pthread_sigmask(signal.SIG_BLOCK, allsignals) import _tkinter signal.pthread_sigmask(signal.SIG_SETMASK, oldmask) ---------- I'm not asking the question for test_signal: I have a patch fixing test_signal, even if the Tcl zombi thread is present (use pthread_kill() to send the signal directly to the main thread). (I wrote "zombi" thread because I was not aware that Tcl uses a thread, nor that test_pydoc loads all modules. The thread is valid, alive, and it's just a joke. The threads is more hidden than zombi.) (Message copied/pasted from python-dev) |
|||
| msg135111 - (view) | Author: Roundup Robot (python-dev) (Python triager) | Date: 2011年05月04日 10:38 | |
New changeset 88dca05ed468 by Victor Stinner in branch 'default': Issue #11998, issue #8407: workaround _tkinter issue in test_signal http://hg.python.org/cpython/rev/88dca05ed468 |
|||
| msg135113 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年05月04日 11:05 | |
As suggested by Antoine, here is a patch to call Tcl_Finalize() in test_signal. You can call create a Tcl/Tk window, destroy it, call _tkinter._finalize(), and then create a new Tcl/Tk window. But call _tkinter._finalize() crashes if there is still a running Tcl/Tk window. We should add a safety test checking that there is no more running widget. If it is not possible to implement this, the function should only be compiled in debug mode. If it is possible, it would be nice to call _tkinter._finalize() when the last widget is destroyed and/or at Python exit. |
|||
| msg136754 - (view) | Author: STINNER Victor (vstinner) * (Python committer) | Date: 2011年05月24日 15:17 | |
I implemented signal.pthread_kill(), so it's now possible to test pending signals in test_signal, even if _tkinter is loaded. I don't think that we need the _finalize() hack anymore. |
|||
| History | |||
|---|---|---|---|
| Date | User | Action | Args |
| 2022年04月11日 14:57:16 | admin | set | github: 56207 |
| 2020年11月24日 10:52:51 | python-dev | set | pull_requests: + pull_request22379 |
| 2011年05月24日 15:17:33 | vstinner | set | status: open -> closed resolution: wont fix messages: + msg136754 |
| 2011年05月04日 11:53:37 | vstinner | set | title: test_signal cannot test blocked signals if _tkinter is loaded -> test_signal cannot test blocked signals if _tkinter is loaded; Tcl_Finalize() |
| 2011年05月04日 11:05:48 | vstinner | set | files:
+ tkinter_finalize.patch nosy: + gpolo messages: + msg135113 keywords: + patch |
| 2011年05月04日 10:38:19 | python-dev | set | nosy:
+ python-dev messages: + msg135111 |
| 2011年05月04日 10:30:38 | vstinner | create | |