Skip to content

Commit 55cdd06

Browse files
committed
try harder to disable writing code objects after fork
1 parent b6ab682 commit 55cdd06

3 files changed

Lines changed: 12 additions & 2 deletions

File tree

‎src/_vmprof.c‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ static PyObject* cpyprof_PyEval_EvalFrameEx(PyFrameObject *, int);
3333
*/
3434
#define CODE_ADDR_TO_UID(co) (((unsigned long)(co)))
3535

36+
static volatile int is_enabled = 0;
3637

3738
#define SINGLE_BUF_SIZE (8192 - 2 * sizeof(unsigned int))
3839
#if defined(__unix__) || defined(__APPLE__)
@@ -43,7 +44,6 @@ static PyObject* cpyprof_PyEval_EvalFrameEx(PyFrameObject *, int);
4344

4445
static destructor Original_code_dealloc = 0;
4546
static ptrdiff_t mainloop_sp_offset;
46-
static int is_enabled = 0;
4747

4848
static void* get_virtual_ip(char* sp)
4949
{

‎src/vmprof_main.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -260,12 +260,14 @@ static int remove_sigprof_timer(void) {
260260
static void atfork_disable_timer(void) {
261261
if (profile_interval_usec > 0) {
262262
remove_sigprof_timer();
263+
is_enabled = 0;
263264
}
264265
}
265266

266267
static void atfork_enable_timer(void) {
267268
if (profile_interval_usec > 0) {
268269
install_sigprof_timer();
270+
is_enabled = 1;
269271
}
270272
}
271273

‎vmprof/reader.py‎

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -61,9 +61,15 @@ def read_prof(fileobj, virtual_ips_only=False): #
6161
all = 0
6262
interp_name = None
6363
version = 0
64+
c = False
6465

6566
while True:
6667
marker = fileobj.read(1)
68+
#print (fileobj.tell(), marker)
69+
if fileobj.tell() > 226264155 - 100:
70+
c = True
71+
#import pdb
72+
#pdb.set_trace()
6773
if marker == MARKER_HEADER:
6874
assert not version, "multiple headers"
6975
version, = struct.unpack("!h", fileobj.read(2))
@@ -106,6 +112,8 @@ def read_prof(fileobj, virtual_ips_only=False): #
106112
elif marker == MARKER_VIRTUAL_IP:
107113
unique_id = read_word(fileobj)
108114
name = read_string(fileobj)
115+
if c:
116+
print (unique_id, name, len(name), fileobj.tell())
109117
all += len(name)
110118
if PY3:
111119
name = name.decode()
@@ -115,7 +123,7 @@ def read_prof(fileobj, virtual_ips_only=False): #
115123
# symmap = read_ranges(fileobj.read())
116124
break
117125
else:
118-
assert not marker
126+
assert not marker, (fileobj.tell(), repr(marker))
119127
break
120128
virtual_ips.sort() # I think it's sorted, but who knows
121129
if virtual_ips_only:

0 commit comments

Comments
 (0)