| Performance of the incremental collector can be greatly enhanced with |
| -DNO_EXECUTE_PERMISSION. |
| |
| The collector should run with all of the -32, -n32 and -64 ABIs. Remember to |
| define the AS macro in the Makefile to be "as -64", or "as -n32". |
| |
| If you use -DREDIRECT_MALLOC=GC_malloc with C++ code, your code should make |
| at least one explicit call to malloc instead of new to ensure that the proper |
| version of malloc is linked in. |
| |
| Sproc threads are not supported in this version, though there may exist other |
| ports. |
| |
| Pthreads support is provided. This requires that: |
| |
| 1) You compile the collector with -DGC_IRIX_THREADS specified in the Makefile. |
| |
| 2) You have the latest pthreads patches installed. |
| |
| (Though the collector makes only documented pthread calls, |
| it relies on signal/threads interactions working just right in ways |
| that are not required by the standard. It is unlikely that this code |
| will run on other pthreads platforms. But please tell me if it does.) |
| |
| 3) Every file that makes thread calls should define IRIX_THREADS and then |
| include gc.h. Gc.h redefines some of the pthread primitives as macros which |
| also provide the collector with information it requires. |
| |
| 4) pthread_cond_wait and pthread_cond_timed_wait should be prepared for |
| premature wakeups. (I believe the pthreads and realted standards require this |
| anyway. Irix pthreads often terminate a wait if a signal arrives. |
| The garbage collector uses signals to stop threads.) |
| |
| 5) It is expensive to stop a thread waiting in IO at the time the request is |
| initiated. Applications with many such threads may not exhibit acceptable |
| performance with the collector. (Increasing the heap size may help.) |
| |
| 6) The collector should not be compiled with -DREDIRECT_MALLOC. This |
| confuses some library calls made by the pthreads implementation, which |
| expect the standard malloc. |
| |