diff options
author | Ivan Maidanski <ivmai@mail.ru> | 2023-01-29 12:00:47 +0300 |
---|---|---|
committer | Ivan Maidanski <ivmai@mail.ru> | 2023-01-30 09:42:21 +0300 |
commit | 7017bd93d4cc2c6498850a2d54995bdd7c878430 (patch) | |
tree | 6411f67ffbf716691d505dc91d3ccde11b6a16b5 /ptr_chck.c | |
parent | 67a477e74abee171b8e74ffc41372395c27e52a5 (diff) | |
download | bdwgc-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.c | 75 |
1 files changed, 70 insertions, 5 deletions
@@ -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; +} |