diff options
author | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2023-03-03 01:22:08 -0600 |
---|---|---|
committer | Elliott Sales de Andrade <quantum.analyst@gmail.com> | 2023-03-03 01:22:08 -0600 |
commit | 3a1a92a38514e40c647169b71748c1f9bedc22a7 (patch) | |
tree | 56710e69206b69538393025bd352be7a628dcfa6 | |
parent | c66725d167983101b725a2d92e2e64b89a45fd5c (diff) | |
download | pidgin-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.c | 29 | ||||
-rw-r--r-- | libpurple/request.h | 4 |
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); /** |