diff options
-rw-r--r-- | docs/reference/libsoup-3.0-sections.txt | 3 | ||||
-rw-r--r-- | libsoup/server/soup-message-body.c | 25 | ||||
-rw-r--r-- | libsoup/server/soup-message-body.h | 11 | ||||
-rw-r--r-- | libsoup/server/soup-server-message.c | 4 |
4 files changed, 27 insertions, 16 deletions
diff --git a/docs/reference/libsoup-3.0-sections.txt b/docs/reference/libsoup-3.0-sections.txt index 0e963653..cb5824d6 100644 --- a/docs/reference/libsoup-3.0-sections.txt +++ b/docs/reference/libsoup-3.0-sections.txt @@ -176,7 +176,8 @@ SoupMemoryUse <SUBSECTION> SoupMessageBody soup_message_body_new -soup_message_body_free +soup_message_body_ref +soup_message_body_unref <SUBSECTION> soup_message_body_set_accumulate soup_message_body_get_accumulate diff --git a/libsoup/server/soup-message-body.c b/libsoup/server/soup-message-body.c index 28ef1bf3..ba451fd8 100644 --- a/libsoup/server/soup-message-body.c +++ b/libsoup/server/soup-message-body.c @@ -387,8 +387,16 @@ soup_message_body_wrote_chunk (SoupMessageBody *body, GBytes *chunk) g_bytes_unref (chunk2); } -static SoupMessageBody * -soup_message_body_copy (SoupMessageBody *body) +/** + * soup_message_body_ref: + * @body: a #SoupMessageBody + * + * Atomically increments the reference count of @body by one. + * + * Returns: the passed in #SoupMessageBody + */ +SoupMessageBody * +soup_message_body_ref (SoupMessageBody *body) { g_atomic_rc_box_acquire (body); @@ -396,16 +404,17 @@ soup_message_body_copy (SoupMessageBody *body) } /** - * soup_message_body_free: + * soup_message_body_unref: * @body: a #SoupMessageBody * - * Frees @body. You will not normally need to use this, as - * #SoupMessage frees its associated message bodies automatically. - **/ + * Atomically decrements the reference count of @body by one. + * When the reference count reaches zero, the resources allocated by + * @body are freed + */ void -soup_message_body_free (SoupMessageBody *body) +soup_message_body_unref (SoupMessageBody *body) { g_atomic_rc_box_release_full (body, (GDestroyNotify)soup_message_body_truncate); } -G_DEFINE_BOXED_TYPE (SoupMessageBody, soup_message_body, soup_message_body_copy, soup_message_body_free) +G_DEFINE_BOXED_TYPE (SoupMessageBody, soup_message_body, soup_message_body_ref, soup_message_body_unref) diff --git a/libsoup/server/soup-message-body.h b/libsoup/server/soup-message-body.h index 5894f0bd..baaf8c5c 100644 --- a/libsoup/server/soup-message-body.h +++ b/libsoup/server/soup-message-body.h @@ -28,6 +28,12 @@ SOUP_AVAILABLE_IN_ALL SoupMessageBody *soup_message_body_new (void); SOUP_AVAILABLE_IN_ALL +SoupMessageBody *soup_message_body_ref (SoupMessageBody *body); + +SOUP_AVAILABLE_IN_ALL +void soup_message_body_unref (SoupMessageBody *body); + +SOUP_AVAILABLE_IN_ALL void soup_message_body_set_accumulate(SoupMessageBody *body, gboolean accumulate); SOUP_AVAILABLE_IN_ALL @@ -64,9 +70,4 @@ SOUP_AVAILABLE_IN_ALL void soup_message_body_wrote_chunk (SoupMessageBody *body, GBytes *chunk); -SOUP_AVAILABLE_IN_ALL -void soup_message_body_free (SoupMessageBody *body); - -G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupMessageBody, soup_message_body_free) - G_END_DECLS diff --git a/libsoup/server/soup-server-message.c b/libsoup/server/soup-server-message.c index 40f92c7e..22311c5b 100644 --- a/libsoup/server/soup-server-message.c +++ b/libsoup/server/soup-server-message.c @@ -130,9 +130,9 @@ soup_server_message_finalize (GObject *object) g_clear_pointer (&msg->uri, g_uri_unref); g_free (msg->reason_phrase); - soup_message_body_free (msg->request_body); + soup_message_body_unref (msg->request_body); soup_message_headers_free (msg->request_headers); - soup_message_body_free (msg->response_body); + soup_message_body_unref (msg->response_body); soup_message_headers_free (msg->response_headers); G_OBJECT_CLASS (soup_server_message_parent_class)->finalize (object); |