Comments About RTS Threads
I have tried to use the RTS thread packages with MySQL but stumbled on the following problems:
They use an old version of a lot of POSIX calls, and it is very tedious to make wrappers for all functions. I am inclined to think that it would be easier to change the thread libraries to the newest POSIX specification.
Some wrappers are already written. See
mysys/my_pthread.cfor more info.
At least the following should be changed:
pthread_get_specific should use one argument. sigwait should take two arguments. A lot of functions (at least pthread_cond_wait, pthread_cond_timedwait) should return the error code on error. Now they return -1 and set errno.
Another problem is that user-level threads use the ALRM signal and this aborts a lot of functions (read, write, open...). MySQL should do a retry on interrupt on all of these, but it is not that easy to verify it.
The biggest unsolved problem is the following:
To get thread-level alarms I changed mysys/thr_alarm.c to wait between
alarms with pthread_cond_timedwait( ), but this aborts with error
EINTR. I tried to debug the thread library as to why this happens,
but couldn’t find any easy solution.
If someone wants to try MySQL with RTS threads I suggest the following:
Change functions MySQL uses from the thread library to POSIX. This shouldn’t take that long.
Compile all libraries with the -DHAVE_rts_threads.
Compile thr_alarm.
If there are some small differences in the implementation, they may be fixed by changing
my_pthread.h ...