[[!meta copyright="Copyright © 2011, 2013 Free Software Foundation, Inc."]] [[!meta license="""[[!toggle id="license" text="GFDL 1.2+"]][[!toggleable id="license" text="Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled [[GNU Free Documentation License|/fdl]]."]]"""]] [[!meta title="libpthread: __pthread_enqueue: Assertion `thread->prevp == 0' failed"]] [[!tag open_issue_libpthread]] # IRC, OFTC, #debian-hurd, 2011-10-21 [Python testsuite] [169/340/1] test_logging python: /home/pino/sources/hurd/hurd-20110519/./libpthread/pthread/pt-internal.h:109: __pthread_enqueue: Assertion `thread->prevp == 0' failed. sigh ## IRC, freenode, #hurd, 2011-10-21 am i missing anything, or in libpthread the __pthread_threads list does not ever has elements removed from it? ... thus potentially causing "./libpthread/pthread/pt-internal.h:109: __pthread_enqueue: Assertion `thread->prevp == 0' failed." because threads can be appended on __pthread_dealloc() to the __pthread_free_threads list as well? maybe reusing the same next+prevp pointers in the __pthread struct for more than one list at the same time isn't a good idea... ## IRC, freenode, #hurd, 2011-10-23 pinotree: I don't understand the relation between thread->prevp != 0 and the __pthread_threads list the list never has elements removed indeed, since libpthread never frees __pthread structures apparently youpi: ye sorry, that relation is indeed nonsense in which condition did you get prevp != 0 i wa trying to find some explaination for the "thread->prevp == 0" assertion in the _queue function ? *was it's not obvious to me how libpthread makes sure the various cond/mutex/rwlock make sure that it's not queued several times yeah apparently prevp/next are used for lists of held waitcond/mutex/rwlock and free threads # IRC, freenode, #hurd, 2013-03-20 aw i hit the ext2fs.static: ./pthread/pt-internal.h:122: __pthread_enqueue: Assertion `thread->prevp == 0' failed. assertion looks like there is a deadlock on assert which might explain why i never saw progress when i tested that in the past ## IRC, freenode, #hurd, 2013-04-21 damn, there still bugs in libpthread (about prevp not being null when it should i mean) braunr: found another trigger for that? no it's so random i wonder if it's not a completely unrelated corruption pinotree: also, i'm having more of these issues with my custom hurd packages that let threads exit after some time from managing ports (i removed the libports_stability patch) i once had this : http://www.sceen.net/~rbraun/darnassus_crash.png [The assertion failure.] ## IRC, freenode, #hurd, 2013-04-23 removing the libports_stability patch exposed bugs in libpthread, triggering assertions when queueing/dequeue threads from a queue (but i don't know which one / in which function) ## IRC, freenode, #hurd, 2013-06-25 braunr: https://buildd.debian.org/status/fetch.php?pkg=libmemcached&ver=1.0.17-2&arch=hurd-i386&stamp=1372165732 make: ./pthread/pt-internal.h:122: __pthread_enqueue: Assertion `thread->prevp == 0' failed. \o/ (it should rather be /o\, but better pretend not) pinotree: yes, we regularly see it pinotree: how long has the machine been running at this point ? dunno, you should ask samuel about that does it happen after N hours/days? a few days of moderate to high activity yes ah ok and i actually see this error much more often when i disable the libports stability patch in the hurd debian package so i guess something is wrong with thread recycling but i wanted to completely rewrite that part with the new kernel call i asked bddebian to work on :)