You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
PyInterpreterState_Head(), PyThreadState_Next() etc can't be sanely used #70648
All the internal uses of this API guard everything with HEAD_LOCK/HEAD_UNLOCK that's not exposed. It's not safe to traverse the whole API without holding those locks and those locks are static and module local
fijal explained on IRC his use case: implement vmprof on Windows, a statistical profiler, using a C thread running in the Python process.
The _PyThread_CurrentFrames() API requires to be called with the GIL hold which is not acceptable for his use case. Having to wait for the GIL would serialize statistics plots and so would have a poor quality, probably similar to cProfile.
The use case is to implement something like _PyThread_CurrentFrames() without holding the GIL.
--
fijal mentioned pystate.c/.h functions which come with this comment:
/* Routines for advanced debuggers, requested by David Beazley.
Don't use unless you know what you are doing! */
These functions are not safe if you don't hold head_mutex lock, but this lock is private in pystate.c (declared with "static").
I guess that they are safe to use if the whole process is stopped by a debugger like gdb.
Activity
fijall commentedon Feb 29, 2016
All the internal uses of this API guard everything with HEAD_LOCK/HEAD_UNLOCK that's not exposed. It's not safe to traverse the whole API without holding those locks and those locks are static and module local
vstinner commentedon Feb 29, 2016
Are you asking to expose the lock?
vstinner commentedon Feb 29, 2016
fijal explained on IRC his use case: implement vmprof on Windows, a statistical profiler, using a C thread running in the Python process.
The _PyThread_CurrentFrames() API requires to be called with the GIL hold which is not acceptable for his use case. Having to wait for the GIL would serialize statistics plots and so would have a poor quality, probably similar to cProfile.
The use case is to implement something like _PyThread_CurrentFrames() without holding the GIL.
--
fijal mentioned pystate.c/.h functions which come with this comment:
/* Routines for advanced debuggers, requested by David Beazley.
Don't use unless you know what you are doing! */
These functions are not safe if you don't hold head_mutex lock, but this lock is private in pystate.c (declared with "static").
I guess that they are safe to use if the whole process is stopped by a debugger like gdb.
vstinner commentedon May 15, 2020
Duplicate of bpo-1021318.