base: Make heim_log_ref() thread-safe

This is necessary to making multiple `krb5_context`s be able to share a
log facility.
This commit is contained in:
Nicolas Williams
2022-12-06 15:15:15 -06:00
parent 9152d38d27
commit 1c4902378f
2 changed files with 4 additions and 4 deletions

View File

@@ -159,7 +159,7 @@ heim_get_debug_dest(heim_context context)
heim_error_code
heim_set_log_dest(heim_context context, heim_log_facility *fac)
{
context->log_dest = fac;
context->log_dest = heim_log_ref(fac);
return 0;
}

View File

@@ -52,7 +52,7 @@ struct heim_log_facility_internal {
struct heim_log_facility_s {
char *program;
size_t refs;
volatile heim_base_atomic(size_t) refs;
size_t len;
struct heim_log_facility_internal *val;
};
@@ -156,7 +156,7 @@ heim_log_facility *
heim_log_ref(heim_log_facility *fac)
{
if (fac)
fac->refs++;
heim_base_atomic_inc(&fac->refs);
return fac;
}
@@ -463,7 +463,7 @@ heim_closelog(heim_context context, heim_log_facility *fac)
{
int i;
if (!fac || --(fac->refs))
if (!fac || heim_base_atomic_dec(&fac->refs))
return;
for (i = 0; i < fac->len; i++)
(*fac->val[i].close_func)(fac->val[i].data);