• R
    replace bad cancellation cleanup abi with a sane one · afc35d5e
    Rich Felker 提交于
    the old abi was intended to duplicate glibc's abi at the expense of
    being ugly and slow, but it turns out glib was not even using that abi
    except on non-gcc-compatible compilers (which it doesn't even support)
    and was instead using an exceptions-in-c/unwind-based approach whose
    abi we could not duplicate anyway without nasty dwarf2/unwind
    integration.
    
    the new abi is copied from a very old glibc abi, which seems to still
    be supported/present in current glibc. it avoids all unwinding,
    whether by sjlj or exceptions, and merely maintains a linked list of
    cleanup functions to be called from the context of pthread_exit. i've
    made some care to ensure that longjmp out of a cleanup function should
    work, even though it is not required to.
    
    this change breaks abi compatibility with programs which were using
    pthread cancellation, which is unfortunate, but that's why i'm making
    the change now rather than later. considering that most pthread
    features have not been usable until recently anyway, i don't see it as
    a major issue at this point.
    afc35d5e
pthread_create.c 3.3 KB