Skip to content
GitLab
  • Menu
Projects Groups Snippets
  • /
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in / Register
  • pypy pypy
  • Project information
    • Project information
    • Activity
    • Labels
    • Members
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 673
    • Issues 673
    • List
    • Boards
    • Service Desk
    • Milestones
  • Merge requests 13
    • Merge requests 13
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Deployments
    • Deployments
    • Environments
    • Releases
  • Packages & Registries
    • Packages & Registries
    • Container Registry
  • Monitor
    • Monitor
    • Incidents
  • Analytics
    • Analytics
    • Value stream
    • CI/CD
    • Repository
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • PyPy
  • pypypypy
  • Issues
  • #3039
Closed
Open
Created Jul 06, 2019 by Bitbucket Importer@bitbucket_importerMaintainer

cython / array.array bindings generate errors

Created originally on Bitbucket by shlomif (Shlomi Fish)

Why https://github.com/shlomif/primesieve-python/tree/array-pypy3 (note the branch) gives me <<ValueError: array.array size changed, may indicate binary incompatibility. Expected 72 from C header, got 24 from PyObject>> in pypy3 and works fine in cpython3? After I “#if 0” the check, I get a segfault:

‌

shlomif[ProjEuler]:~/progs/riddles/project-euler/git/project-euler/641$ gdb -args pypy3 641-v1.py
GNU gdb (GDB) 8.2-8.mga7 (Mageia release 7)
Copyright (C) 2018 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Type "show copying" and "show warranty" for details.
This GDB was configured as "x86_64-mageia-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
    <http://www.gnu.org/software/gdb/documentation/>.

For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from pypy3...Reading symbols from /home/shlomif/Download/unpack/prog/python/pypy3.5-6.0.0-linux_x86_64-portable/bin/pypy3.5.debug...(no debugging symbols found)...done.                                                                                       
(no debugging symbols found)...done.
(gdb) r
Starting program: /home/shlomif/Download/unpack/prog/python/pypy3.5-6.0.0-linux_x86_64-portable/bin/pypy3 641-v1.py
Missing separate debuginfos, use: debuginfo-install glibc-2.29-14.mga8.x86_64
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".

Program received signal SIGSEGV, Segmentation fault.
resize (n=26355869, self=0x8e3350) at primesieve/array/_array.cpp:1190
1190        PyMem_Resize(items, char, (size_t)(n * self->ob_descr->itemsize));
Missing separate debuginfos, use: debuginfo-install lib64bz2_1-1.0.6-13.mga7.x86_64 lib64xcrypt1-4.4.6-1.mga7.x86_64 lib64zlib1-1.2.11-7.mga7.x86_64 libgomp1-8.3.1-0.20190628.2.mga8.x86_64 libstdc++6-8.3.1-0.20190628.2.mga8.x86_64                                         
(gdb) p self
$1 = (arrayobject *) 0x8e3350
(gdb) p self[0]
$2 = {ob_refcnt = 2305843009213693953, ob_pypy_link = 140737275159976,
  ob_type = 0x8bb840, ob_size = 262193, data = {ob_item = 0x0,
    as_floats = 0x0, as_doubles = 0x0, as_ints = 0x0, as_uints = 0x0,
    as_uchars = 0x0, as_schars = 0x0, as_chars = 0x0, as_ulongs = 0x0,
    as_longs = 0x0, as_ulonglongs = 0x0, as_longlongs = 0x0, as_shorts = 0x0,
    as_ushorts = 0x0, as_pyunicodes = 0x0, as_voidptr = 0x0}, allocated = 0,
  ob_descr = 0x4100015a90, weakreflist = 0x4000, ob_exports = -309255392}
(gdb) p self[0].ob
ob_descr      ob_pypy_link  ob_size
ob_exports    ob_refcnt     ob_type
(gdb) p self[0].ob_descr
$3 = (arraydescr *) 0x4100015a90
(gdb) p self[0].ob_descr [0]
Cannot access memory at address 0x4100015a90
(gdb) p items
$4 = (void *) 0x0
(gdb) p n
$5 = 26355869
(gdb) p self[0].ob_descr
$6 = (arraydescr *) 0x4100015a90
(gdb) q
A debugging session is active.

Thanks!

‌

Here is the offending code:

‌

# import array
import heapq
import sys
import time
from bisect import bisect_right
# from subprocess import PIPE, Popen

# import primesieve
import primesieve.array

from six import print_
from six.moves import range

# Tuple is (n,k) where n is the sum and k is the count.
# pipe = Popen(["primesieve", "-p1", "2", "500000029"], stdout=PIPE).stdout
# pipe = Popen("primesieve -p1 2 1000", shell=True, stdout=PIPE).stdout

t1 = time.time()
primes = primesieve.array.primes(500000029)
print_(primes[0])
t2 = time.time()
Edited Oct 25, 2020 by Matti Picus
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information
Assignee
Assign to
Time tracking