pidgin/pidgin

Use RcBox for PurpleRequestCommonParameters

14 months ago, Elliott Sales de Andrade
86e0a26348a1
Parents bccfce865431
Children 393c2ea6b399
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/
--- a/libpurple/request.c Fri Mar 03 01:11:06 2023 -0600
+++ b/libpurple/request.c Fri Mar 03 01:22:08 2023 -0600
@@ -161,10 +161,7 @@
GList *fields;
};
-struct _PurpleRequestCommonParameters
-{
- int ref_count;
-
+struct _PurpleRequestCommonParameters {
PurpleAccount *account;
PurpleConversation *conv;
@@ -190,7 +187,7 @@
PurpleRequestCommonParameters *
purple_request_cpar_new(void)
{
- return g_new0(PurpleRequestCommonParameters, 1);
+ return g_rc_box_new0(PurpleRequestCommonParameters);
}
PurpleRequestCommonParameters *
@@ -236,21 +233,23 @@
{
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;
-
- purple_request_cpar_set_extra_actions(cpar, NULL);
- g_free(cpar);
- return NULL;
+ if(cpar == NULL) {
+ return;
+ }
+
+ g_rc_box_release_full(cpar, (GDestroyNotify)purple_request_cpar_destroy);
}
void
--- a/libpurple/request.h Fri Mar 03 01:11:06 2023 -0600
+++ b/libpurple/request.h Fri Mar 03 01:22:08 2023 -0600
@@ -333,10 +333,8 @@
* 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);
/**