summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorElliott Sales de Andrade <quantum.analyst@gmail.com>2023-03-03 01:22:08 -0600
committerElliott Sales de Andrade <quantum.analyst@gmail.com>2023-03-03 01:22:08 -0600
commit3a1a92a38514e40c647169b71748c1f9bedc22a7 (patch)
tree56710e69206b69538393025bd352be7a628dcfa6
parentc66725d167983101b725a2d92e2e64b89a45fd5c (diff)
downloadpidgin-3a1a92a38514e40c647169b71748c1f9bedc22a7.tar.gz
Use RcBox for PurpleRequestCommonParameters
Also, stop returning the input from `purple_request_cpar_unref`. That's not what `g_object_unref` does, and nothing uses the return value. Also also, just do the cleanup directly instead of calling `purple_request_cpar_set_extra_actions(cpar, NULL);`. Testing Done: Ran `Request->Fields` from the demo protocol. Reviewed at https://reviews.imfreedom.org/r/2308/
-rw-r--r--libpurple/request.c29
-rw-r--r--libpurple/request.h4
2 files changed, 15 insertions, 18 deletions
diff --git a/libpurple/request.c b/libpurple/request.c
index 3bfc7826fe..fe95eeb65c 100644
--- a/libpurple/request.c
+++ b/libpurple/request.c
@@ -161,10 +161,7 @@ struct _PurpleRequestFieldGroup
GList *fields;
};
-struct _PurpleRequestCommonParameters
-{
- int ref_count;
-
+struct _PurpleRequestCommonParameters {
PurpleAccount *account;
PurpleConversation *conv;
@@ -190,7 +187,7 @@ purple_request_fields_check_others_sensitivity(PurpleRequestField *field);
PurpleRequestCommonParameters *
purple_request_cpar_new(void)
{
- return g_new0(PurpleRequestCommonParameters, 1);
+ return g_rc_box_new0(PurpleRequestCommonParameters);
}
PurpleRequestCommonParameters *
@@ -236,21 +233,23 @@ purple_request_cpar_ref(PurpleRequestCommonParameters *cpar)
{
g_return_if_fail(cpar != NULL);
- cpar->ref_count++;
+ g_rc_box_acquire(cpar);
}
-PurpleRequestCommonParameters *
+static void
+purple_request_cpar_destroy(PurpleRequestCommonParameters *cpar) {
+ g_slist_free_full(cpar->extra_actions,
+ (GDestroyNotify)purple_key_value_pair_free);
+}
+
+void
purple_request_cpar_unref(PurpleRequestCommonParameters *cpar)
{
- if (cpar == NULL)
- return NULL;
-
- if (--cpar->ref_count > 0)
- return cpar;
+ if(cpar == NULL) {
+ return;
+ }
- purple_request_cpar_set_extra_actions(cpar, NULL);
- g_free(cpar);
- return NULL;
+ g_rc_box_release_full(cpar, (GDestroyNotify)purple_request_cpar_destroy);
}
void
diff --git a/libpurple/request.h b/libpurple/request.h
index 1923c9ba31..cd205b6cfc 100644
--- a/libpurple/request.h
+++ b/libpurple/request.h
@@ -333,10 +333,8 @@ purple_request_cpar_ref(PurpleRequestCommonParameters *cpar);
* Decreases the reference count on the parameters set.
*
* The object will be destroyed when this reaches 0.
- *
- * Returns: (transfer full): The NULL, if object was destroyed, cpar otherwise.
*/
-PurpleRequestCommonParameters *
+void
purple_request_cpar_unref(PurpleRequestCommonParameters *cpar);
/**