diff options
| author | Cy Schubert <cy@FreeBSD.org> | 2023-01-06 20:48:22 +0000 |
|---|---|---|
| committer | Cy Schubert <cy@FreeBSD.org> | 2023-01-06 20:48:22 +0000 |
| commit | 6f4e10db3298f6d65e1e646fe52aaafc3682b788 (patch) | |
| tree | 0a8de0ec1173c00886bcde1c3b18e0963e5f2b83 /lib/base/heimbase.c | |
| parent | d5d1e8b157da7410fe13e6302f8e1bee81320bb5 (diff) | |
Diffstat (limited to 'lib/base/heimbase.c')
| -rw-r--r-- | lib/base/heimbase.c | 22 |
1 files changed, 15 insertions, 7 deletions
diff --git a/lib/base/heimbase.c b/lib/base/heimbase.c index 6ad6ab258f09..9a1120b68368 100644 --- a/lib/base/heimbase.c +++ b/lib/base/heimbase.c @@ -86,11 +86,12 @@ struct heim_auto_release { void * heim_retain(void *ptr) { - struct heim_base *p = PTR2BASE(ptr); + struct heim_base *p; if (ptr == NULL || heim_base_is_tagged(ptr)) return ptr; + p = PTR2BASE(ptr); if (p->ref_cnt == heim_base_atomic_max) return ptr; @@ -109,11 +110,12 @@ void heim_release(void *ptr) { heim_base_atomic_type old; - struct heim_base *p = PTR2BASE(ptr); + struct heim_base *p; if (ptr == NULL || heim_base_is_tagged(ptr)) return; + p = PTR2BASE(ptr); if (p->ref_cnt == heim_base_atomic_max) return; @@ -256,9 +258,12 @@ heim_cmp(heim_object_t a, heim_object_t b) static void memory_dealloc(void *ptr) { - struct heim_base_mem *p = (struct heim_base_mem *)PTR2BASE(ptr); - if (p->dealloc) - p->dealloc(ptr); + if (ptr) { + struct heim_base_mem *p = (struct heim_base_mem *)PTR2BASE(ptr); + + if (p->dealloc) + p->dealloc(ptr); + } } struct heim_type_data memory_object = { @@ -666,13 +671,16 @@ heim_auto_release_create(void) heim_object_t heim_auto_release(heim_object_t ptr) { - struct heim_base *p = PTR2BASE(ptr); - struct ar_tls *tls = autorel_tls(); + struct heim_base *p; + struct ar_tls *tls; heim_auto_release_t ar; if (ptr == NULL || heim_base_is_tagged(ptr)) return ptr; + p = PTR2BASE(ptr); + tls = autorel_tls(); + /* drop from old pool */ if ((ar = p->autorelpool) != NULL) { HEIMDAL_MUTEX_lock(&ar->pool_mutex); |
