summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2016-12-20 10:41:40 +0300
committerIvan Maidanski <ivmai@mail.ru>2016-12-20 10:41:40 +0300
commit222f83721c658b5d8466f9a9ab9367900ed71868 (patch)
tree4ae44f4721699b3a796978240a5e6869a1f18c0b
parent5732651cfc04c3a5dbe044bbf4869e6701c44b17 (diff)
downloadbdwgc-222f83721c658b5d8466f9a9ab9367900ed71868.tar.gz
Workaround 'resource leak' false positives in alloc_MS, bl/envfile_init
* 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.
-rw-r--r--blacklst.c1
-rw-r--r--mark.c2
-rw-r--r--misc.c1
3 files changed, 3 insertions, 1 deletions
diff --git a/blacklst.c b/blacklst.c
index 449130df..c06fbdde 100644
--- a/blacklst.c
+++ b/blacklst.c
@@ -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 e93b433e..f5b9dc49 100644
--- a/mark.c
+++ b/mark.c
@@ -1277,7 +1277,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 2b6494db..16a833ad 100644
--- 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