We do all of that in linux-threads.  Somebody needs to debug it though
and I don't have the time.

        - Godmar

> 
> This may not be entirely relevant, or it might.
> 
> For any port using native threads, the following must be considered:
> 
> 1. When the GC thread does a GC, no other threads may run.  This is because
>    if the GC thread gets preempted, then another thread may create a
>    reference to an object by modifying memory that the GC has already walked.
>    If the GC sees no other reference to this memory, then it will be freed,
>    even though there is a reference to it.
> 
>    AmigaOS provides Forbid() and Permit() which nicely block other threads
>    (as well as all other threads in the system, ugh).
> 
>    POSIX threads provides no adequate facility.
> 
> 2. The GC thread must also walk the register files of sleeping threads, since
>    in a JIT system, the only reference to an object might be in a register.
>    This requires that the GC have some knowledge of how registers are stored
>    on the native thread system (typically, registers are stored on the stack).
> 
>    Systems that do thread switching entirely in the kernel, and place the
>    registers on the kernel stack, will not work out here, since the user-land
>    GC has no way of reading kernel memory.
> 
> If these issues are not addressed, then subtle GC bugs may occur.
> 
> Note that if you are running your own thread package, tending to these is
> easy, since you can provide the necessary functionality.
> 

Reply via email to