Use RcBox for PurpleRequestCommonParameters

Fri, 03 Mar 2023 01:22:08 -0600

author
Elliott Sales de Andrade <quantum.analyst@gmail.com>
date
Fri, 03 Mar 2023 01:22:08 -0600
changeset 42145
86e0a26348a1
parent 42144
bccfce865431
child 42146
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/

libpurple/request.c file | annotate | diff | comparison | revisions
libpurple/request.h file | annotate | diff | comparison | revisions
--- 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);
 
 /**

mercurial