Fri, 03 Mar 2023 01:22:08 -0600
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); /**