mirror of
https://github.com/facebook/sapling.git
synced 2024-10-09 08:18:15 +03:00
traceprof: enforce native stderr on Windows to avoid crash
Summary: On Windows `FILE*` seems to be different in traceprofimpl.cpp and Python: ``` # fp passed from traceprof.pyx:profile(fp=sys.stderr) to traceprofimpl.cpp 0x0000000000d23cc0 {_Placeholder=0x0000000000d23360 } _Placeholder: 0x0000000000d23360 # stderr as seen from traceprofimpl.cpp natively ucrtbase.dll!0x00007ffb29465510 (load symbols for additional information) {_Placeholder=0x0000000000000000 } _Placeholder: 0x0000000000000000 ``` Workaround that by enforcing output Windows to use stderr for now. Test Plan: ``` C:\hg> python2 setup.py build_ext -i ... C:\hg> type a.py import sys from mercurial import ui from hgext import traceprof def f(): g(1) def g(x): print(x) with traceprof.profile(ui.ui(), sys.stderr): f() C:\hg> python2 a.py 1 | <module> a.py:1 | __exit__ C:\...\contextlib.py:21 Total time: 0 ms ``` Reviewers: #mercurial Differential Revision: https://phabricator.intern.facebook.com/D6686958
This commit is contained in:
parent
dcbc5e9b19
commit
04f520998c
@ -36,6 +36,9 @@ import gc
|
||||
cdef extern from "extlib/traceprofimpl.cpp":
|
||||
void enable()
|
||||
void disable()
|
||||
IF UNAME_SYSNAME == "Windows":
|
||||
void report()
|
||||
ELSE:
|
||||
void report(FILE *)
|
||||
void settimethreshold(double)
|
||||
void setcountthreshold(size_t)
|
||||
@ -63,5 +66,10 @@ def profile(ui, fp):
|
||||
yield
|
||||
finally:
|
||||
disable()
|
||||
IF UNAME_SYSNAME == "Windows":
|
||||
# On Windows, "FILE*" could be incompatible between Python.exe and
|
||||
# traceimpl.exp. Use stderr from traceimpl.exp conservatively.
|
||||
report()
|
||||
ELSE:
|
||||
report(PyFile_AsFile(<PyObject *>fp))
|
||||
clear()
|
||||
|
Loading…
Reference in New Issue
Block a user