]> git.llucax.com Git - software/dgc/cdgc.git/commit
Run the mark phase in a fork()ed process
authorLeandro Lucarella <llucax@gmail.com>
Thu, 26 Aug 2010 01:21:32 +0000 (22:21 -0300)
committerLeandro Lucarella <llucax@gmail.com>
Thu, 26 Aug 2010 01:23:37 +0000 (22:23 -0300)
commitb28fd72842fc9ce935bed74f7b2ba79f9cc59711
tree2e88236c7c110329be6e0bf8ead1d0211b70d9ef
parent22d77f1060c88a21da997f5c282e5bff6d512d22
Run the mark phase in a fork()ed process

This is the first big step towards a concurrent GC. The mark phase is ran
in a fork()ed process and the world is only stopped to do the fork()
because we need each thread to dump the CPU registers into the stack to
be scanned.

Forking is controlled via the option "no_fork" (which is false by default).
If not enough support from the underlying OS is found (i.e. no fork() or
no shared memory) or if fork() fails, the mark phase fallback to run in
the same process as the mutator (as it was done before this patch).

The mark and freebits bitmaps are shared between the two processes to
communicate the results of the mark phase. The freebits could not be
shared, but in that case the freebits should be set in the mutator process,
making pauses longer. Freebits should be revisited though.
rt/gc/cdgc/gc.d
rt/gc/cdgc/opts.d