summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2023-04-10 08:16:21 +0300
committerIvan Maidanski <ivmai@mail.ru>2023-04-28 19:49:14 +0300
commitc1d1915271e51bb1d725e3d1191c14e0181b1a57 (patch)
treed5eec8b990dee2193b6535836d62d94761eb72ab
parent9c6c618cc6512cbe4449acae4417a785c67da4ac (diff)
downloadbdwgc-c1d1915271e51bb1d725e3d1191c14e0181b1a57.tar.gz
Do not prohibit zero proc argument in GC_register_disclaim_proc
(a cherry-pick of commit d4c4a7ba5 from 'master') * fnlz_mlc.c [ENABLE_DISCLAIM] (GC_register_disclaim_proc): Do not check that proc is non-zero. * include/gc_disclaim.h (GC_register_disclaim_proc): Remove GC_ATTR_NONNULL(2) attribute. * reclaim.c [ENABLE_DISCLAIM] (GC_disclaim_and_reclaim): Add assertion that disclaim is non-zero.
-rw-r--r--fnlz_mlc.c1
-rw-r--r--include/gc_disclaim.h2
-rw-r--r--reclaim.c1
3 files changed, 2 insertions, 2 deletions
diff --git a/fnlz_mlc.c b/fnlz_mlc.c
index bfbcf506..65210586 100644
--- a/fnlz_mlc.c
+++ b/fnlz_mlc.c
@@ -89,7 +89,6 @@ GC_API void GC_CALL GC_register_disclaim_proc(int kind, GC_disclaim_proc proc,
int mark_unconditionally)
{
GC_ASSERT((unsigned)kind < MAXOBJKINDS);
- GC_ASSERT(NONNULL_ARG_NOT_NULL(proc));
if (!EXPECT(GC_find_leak, FALSE)) {
GC_obj_kinds[kind].ok_disclaim_proc = proc;
GC_obj_kinds[kind].ok_mark_unconditionally =
diff --git a/include/gc_disclaim.h b/include/gc_disclaim.h
index 6394b05e..785182b5 100644
--- a/include/gc_disclaim.h
+++ b/include/gc_disclaim.h
@@ -43,7 +43,7 @@ typedef int (GC_CALLBACK * GC_disclaim_proc)(void * /*obj*/);
/* No-op in the leak-finding mode. */
GC_API void GC_CALL GC_register_disclaim_proc(int /*kind*/,
GC_disclaim_proc /*proc*/,
- int /*mark_from_all*/) GC_ATTR_NONNULL(2);
+ int /*mark_from_all*/);
/* The finalizer closure used by GC_finalized_malloc. */
struct GC_finalizer_closure {
diff --git a/reclaim.c b/reclaim.c
index 72244d80..22b489ae 100644
--- a/reclaim.c
+++ b/reclaim.c
@@ -239,6 +239,7 @@ STATIC ptr_t GC_reclaim_uninit(struct hblk *hbp, hdr *hhdr, word sz,
struct obj_kind *ok = &GC_obj_kinds[hhdr->hb_obj_kind];
int (GC_CALLBACK *disclaim)(void *) = ok->ok_disclaim_proc;
+ GC_ASSERT(disclaim != 0);
# ifndef THREADS
GC_ASSERT(sz == hhdr -> hb_sz);
# endif