Why was ucontext added to and then removed from POSIX?

c, posix, setjmp, ucontext

Solution

The signature of `makecontext` from `ucontext.h` is:

void makecontext(ucontext_t *ucp, void (*func)(),
       int argc, ...);

Note that `func` uses an empty parenthesis as argument, but this is a deprecated feature in standard C:

C11(ISO/IEC 9899:201x) §6.11.6 Function declarators

The use of function declarators with empty parentheses (not prototype-format parameter type declarators) is an obsolescent feature.

This is the reason it's deprecated (and somehow unfortunate).

Problem

As far as I know, `ucontext` offers something better then `setjmp`. But it's deprecated and now removed from the POSIX spec. So why did it appear and why was it removed?

Original source