summaryrefslogtreecommitdiff
path: root/ptr_chck.c
diff options
context:
space:
mode:
authorIvan Maidanski <ivmai@mail.ru>2023-01-29 12:00:47 +0300
committerIvan Maidanski <ivmai@mail.ru>2023-01-30 09:42:21 +0300
commit7017bd93d4cc2c6498850a2d54995bdd7c878430 (patch)
tree6411f67ffbf716691d505dc91d3ccde11b6a16b5 /ptr_chck.c
parent67a477e74abee171b8e74ffc41372395c27e52a5 (diff)
downloadbdwgc-7017bd93d4cc2c6498850a2d54995bdd7c878430.tar.gz
Export setter and getter for pointer checking print procedures
Direct access to GC_same_obj_print_proc, GC_is_visible_print_proc and GC_is_valid_displacement_print_proc is now deprecated. * include/gc/gc.h (GC_same_obj_print_proc, GC_is_valid_displacement_print_proc, GC_is_visible_print_proc): Move the declaration upper (to be right after GC_get_finalizer_notifier); improve comment; add GC_ATTR_DEPRECATED attribute. * include/gc/gc.h (GC_valid_ptr_print_proc_t, GC_same_obj_print_proc_t): New public type. * include/gc/gc.h (GC_same_obj_print_proc): Use GC_same_obj_print_proc_t type. * ptr_chck.c (GC_same_obj_print_proc): Likewise. * include/gc/gc.h (GC_is_valid_displacement_print_proc, GC_is_visible_print_proc): Use GC_valid_ptr_print_proc_t type. * ptr_chck.c (GC_is_valid_displacement_print_proc, GC_is_visible_print_proc): Likewise. * include/gc/gc.h (GC_set_same_obj_print_proc, GC_get_same_obj_print_proc, GC_set_is_valid_displacement_print_proc, GC_get_is_valid_displacement_print_proc, GC_set_is_visible_print_proc, GC_get_is_visible_print_proc): New public function declaration. * ptr_chck.c (GC_set_same_obj_print_proc, GC_get_same_obj_print_proc, GC_set_is_valid_displacement_print_proc, GC_get_is_valid_displacement_print_proc, GC_set_is_visible_print_proc, GC_get_is_visible_print_proc): New function definition. * tests/gctest.c [!DBG_HDRS_ALL] (set_print_procs): Use GC_set_is_valid_displacement_print_proc() and GC_set_is_visible_print_proc() instead of setting GC_is_valid_displacement_print_proc and GC_set_is_visible_print_proc variables. * tests/gctest.c [GC_PTHREADS] (main): Call GC_get_is_valid_displacement_print_proc(), GC_get_is_visible_print_proc(), GC_get_same_obj_print_proc() and GC_set_same_obj_print_proc().
Diffstat (limited to 'ptr_chck.c')
-rw-r--r--ptr_chck.c75
1 files changed, 70 insertions, 5 deletions
diff --git a/ptr_chck.c b/ptr_chck.c
index 25ff4713..d83af110 100644
--- a/ptr_chck.c
+++ b/ptr_chck.c
@@ -24,8 +24,8 @@ STATIC void GC_CALLBACK GC_default_same_obj_print_proc(void * p, void * q)
": %p and %p are not in the same object", p, q);
}
-void (GC_CALLBACK *GC_same_obj_print_proc) (void *, void *)
- = GC_default_same_obj_print_proc;
+GC_same_obj_print_proc_t GC_same_obj_print_proc =
+ GC_default_same_obj_print_proc;
GC_API void * GC_CALL GC_same_obj(void *p, void *q)
{
@@ -96,8 +96,8 @@ STATIC void GC_CALLBACK GC_default_is_valid_displacement_print_proc(void *p)
ABORT_ARG1("GC_is_valid_displacement test failed", ": %p not valid", p);
}
-void (GC_CALLBACK *GC_is_valid_displacement_print_proc)(void *) =
- GC_default_is_valid_displacement_print_proc;
+GC_valid_ptr_print_proc_t GC_is_valid_displacement_print_proc =
+ GC_default_is_valid_displacement_print_proc;
GC_API void * GC_CALL GC_is_valid_displacement(void *p)
{
@@ -140,7 +140,7 @@ STATIC void GC_CALLBACK GC_default_is_visible_print_proc(void * p)
ABORT_ARG1("GC_is_visible test failed", ": %p not GC-visible", p);
}
-void (GC_CALLBACK *GC_is_visible_print_proc)(void * p) =
+GC_valid_ptr_print_proc_t GC_is_visible_print_proc =
GC_default_is_visible_print_proc;
#ifndef THREADS
@@ -258,3 +258,68 @@ GC_API void * GC_CALL GC_post_incr(void **p, ptrdiff_t how_much)
*p = result;
return initial; /* original *p */
}
+
+GC_API void GC_CALL GC_set_same_obj_print_proc(GC_same_obj_print_proc_t fn)
+{
+ DCL_LOCK_STATE;
+
+ GC_ASSERT(NONNULL_ARG_NOT_NULL(fn));
+ LOCK();
+ GC_same_obj_print_proc = fn;
+ UNLOCK();
+}
+
+GC_API GC_same_obj_print_proc_t GC_CALL GC_get_same_obj_print_proc(void)
+{
+ GC_same_obj_print_proc_t fn;
+ DCL_LOCK_STATE;
+
+ LOCK();
+ fn = GC_same_obj_print_proc;
+ UNLOCK();
+ return fn;
+}
+
+GC_API void GC_CALL GC_set_is_valid_displacement_print_proc(
+ GC_valid_ptr_print_proc_t fn)
+{
+ DCL_LOCK_STATE;
+
+ GC_ASSERT(NONNULL_ARG_NOT_NULL(fn));
+ LOCK();
+ GC_is_valid_displacement_print_proc = fn;
+ UNLOCK();
+}
+
+GC_API GC_valid_ptr_print_proc_t GC_CALL
+GC_get_is_valid_displacement_print_proc(void)
+{
+ GC_valid_ptr_print_proc_t fn;
+ DCL_LOCK_STATE;
+
+ LOCK();
+ fn = GC_is_valid_displacement_print_proc;
+ UNLOCK();
+ return fn;
+}
+
+GC_API void GC_CALL GC_set_is_visible_print_proc(GC_valid_ptr_print_proc_t fn)
+{
+ DCL_LOCK_STATE;
+
+ GC_ASSERT(NONNULL_ARG_NOT_NULL(fn));
+ LOCK();
+ GC_is_visible_print_proc = fn;
+ UNLOCK();
+}
+
+GC_API GC_valid_ptr_print_proc_t GC_CALL GC_get_is_visible_print_proc(void)
+{
+ GC_valid_ptr_print_proc_t fn;
+ DCL_LOCK_STATE;
+
+ LOCK();
+ fn = GC_is_visible_print_proc;
+ UNLOCK();
+ return fn;
+}