Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Closed
jgehrcke opened this issue Nov 1, 2017 · 1 comment
Closed
Labels
affects dev only Does not affect regular gipc release needs triage

Comments

@jgehrcke
Copy link
Owner

jgehrcke commented Nov 1, 2017

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

  • PyPy 5.6.0
  • gevent 1.2.0
  • cffi 1.9.0
  • Cython 0.25.2
  • greenlet 0.4.10
  • Linux (more than one kernel version)
  • coverage==4.2
  • pytest-cov==2.4.0

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 jgehrcke added needs triage affects dev only Does not affect regular gipc release labels Sep 24, 2018
@jgehrcke
Copy link
Owner Author

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
affects dev only Does not affect regular gipc release needs triage
Projects
None yet
Development

No branches or pull requests

1 participant