Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Fixed
-
5.5.31
-
None
-
OpenBSD / Bitrig
Description
MariaDB fails to build on OpenBSD / Bitrig. The code in question utilizes POSIX user contexts which has been made obsolete within POSIX (2001) 12 years ago and was removed from POSIX (2008) 5 years ago.
In file included from /usr/ports/pobj/mariadb-5.5.30/mariadb-5.5.30/mysys/my_context.c:25:
|
/usr/ports/pobj/mariadb-5.5.30/mariadb-5.5.30/include/my_context.h:53:22: error: ucontext.h: No such file or directory
|
/usr/ports/pobj/mariadb-5.5.30/mariadb-5.5.30/mysys/my_context.c: In function 'my_context_spawn_internal':
|
/usr/ports/pobj/mariadb-5.5.30/mariadb-5.5.30/mysys/my_context.c:63: warning: implicit declaration of function 'setcontext'
|
/usr/ports/pobj/mariadb-5.5.30/mariadb-5.5.30/mysys/my_context.c: In function 'my_context_continue':
|
/usr/ports/pobj/mariadb-5.5.30/mariadb-5.5.30/mysys/my_context.c:77: warning: implicit declaration of function 'swapcontext'
|
/usr/ports/pobj/mariadb-5.5.30/mariadb-5.5.30/mysys/my_context.c: In function 'my_context_spawn':
|
/usr/ports/pobj/mariadb-5.5.30/mariadb-5.5.30/mysys/my_context.c:96: warning: implicit declaration of function 'getcontext'
|
/usr/ports/pobj/mariadb-5.5.30/mariadb-5.5.30/mysys/my_context.c:99: error: 'ucontext_t' has no member named 'uc_stack'
|
/usr/ports/pobj/mariadb-5.5.30/mariadb-5.5.30/mysys/my_context.c:100: error: 'ucontext_t' has no member named 'uc_stack'
|
/usr/ports/pobj/mariadb-5.5.30/mariadb-5.5.30/mysys/my_context.c:101: error: 'ucontext_t' has no member named 'uc_link'
|
/usr/ports/pobj/mariadb-5.5.30/mariadb-5.5.30/mysys/my_context.c:106: warning: implicit declaration of function 'makecontext'
|
*** Error 1 in . (mysys/CMakeFiles/mysys.dir/build.make:2520 'mysys/CMakeFiles/mysys.dir/my_context.c.o')
|
What is the bug here?
ucontext is the standard way to implement co-routines, it has been available everywhere for ages. Surely OpenBSD has had it for ages also?
Co-routines is an important feature to support for any OS. If Bitrig has removed ucontext for some reason, it needs to provide some other mechanism, and be prepared to port software to use the non-standard mechanism provided, right?
There is an inline assembly implementation available in the source code also, if Bitrig uses the standard register convention it should be usable directly, or it could be modified as appropriate...