]> granicus.if.org Git - gc/commitdiff
Workaround 'resource leak' false positives in alloc_MS, bl/envfile_init
authorIvan Maidanski <ivmai@mail.ru>
Tue, 20 Dec 2016 07:41:40 +0000 (10:41 +0300)
committerIvan Maidanski <ivmai@mail.ru>
Mon, 6 Feb 2017 17:30:50 +0000 (20:30 +0300)
* blacklst.c (GC_bl_init): Add assertion that GC_old_stack_bl and
GC_incomplete_stack_bl are both null prior to their assignment (to the
result of GC_scratch_alloc).
* mark.c (alloc_mark_stack): Replace GC_mark_stack_size!=0 with
GC_mark_stack!=NULL (to ensure no memory leak when GC_mark_stack is
assigned for the first time).
* misc.c [GC_READ_ENV_FILE && (MSWIN32 || MSWINCE || CYGWIN32)]
(GC_envfile_init): Add assertion that GC_envfile_content is null prior
to its assignment.

blacklst.c
mark.c
misc.c

index 449130df18963e78ffb5da1b27b2c31764f7298e..c06fbddec367af7b30605265b7278e2cfceac060 100644 (file)
@@ -109,6 +109,7 @@ GC_INNER void GC_bl_init(void)
     if (!GC_all_interior_pointers) {
       GC_bl_init_no_interiors();
     }
+    GC_ASSERT(NULL == GC_old_stack_bl && NULL == GC_incomplete_stack_bl);
     GC_old_stack_bl = (word *)GC_scratch_alloc(sizeof(page_hash_table));
     GC_incomplete_stack_bl = (word *)GC_scratch_alloc(sizeof(page_hash_table));
     if (GC_old_stack_bl == 0 || GC_incomplete_stack_bl == 0) {
diff --git a/mark.c b/mark.c
index 51563e9e2a4b6f5e87936d4277425d0061f80084..700acc629fe5060bd770a86cbb49e2fa67c3fe01 100644 (file)
--- a/mark.c
+++ b/mark.c
@@ -1241,7 +1241,7 @@ static void alloc_mark_stack(size_t n)
 #   endif
 
     GC_mark_stack_too_small = FALSE;
-    if (GC_mark_stack_size != 0) {
+    if (GC_mark_stack != NULL) {
         if (new_stack != 0) {
           if (recycle_old) {
             /* Recycle old space */
diff --git a/misc.c b/misc.c
index b228dbfb3605a351952fc6181f388b493c340e3a..d80c4c55e8ae338a722e05e3c4cb902759755e0b 100644 (file)
--- a/misc.c
+++ b/misc.c
@@ -707,6 +707,7 @@ GC_API void GC_CALL GC_get_heap_usage_safe(GC_word *pheap_size,
        if (content[ofs] == '\r' || content[ofs] == '\n')
          content[ofs] = '\0';
       }
+      GC_ASSERT(NULL == GC_envfile_content);
       GC_envfile_length = len + 1;
       GC_envfile_content = content;
 #   endif