jgehrcke / gipc

gevent-cooperative child processes and inter-process communication
https://gehrcke.de/gipc
MIT License
83 stars 13 forks source link

Rare SIGSEGV during TestComm::test_onewriter_two_readers on PyPy 5.6.0 #27

Closed jgehrcke closed 1 year ago

jgehrcke commented 7 years ago

I have infrequently seen a segmentation fault in the test test_gipc.py::TestComm::test_onewriter_two_readers on the following platform:

Reproduced with this command, and got a relevant strace output:

$ for RUNIDX in  $(seq -w 00 99); do echo $RUNIDX; strace -o strace.out py.test --cov-report term --cov-report html --cov gipc -v -k TestComm || break; done

Output from bad test run:

[...]
platform linux2 -- Python 2.7.12[pypy-5.6.0-final], pytest-3.0.5, py-1.4.32, pluggy-0.4.0 -- /home/jp/.pyenv/versions/pypy-5.6.0/envs/venvpypy560-gevent120-gipc/bin/python
cachedir: ../.cache
rootdir: /home/jp/dev/gipc, inifile: 
plugins: cov-2.4.0
collected 78 items 

test_gipc.py::TestComm::test_singlemsg_short_bin PASSED
test_gipc.py::TestComm::test_singlemsg_short_list PASSED
test_gipc.py::TestComm::test_singlemsg_short_list_commontypes PASSED
test_gipc.py::TestComm::test_singlemsg_long_bin PASSED
test_gipc.py::TestComm::test_singlemsg_long_list PASSED
test_gipc.py::TestComm::test_singlemsg_between_greenlets PASSED
test_gipc.py::TestComm::test_onewriter_two_readers Segmentation fault (core dumped)

Relevant strace output from said run:

$ tail -n 50 strace.out 
read(100, 0x7f911f8c0bc0, 35928)        = -1 EAGAIN (Resource temporarily unavailable)
getpid()                                = 26510
epoll_ctl(103, EPOLL_CTL_ADD, 100, {EPOLLIN, {u32=100, u64=21474836580}}) = -1 EEXIST (File exists)
epoll_wait(103, [{EPOLLOUT, {u32=102, u64=17179869286}}], 64, 59743) = 1
write(102, "K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1"..., 35928) = 35928
getpid()                                = 26510
write(102, "\0\36\214T\200\2]q\1(K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1"..., 2002008) = 28672
write(102, "K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1"..., 1973336) = -1 EAGAIN (Resource temporarily unavailable)
getpid()                                = 26510
epoll_ctl(103, EPOLL_CTL_ADD, 102, {EPOLLOUT, {u32=102, u64=21474836582}}) = -1 EEXIST (File exists)
epoll_wait(103, [{EPOLLIN, {u32=100, u64=17179869284}}], 64, 59743) = 1
read(100, "K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1K\1"..., 35928) = 35928
brk(NULL)                               = 0x76ff000
brk(0x77b5000)                          = 0x77b5000
brk(NULL)                               = 0x77b5000
brk(0x7884000)                          = 0x7884000
brk(NULL)                               = 0x7884000
brk(0x796d000)                          = 0x796d000
brk(NULL)                               = 0x796d000
brk(0x79ed000)                          = 0x79ed000
brk(NULL)                               = 0x79ed000
brk(0x7af4000)                          = 0x7af4000
brk(NULL)                               = 0x7af4000
brk(0x7c1f000)                          = 0x7c1f000
brk(NULL)                               = 0x7c1f000
brk(0x7c9f000)                          = 0x7c9f000
brk(NULL)                               = 0x7c9f000
brk(0x7df2000)                          = 0x7df2000
brk(NULL)                               = 0x7df2000
brk(0x7e72000)                          = 0x7e72000
brk(NULL)                               = 0x7e72000
brk(0x7ff0000)                          = 0x7ff0000
brk(NULL)                               = 0x7ff0000
brk(0x819f000)                          = 0x819f000
brk(NULL)                               = 0x819f000
brk(0x821f000)                          = 0x821f000
brk(NULL)                               = 0x821f000
brk(0x8405000)                          = 0x8405000
brk(NULL)                               = 0x8405000
brk(0x8485000)                          = 0x8485000
brk(NULL)                               = 0x8485000
brk(0x86a8000)                          = 0x86a8000
brk(NULL)                               = 0x86a8000
brk(0x8728000)                          = 0x8728000
brk(NULL)                               = 0x8728000
brk(0x8991000)                          = 0x8991000
brk(NULL)                               = 0x8991000
brk(0x8a11000)                          = 0x8a11000
--- SIGSEGV {si_signo=SIGSEGV, si_code=SEGV_MAPERR, si_addr=0x7f91283c0300} ---
+++ killed by SIGSEGV (core dumped) +++

I could not yet reproduce this without --cov-report term --cov-report html --cov gipc. But that might just be coincidence.

jgehrcke commented 5 years ago

This might not be an issue anymore. Leaving this open anyway.