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-27 14:09:26 +0300
commita6bab1b3eecdcb97de2eca8d38510df761352f98 (patch)
tree5dc83497bfec42acad1c9a1f41de435cbff9b3a6
parent9f9b8b36bab3690b0b4e0b65e93b0e2e6d5d9cd3 (diff)
downloadbdwgc-a6bab1b3eecdcb97de2eca8d38510df761352f98.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 989000ad..94b1c52f 100644
--- a/fnlz_mlc.c
+++ b/fnlz_mlc.c
@@ -87,7 +87,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 70122877..18e2b235 100644
--- a/reclaim.c
+++ b/reclaim.c
@@ -249,6 +249,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