pypy / pypy

PyPy is a very fast and compliant implementation of the Python language.
https://pypy.org
Other
1.14k stars 61 forks source link

Segfault in GC: pinned object in 'objects_to_trace' #2363

Closed gitlab-importer closed 11 months ago

gitlab-importer commented 8 years ago

In Heptapod by bitbucket_importer on Aug 3, 2016, 18:54

Created originally on Bitbucket by 9001 (Ed)

I encountered a reproducible segfault when running a particular script, both with release builds and with lldebug.

PyPy assertion failed at rpython_memory_gc.c:22908:
in pypy_g_IncrementalMiniMarkGC_visit: pinned object in 'objects_to_trace'

The script and further details are provided in the attachment.

Attachments: pypy-gc-segfault.tgz

gitlab-importer commented 8 years ago

In Heptapod by bitbucket_importer on Aug 4, 2016, 16:17

Created originally on Bitbucket by mattip

For future reference, as a clear and reproducable issue report, here is the README from the attachment

README

This is an attempt to reproduce a segfault in the GC of PyPy 5.3.1.

The crash has been observed using an lldebug build on x64 CentOS 6.4, and also when using the following binaries on x64 Debian 8.4: https://bitbucket.org/pypy/pypy/downloads/pypy2-v5.3.1-linux64.tar.bz2

The crash occurs with and without --jit off using the above binaries.

When encountered using a regular release build, a plain segfault occurs. When encountered using an lldebug build, the following is displayed:

#!shell

 $ ./start.sh 
  wikidump/enwiki-20160801-pages-articles1.xml-p000000010p000030302.bz2
  ..............PyPy assertion failed at rpython_memory_gc.c:22908:
  in pypy_g_IncrementalMiniMarkGC_visit: pinned object in 'objects_to_trace'

I am not able to reproduce this using the debian-provided PyPy 2.4.0.

The version of the "requests" library does not seem to matter. Included is the latest as of writing (2016-08-03) and it was retrieved from https://github.com/kennethreitz/requests/tarball/master

ADDITIONAL PREPARATIONS:

Download a bz2-compressed xml dump of the english wikipedia, the smallest partial archive is usually enough: https://dumps.wikimedia.org/enwiki/20160801/enwiki-20160801-pages-articles1.xml-p000000010p000030302.bz2

if that link has become 404, select a timestamp on this link: https://dumps.wikimedia.org/enwiki/

and then choose one or more archives below the following headline: "Articles, templates, media/file descriptions, and primary meta-pages."

Place one or more of these .xml-pXXXpXXX.bz2 files in the wikidump folder. Adding multiple archives appear to increase the odds of hitting the segfault. Unfortunately there seems to be many variables deciding when (or if) it'll happen during a run.

gitlab-importer commented 8 years ago

In Heptapod by @arigo on Aug 5, 2016, 07:55

Thanks for the very well-prepared bug report! Found the issue in 1d29fd069ef0 and fixed it in 93a5d95ec126. (Tracking the problem was done using the great tool 'undodb-gdb', which I can only recommend.)