(mysql.info.gz) RTS-threads
Info Catalog
(mysql.info.gz) The DBUG package
(mysql.info.gz) Porting
(mysql.info.gz) Thread packages
E.4 Comments about RTS Threads
==============================
I have tried to use the RTS thread packages with MySQL but stumbled on
the following problems:
They use old versions of many 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 currently written. See `mysys/my_pthread.c' for 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' and `my_pthread.c'.
* Run `thr_alarm'. If it runs without any "warning," "error," or
aborted messages, you are on the right track. Here is a successful
run on Solaris:
Main thread: 1
Thread 0 (5) started
Thread: 5 Waiting
process_alarm
Thread 1 (6) started
Thread: 6 Waiting
process_alarm
process_alarm
thread_alarm
Thread: 6 Slept for 1 (1) sec
Thread: 6 Waiting
process_alarm
process_alarm
thread_alarm
Thread: 6 Slept for 2 (2) sec
Thread: 6 Simulation of no alarm needed
Thread: 6 Slept for 0 (3) sec
Thread: 6 Waiting
process_alarm
process_alarm
thread_alarm
Thread: 6 Slept for 4 (4) sec
Thread: 6 Waiting
process_alarm
thread_alarm
Thread: 5 Slept for 10 (10) sec
Thread: 5 Waiting
process_alarm
process_alarm
thread_alarm
Thread: 6 Slept for 5 (5) sec
Thread: 6 Waiting
process_alarm
process_alarm
...
thread_alarm
Thread: 5 Slept for 0 (1) sec
end
Info Catalog
(mysql.info.gz) The DBUG package
(mysql.info.gz) Porting
(mysql.info.gz) Thread packages
automatically generated byinfo2html