[Gc] Workaround for problems with GetWriteWatch and fix for GC_get_heap_size/bytes_free values on unmapping

Ivan Maidanski ivmai at mail.ru
Sat Jun 13 12:14:00 PDT 2009


1. MPROTECT_VDB only. As in some cases on Win32 the exception-based approach of incremental collection may work better than GetWriteWatch-based one then there should be a way to select the one. So, GC_PREFER_MPROTECT_VDB macro and GC_USE_GETWRITEWATCH environment variable are introduced.

2. The values returned by GC_get_heap_size() and GC_get_free_bytes() if USE_MUNMAP. If the memory is unmapped (returned to the OS) then the values indicating the current heap size and the free memory size should be updated accordingly (otherwise, the total heap size of several applications running on a system may become larger than the system virtual memory size, and the memory considered as "free" by one application may be, in fact, in use by another one).

The patch is, in fact, resembling diff52, diff75, diff83 partly. The patch also fixes some typos and update the comments (in the same files).

ChangeLog entries:

        * include/private/gcconfig.h (GC_PREFER_MPROTECT_VDB): New macro
        recognized (only if MPROTECT_VDB).
        * os_dep.c (detect_GetWriteWatch): Recognize "GC_USE_GETWRITEWATCH"
        environment variable (only if MPROTECT_VDB, if the variable is
        unset when GC_PREFER_MPROTECT_VDB macro controls the strategy).
        * doc/README.environment (GC_USE_GETWRITEWATCH): New variable.
        * Makefile.direct (DONT_USE_USER32_DLL, GC_PREFER_MPROTECT_VDB):
        Add the comments for.
        * Makefile.direct (MARK_BIT_PER_OBJ, PRINT_BLACK_LIST,
        USE_PROC_FOR_LIBRARIES): Fix typo in the comments.
        * Makefile.direct (USE_MMAP, USE_MUNMAP, THREAD_LOCAL_ALLOC,
        PARALLEL_MARK, STATIC): Update the comments.
        * include/private/gcconfig.h (MPROTECT_VDB): Add FIXME for
        USE_MUNMAP and PARALLEL_MARK cases (to relax the conditions in
        the future).
        * os_dep.c (detect_GetWriteWatch): Use multi-byte (A) variant of
        Win32 GetModuleFileName().
        * os_dep.c (GC_unmap, GC_unmap_gap): Decrease GC_heapsize and
        GC_large_free_bytes values appropriately on heap shrunk (the memory
        is returned to the OS).
        * os_dep.c (GC_remap): Increase GC_heapsize and GC_large_free_bytes
        values appropriately when memory is mapped again.
        * os_dep.c (GC_dirty_init): Move "ifdef GWW_VDB" block out of
        "ifdef MSWIN32" one (for Cygwin).

PS. I've also fixed issues with data races in the public getters/setters (mostly in the same as I'd described in one of my previous posts) but the patch is not ready yet.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: =?koi8-r?Q?diff101=5Fcvs?=
Type: application/octet-stream
Size: 10321 bytes
Desc: not available
Url : http://napali.hpl.hp.com/pipermail/gc/attachments/20090613/2dba3c02/koi8-rQdiff1015Fcvs.obj

More information about the Gc mailing list