[pypy-issue] [issue901] *** glibc detected *** pypy: corrupted double-linked list: 0x000000000bd76de0 ***

Alexander Milenko tracker at bugs.pypy.org
Mon Oct 10 20:16:42 CEST 2011


New submission from Alexander Milenko <alvein.flea at gmail.com>:

script contain same strings by same rule... read data from replicated slave 
server, write to master. soty if file not of rule

----------
files: pypy-traceback.txt
messages: 3289
nosy: Alvein, pypy-issue
priority: bug
status: unread
title: *** glibc detected *** pypy: corrupted double-linked list: 0x000000000bd76de0 ***

________________________________________
PyPy bug tracker <tracker at bugs.pypy.org>
<https://bugs.pypy.org/issue901>
________________________________________
-------------- next part --------------
*** glibc detected *** pypy: corrupted double-linked list: 0x000000000bd76de0 ***
======= Backtrace: =========
/lib/libc.so.6(+0x71ad6)[0x7fde403c0ad6]
/lib/libc.so.6(+0x73508)[0x7fde403c2508]
/lib/libc.so.6(cfree+0x6c)[0x7fde403c584c]
pypy(PyObject_Del+0x11)[0xedc361]
pypy[0xfc9635]
pypy[0xf14c1a]
pypy[0xd07976]
pypy(PyObject_dealloc+0x13)[0xed2ca3]
pypy[0xfc9635]
pypy[0xf156e2]
pypy[0xf3f88e]
pypy[0xf51514]
pypy[0xcd9b9e]
[0x7fde3f3e4cbb]
======= Memory map: ========
00400000-01225000 r-xp 00000000 09:02 31392187                           /opt/pypy-env/bin/pypy
01424000-01425000 r--p 00e24000 09:02 31392187                           /opt/pypy-env/bin/pypy
01425000-02756000 rw-p 00e25000 09:02 31392187                           /opt/pypy-env/bin/pypy
02756000-0275e000 rw-p 00000000 00:00 0
03825000-0f4df000 rw-p 00000000 00:00 0                                  [heap]
7fde28000000-7fde29b0e000 rw-p 00000000 00:00 0
7fde29b0e000-7fde2c000000 ---p 00000000 00:00 0
7fde2fe00000-7fde30000000 rwxp 00000000 00:00 0
7fde30000000-7fde33fff000 rw-p 00000000 00:00 0
7fde33fff000-7fde34000000 ---p 00000000 00:00 0
7fde352ff000-7fde3530a000 r-xp 00000000 09:02 27574290                   /lib/libnss_files-2.11.2.so
7fde3530a000-7fde35509000 ---p 0000b000 09:02 27574290                   /lib/libnss_files-2.11.2.so
7fde35509000-7fde3550a000 r--p 0000a000 09:02 27574290                   /lib/libnss_files-2.11.2.so
7fde3550a000-7fde3550b000 rw-p 0000b000 09:02 27574290                   /lib/libnss_files-2.11.2.so
7fde3550b000-7fde35521000 r-xp 00000000 09:02 27575370                   /lib/libgcc_s.so.1
7fde35521000-7fde35720000 ---p 00016000 09:02 27575370                   /lib/libgcc_s.so.1
7fde35720000-7fde35721000 rw-p 00015000 09:02 27575370                   /lib/libgcc_s.so.1
7fde35725000-7fde35726000 ---p 00000000 00:00 0
7fde35726000-7fde35f26000 rw-p 00000000 00:00 0
7fde35f26000-7fde35f27000 ---p 00000000 00:00 0
7fde35f27000-7fde36727000 rw-p 00000000 00:00 0
7fde36727000-7fde36728000 ---p 00000000 00:00 0
7fde36728000-7fde36f28000 rw-p 00000000 00:00 0
7fde36f28000-7fde36f29000 ---p 00000000 00:00 0
7fde36f29000-7fde37729000 rw-p 00000000 00:00 0
7fde37729000-7fde3772a000 ---p 00000000 00:00 0
7fde3772a000-7fde37f2a000 rw-p 00000000 00:00 0
7fde37f2a000-7fde37f2b000 ---p 00000000 00:00 0
7fde37f2b000-7fde3872b000 rw-p 00000000 00:00 0
7fde3872b000-7fde3872c000 ---p 00000000 00:00 0
7fde3872c000-7fde38f2c000 rw-p 00000000 00:00 0
7fde38f2c000-7fde38f2d000 ---p 00000000 00:00 0
7fde38f2d000-7fde3972d000 rw-p 00000000 00:00 0
7fde3972d000-7fde3972e000 ---p 00000000 00:00 0
7fde3972e000-7fde39f2e000 rw-p 00000000 00:00 0
7fde39f2e000-7fde39f2f000 ---p 00000000 00:00 0
7fde39f2f000-7fde3a72f000 rw-p 00000000 00:00 0
7fde3a72f000-7fde3a730000 ---p 00000000 00:00 0
7fde3a730000-7fde3af30000 rw-p 00000000 00:00 0
7fde3af30000-7fde3af31000 ---p 00000000 00:00 0
7fde3af31000-7fde3b731000 rw-p 00000000 00:00 0
7fde3b731000-7fde3b732000 ---p 00000000 00:00 0
7fde3b732000-7fde3bf32000 rw-p 00000000 00:00 0
7fde3bf32000-7fde3bf33000 ---p 00000000 00:00 0
7fde3bf33000-7fde3c733000 rw-p 00000000 00:00 0
7fde3c733000-7fde3c734000 ---p 00000000 00:00 0
7fde3c734000-7fde3cf34000 rw-p 00000000 00:00 0
7fde3cf34000-7fde3cf35000 ---p 00000000 00:00 0
7fde3cf35000-7fde3d735000 rw-p 00000000 00:00 0
7fde3d735000-7fde3d736000 ---p 00000000 00:00 0
7fde3d736000-7fde3e1bb000 rw-p 00000000 00:00 0
7fde3e23c000-7fde3e746000 rw-p 00000000 00:00 0
7fde3e746000-7fde3e75b000 r-xp 00000000 09:02 27574296                   /lib/libnsl-2.11.2.so
7fde3e75b000-7fde3e95a000 ---p 00015000 09:02 27574296                   /lib/libnsl-2.11.2.so
7fde3e95a000-7fde3e95b000 r--p 00014000 09:02 27574296                   /lib/libnsl-2.11.2.so
7fde3e95b000-7fde3e95c000 rw-p 00015000 09:02 27574296                   /lib/libnsl-2.11.2.so
7fde3e95c000-7fde3e95e000 rw-p 00000000 00:00 0
7fde3e95e000-7fde3eb2f000 r-xp 00000000 09:02 43394476                   /usr/lib/libmysqlclient_r.so.16.0.0
7fde3eb2f000-7fde3ed2e000 ---p 001d1000 09:02 43394476                   /usr/lib/libmysqlclient_r.so.16.0.0
7fde3ed2e000-7fde3ed36000 r--p 001d0000 09:02 43394476                   /usr/lib/libmysqlclient_r.so.16.0.0
7fde3ed36000-7fde3ed80000 rw-p 001d8000 09:02 43394476                   /usr/lib/libmysqlclient_r.so.16.0.0
7fde3ed80000-7fde3ed81000 rw-p 00000000 00:00 0
7fde3ed81000-7fde3ed8c000 r-xp 00000000 09:02 31408207                   /opt/idei/egg/MySQL_python-1.2.3-py2.7-linux-x86_64.egg-tmp/_mysql.pypy-16.so
7fde3ed8c000-7fde3ef8b000 ---p 0000b000 09:02 31408207                   /opt/idei/egg/MySQL_python-1.2.3-py2.7-linux-x86_64.egg-tmp/_mysql.pypy-16.so
7fde3ef8b000-7fde3ef90000 rw-p 0000a000 09:02 31408207                   /opt/idei/egg/MySQL_python-1.2.3-py2.7-linux-x86_64.egg-tmp/_mysql.pypy-16.so
7fde3ef90000-7fde3f092000 rw-p 00000000 00:00 0
7fde3f094000-7fde3f194000 rwxp 00000000 00:00 0
7fde3f194000-7fde3f317000 rw-p 00000000 00:00 0
7fde3f39a000-7fde3f49a000 rwxp 00000000 00:00 0
7fde3f49a000-7fde3f51b000 rw-p 00000000 00:00 0
7fde3f51f000-7fde3f71f000 rwxp 00000000 00:00 0
7fde3f71f000-7fde3f7a0000 rw-p 00000000 00:00 0
7fde3f821000-7fde3fdac000 rw-p 00000000 00:00 0
7fde3fdac000-7fde3feac000 rwxp 00000000 00:00 0
7fde3feac000-7fde4034f000 rw-p 00000000 00:00 0
7fde4034f000-7fde404a7000 r-xp 00000000 09:02 27574302                   /lib/libc-2.11.2.so
7fde404a7000-7fde406a6000 ---p 00158000 09:02 27574302                   /lib/libc-2.11.2.so
7fde406a6000-7fde406aa000 r--p 00157000 09:02 27574302                   /lib/libc-2.11.2.so
7fde406aa000-7fde406ab000 rw-p 0015b000 09:02 27574302                   /lib/libc-2.11.2.so
7fde406ab000-7fde406b0000 rw-p 00000000 00:00 0
7fde406b0000-7fde406c7000 r-xp 00000000 09:02 27575371                   /lib/libpthread-2.11.2.so
7fde406c7000-7fde408c6000 ---p 00017000 09:02 27575371                   /lib/libpthread-2.11.2.so
7fde408c6000-7fde408c7000 r--p 00016000 09:02 27575371                   /lib/libpthread-2.11.2.so
7fde408c7000-7fde408c8000 rw-p 00017000 09:02 27575371                   /lib/libpthread-2.11.2.so
7fde408c8000-7fde408cc000 rw-p 00000000 00:00 0
7fde408cc000-7fde4090e000 r-xp 00000000 09:02 27575404                   /lib/libncurses.so.5.7
7fde4090e000-7fde40b0d000 ---p 00042000 09:02 27575404                   /lib/libncurses.so.5.7
7fde40b0d000-7fde40b12000 rw-p 00041000 09:02 27575404                   /lib/libncurses.so.5.7
7fde40b12000-7fde40b14000 r-xp 00000000 09:02 27574280                   /lib/libutiAborted



early with precompiled:
> Fatal error in cpyext, CPython compatibility layer, calling PyTuple_SetItem
> Either report a bug or consider not using this particular extension
> <InvalidPointerException object at 0x1515828>
> RPython traceback:
>   File "module_cpyext_pyobject.c", line 515, in make_ref
>   File "rpython_lltypesystem_rdict.c", line 425, in ll_dict_getitem__dicttablePtr_objectPtr
> Segmentation fault


script:
# -*- coding: utf8 -*-

"""
Ищем аналоги по поставщикам
"""

import sys
import os
import time

path = os.path.normpath(os.path.join(os.getcwd(), '..'))
sys.path.append(path)

#from django.core.management import setup_environ
#import dev_settings

#setup_environ(dev_settings)
from django.db.models.query_utils import Q
from idea.vasya.models import Idei74Matrix, ProviderMatrix, ProviderMatrixAnalogs, Providers
#from vasya.update_signature import BITS

BITS = {
    u'4': 1152921504606846976,
    u'5': 2305843009213693952,
    u'1': 144115188075855872,
    u'0': 72057594037927936,
    u'3': 576460752303423488,
    u'б': 268435456,
    u'а': 134217728,
    u'г': 1073741824,
    u'в': 536870912,
    u'е': 4294967296,
    u'д': 2147483648,
    u'з': 17179869184,
    u'ж': 8589934592,
    u'7': 288230376151711744,
    u'и': 34359738368,
    u'л': 137438953472,
    u'к': 68719476736,
    u'н': 549755813888,
    u'м': 274877906944,
    u'п': 2199023255552,
    u'о': 1099511627776,
    u'с': 8796093022208,
    u'Ñ€': 4398046511104,
    u'у': 35184372088832,
    u'Ñ‚': 17592186044416,
    u'Ñ…': 140737488355328,
    u'Ñ„': 70368744177664,
    u'ч': 562949953421312,
    u'ц': 281474976710656,
    u'щ': 2251799813685248,
    u'ш': 1125899906842624,
    u'6': 144115188075855872,
    u'э': 4503599627370496,
    u'я': 36028797018963968,
    u'ÑŽ': 9007199254740992,
    u'9': 1152921504606846976,
    u'8': 576460752303423488,
    u'2': 288230376151711744,
    u'a': 2,
    u'c': 8,
    u'b': 4,
    u'e': 32,
    u'd': 16,
    u'g': 128,
    u'f': 64,
    u'i': 512,
    u'h': 256,
    u'k': 2048,
    u'j': 1024,
    u'm': 8192,
    u'l': 4096,
    u'o': 32768,
    u'n': 16384,
    u'q': 131072,
    u'p': 65536,
    u's': 524288,
    u'r': 262144,
    u'u': 2097152,
    u't': 1048576,
    u'w': 8388608,
    u'v': 4194304,
    u'y': 33554432,
    u'x': 16777216,
    u'z': 67108864,
    }

from Queue import Queue
from threading import Thread

class Worker(Thread):
    def __init__(self, tasks):
        Thread.__init__(self)
        self.tasks = tasks
        self.daemon = True
        self.start()

    def __del__(self):
        self.tasks = None
        self.daemon = None

    def run(self):
        while True:
            func, args, kwargs = self.tasks.get()
            try:
                func(*args, **kwargs)
            except Exception, e:
                print "%s %s %s" % (e, args, kwargs)

            self.tasks.task_done()


class ThreadPool:
    def __init__(self, num_threads):
        self.tasks = Queue(num_threads)
        for _ in range(num_threads):
            Worker(self.tasks)

    def __del__(self):
        self.tasks = None

    def add_task(self, func, *args, **kargs):
        self.tasks.put((func, args, kargs))

    def awaiting_completion(self):
        self.tasks.join()


def start_check(matrix, provider_items):
#    print matrix.id
    """Проверяем имя по матрице провайдеров"""

    # todo: проверить фильтрацию!
    src_pma = ProviderMatrixAnalogs.objects.filter(provider__in=provider_items, idei__id=matrix.id,
                                                   provider__provider=provider_items[0].provider.pk, bad_variant=True)
    src_pma = [pma.provider.id for pma in src_pma]

    if src_pma:
        provider_items = provider_items.filter(~Q(id__in=src_pma))

    matrix_hashes = matrix.hash.split(":::") if matrix.hash else []
    matrix_frases = matrix.frase.split(":::") if matrix.frase else []

    try:
        for item in provider_items:
#            print "item: %s" % item.id
            find_zero = False

            # Поиск по аналогам
            hashes = item.hash.split(":::")
            frases = item.frase.split(":::")

            for i, hash in enumerate(hashes):
                if not find_zero:
                    for ii, mh in enumerate(matrix_hashes):
                        if not find_zero and mh and hash:
                            # Проверяем по хэшу
                            r = int(mh) ^ int(hash)
                            l = 0

                            for b in BITS:
                                if r & BITS[b]:
                                    l += 1
                                    if l > 2:
                                        break


                            if l < 3:
                                d = distance(matrix_frases[ii], frases[i])

                                #if src_pma and src_pma.filter(distance=d, algorythm=('alg%s' % i), provider=item.pk):
                                #    continue

                                if d < 3:
                                    #print u"%s::%s" % (matrix.name, item.name)

                                    pma = ProviderMatrixAnalogs()
                                    pma.idei = matrix
                                    pma.provider = item
                                    pma.distance = d
                                    pma.algorythm = 'alg%s' % i

                                    if not d:
                                        find_zero = True
                                        pma.is_analog = True

                                        # Если мы нашли прямое совпадение по данному алгоритму, то сбрасываем все остальное
                                        #ProviderMatrixAnalogs.objects.filter(idei=matrix.pk, provider__provider=item.provider.pk, is_analog=False).delete()
                                        pass

                                    pma.save(using='master')

    except ValueError, e:
        print "error on matrix item id: %s" % matrix.id
        print "e: %s" % e
        print "matrix_hashes: %s" % matrix_hashes
        print "matrix_frases: %s" % matrix_frases
        print "hashes: %s" % hashes
        print "frases: %s" % frases
        print "-----"



def distance(a, b):
    "Calculates the Levenshtein distance between a and b."
    n, m = len(a), len(b)
    if n > m:
        # Make sure n <= m, to use O(min(n,m)) space
        a, b = b, a
        n, m = m, n

    current_row = range(n + 1) # Keep current and previous row, not entire matrix
    for i in range(1, m + 1):
        previous_row, current_row = current_row, [i] + [0] * m
        for j in range(1, n + 1):
            add, delete, change = previous_row[j] + 1, current_row[j - 1] + 1, previous_row[j - 1]
            if a[j - 1] != b[i - 1]:
                change += 1

            current_row[j] = min(add, delete, change)

    return current_row[n]

pool = ThreadPool(16)

idea_items = Idei74Matrix.objects.filter(~Q(group=221) & Q(show=True))
providers = Providers.objects.all()
#providers   = Providers.objects.filter(id__in=[22, 23, 25])
# cool!! providers_id= map(lambda obj: obj.id, providers)
for p in providers:
    print p
    # для каждого провайдера создаем свой набор товаров на разбор
    # уже привязанные аналоги
    analogs_items = ProviderMatrixAnalogs.objects.filter(Q(provider__provider__id=p.id) & Q(is_analog=True) & Q(provider__show=True))

    # Аналоги которые признали плохим вариантом
    bad_items = ProviderMatrixAnalogs.objects.filter(Q(provider__provider__id=p.id) & Q(bad_variant=True))

    # Список ID товаров Идеи привязанных по алгоритму или вручную
    idea_items_new = [obj.idei.id for obj in analogs_items]

    # Список ID товаров поставщика привязанных по алгоритму или вручную
    provider_items = [obj.provider.id for obj in analogs_items]

    # Исключаем товары, которые уже найдены и вообще разрешены к поиску
    idea_items_new = idea_items.filter(~Q(id__in=idea_items_new) & Q(group__providers=p))

    # Исключаем товары, которые уже найдены или проверялись или отключены вручную
    provider_items = ProviderMatrix.objects.filter(Q(provider__id=p.id) & ~Q(id__in=provider_items) & Q(show=True) & Q(hide=False))

    if provider_items:
        for item in idea_items_new:
            pool.add_task(start_check, item, provider_items)

        pool.awaiting_completion()


More information about the pypy-issue mailing list