diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2016-03-09 23:12:25 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2016-03-09 23:12:25 +0300 |
commit | 965c9f9865a1f2e7447294d3a4f7d1e23c097691 (patch) | |
tree | 1b77a71c3267c991a18c875cecee92682b655370 | |
parent | 9ddff68a20c064288da73a4316cabaef661948ab (diff) | |
download | bdwgc-965c9f9865a1f2e7447294d3a4f7d1e23c097691.tar.gz |
Refactoring of mark_and_push_stack (check GC_base result for null)
* mark.c (GC_mark_and_push_stack): Check GC_base() result (do not pass
NULL to HDR()).
-rw-r--r-- | mark.c | 15 |
1 files changed, 6 insertions, 9 deletions
@@ -1436,15 +1436,12 @@ GC_API struct GC_ms_entry * GC_CALL GC_mark_and_push(void *obj, PREFETCH(p); GET_HDR(p, hhdr); - if (EXPECT(IS_FORWARDING_ADDR_OR_NIL(hhdr), FALSE)) { - if (hhdr != 0) { - r = GC_base(p); - hhdr = HDR(r); - } - if (hhdr == 0) { - GC_ADD_TO_BLACK_LIST_STACK(p, source); - return; - } + if (EXPECT(IS_FORWARDING_ADDR_OR_NIL(hhdr), FALSE) + && (NULL == hhdr + || (r = GC_base(p)) == NULL + || (hhdr = HDR(r)) == NULL)) { + GC_ADD_TO_BLACK_LIST_STACK(p, source); + return; } if (EXPECT(HBLK_IS_FREE(hhdr), FALSE)) { GC_ADD_TO_BLACK_LIST_NORMAL(p, source); |