summaryrefslogtreecommitdiff
path: root/girepository/gibaseinfo.c
diff options
context:
space:
mode:
Diffstat (limited to 'girepository/gibaseinfo.c')
-rw-r--r--girepository/gibaseinfo.c25
1 files changed, 12 insertions, 13 deletions
diff --git a/girepository/gibaseinfo.c b/girepository/gibaseinfo.c
index ff9c9395..37893e6c 100644
--- a/girepository/gibaseinfo.c
+++ b/girepository/gibaseinfo.c
@@ -226,7 +226,7 @@ g_base_info_ref (GIBaseInfo *info)
GIRealInfo *rinfo = (GIRealInfo*)info;
g_assert (rinfo->ref_count != INVALID_REFCOUNT);
- ((GIRealInfo*)info)->ref_count++;
+ g_atomic_int_inc (&rinfo->ref_count);
return info;
}
@@ -244,21 +244,20 @@ g_base_info_unref (GIBaseInfo *info)
GIRealInfo *rinfo = (GIRealInfo*)info;
g_assert (rinfo->ref_count > 0 && rinfo->ref_count != INVALID_REFCOUNT);
- rinfo->ref_count--;
- if (!rinfo->ref_count)
- {
- if (rinfo->container && ((GIRealInfo *) rinfo->container)->ref_count != INVALID_REFCOUNT)
- g_base_info_unref (rinfo->container);
+ if (!g_atomic_int_dec_and_test (&rinfo->ref_count))
+ return;
- if (rinfo->repository)
- g_object_unref (rinfo->repository);
+ if (rinfo->container && ((GIRealInfo *) rinfo->container)->ref_count != INVALID_REFCOUNT)
+ g_base_info_unref (rinfo->container);
- if (rinfo->type == GI_INFO_TYPE_UNRESOLVED)
- g_slice_free (GIUnresolvedInfo, (GIUnresolvedInfo *) rinfo);
- else
- g_slice_free (GIRealInfo, rinfo);
- }
+ if (rinfo->repository)
+ g_object_unref (rinfo->repository);
+
+ if (rinfo->type == GI_INFO_TYPE_UNRESOLVED)
+ g_slice_free (GIUnresolvedInfo, (GIUnresolvedInfo *) rinfo);
+ else
+ g_slice_free (GIRealInfo, rinfo);
}
/**