diff options
-rw-r--r-- | docs/reference/libsoup-3.0-sections.txt | 3 | ||||
-rw-r--r-- | libsoup/cache/soup-cache.c | 4 | ||||
-rw-r--r-- | libsoup/server/soup-server-io.c | 2 | ||||
-rw-r--r-- | libsoup/server/soup-server-message.c | 4 | ||||
-rw-r--r-- | libsoup/soup-message-headers.c | 24 | ||||
-rw-r--r-- | libsoup/soup-message-headers.h | 7 | ||||
-rw-r--r-- | libsoup/soup-message.c | 4 | ||||
-rw-r--r-- | libsoup/soup-multipart-input-stream.c | 4 | ||||
-rw-r--r-- | libsoup/soup-multipart.c | 2 | ||||
-rw-r--r-- | tests/cache-test.c | 2 | ||||
-rw-r--r-- | tests/header-parsing-test.c | 12 |
11 files changed, 41 insertions, 27 deletions
diff --git a/docs/reference/libsoup-3.0-sections.txt b/docs/reference/libsoup-3.0-sections.txt index 9b08dc8c..c15bda3d 100644 --- a/docs/reference/libsoup-3.0-sections.txt +++ b/docs/reference/libsoup-3.0-sections.txt @@ -99,7 +99,8 @@ SOUP_METHOD_UNLOCK SoupMessageHeaders SoupMessageHeadersType soup_message_headers_new -soup_message_headers_free +soup_message_headers_ref +soup_message_headers_unref <SUBSECTION> soup_message_headers_append soup_message_headers_replace diff --git a/libsoup/cache/soup-cache.c b/libsoup/cache/soup-cache.c index 02d97974..f9303cec 100644 --- a/libsoup/cache/soup-cache.c +++ b/libsoup/cache/soup-cache.c @@ -285,7 +285,7 @@ static void soup_cache_entry_free (SoupCacheEntry *entry) { g_free (entry->uri); - g_clear_pointer (&entry->headers, soup_message_headers_free); + g_clear_pointer (&entry->headers, soup_message_headers_unref); g_clear_object (&entry->cancellable); g_slice_free (SoupCacheEntry, entry); @@ -1610,7 +1610,7 @@ soup_cache_load (SoupCache *cache) /* Check that we have headers */ soup_message_headers_iter_init (&soup_headers_iter, headers); if (!soup_message_headers_iter_next (&soup_headers_iter, &header_key, &header_value)) { - soup_message_headers_free (headers); + soup_message_headers_unref (headers); continue; } diff --git a/libsoup/server/soup-server-io.c b/libsoup/server/soup-server-io.c index 37b484ff..5cc240b1 100644 --- a/libsoup/server/soup-server-io.c +++ b/libsoup/server/soup-server-io.c @@ -256,7 +256,7 @@ handle_partial_get (SoupServerMessage *msg) ranges[i].end - ranges[i].start + 1); soup_multipart_append_part (multipart, part_headers, part_body); - soup_message_headers_free (part_headers); + soup_message_headers_unref (part_headers); g_bytes_unref (part_body); } diff --git a/libsoup/server/soup-server-message.c b/libsoup/server/soup-server-message.c index 22311c5b..d51f5bee 100644 --- a/libsoup/server/soup-server-message.c +++ b/libsoup/server/soup-server-message.c @@ -131,9 +131,9 @@ soup_server_message_finalize (GObject *object) g_free (msg->reason_phrase); soup_message_body_unref (msg->request_body); - soup_message_headers_free (msg->request_headers); + soup_message_headers_unref (msg->request_headers); soup_message_body_unref (msg->response_body); - soup_message_headers_free (msg->response_headers); + soup_message_headers_unref (msg->response_headers); G_OBJECT_CLASS (soup_server_message_parent_class)->finalize (object); } diff --git a/libsoup/soup-message-headers.c b/libsoup/soup-message-headers.c index 81d53b8f..3abdb328 100644 --- a/libsoup/soup-message-headers.c +++ b/libsoup/soup-message-headers.c @@ -84,8 +84,16 @@ soup_message_headers_new (SoupMessageHeadersType type) return hdrs; } -static SoupMessageHeaders * -soup_message_headers_copy (SoupMessageHeaders *hdrs) +/** + * soup_message_headers_ref: + * @hdrs: a #SoupMessageHeaders + * + * Atomically increments the reference count of @hdrs by one. + * + * Returns: the passed in #SoupMessageHeaders + */ +SoupMessageHeaders * +soup_message_headers_ref (SoupMessageHeaders *hdrs) { g_atomic_rc_box_acquire (hdrs); @@ -101,18 +109,20 @@ soup_message_headers_destroy (SoupMessageHeaders *hdrs) } /** - * soup_message_headers_free: + * soup_message_headers_unref: * @hdrs: a #SoupMessageHeaders * - * Frees @hdrs. - **/ + * Atomically decrements the reference count of @hdrs by one. + * When the reference count reaches zero, the resources allocated by + * @hdrs are freed + */ void -soup_message_headers_free (SoupMessageHeaders *hdrs) +soup_message_headers_unref (SoupMessageHeaders *hdrs) { g_atomic_rc_box_release_full (hdrs, (GDestroyNotify)soup_message_headers_destroy); } -G_DEFINE_BOXED_TYPE (SoupMessageHeaders, soup_message_headers, soup_message_headers_copy, soup_message_headers_free) +G_DEFINE_BOXED_TYPE (SoupMessageHeaders, soup_message_headers, soup_message_headers_ref, soup_message_headers_unref) /** * soup_message_headers_get_headers_type: diff --git a/libsoup/soup-message-headers.h b/libsoup/soup-message-headers.h index 4348547f..a355a7bb 100644 --- a/libsoup/soup-message-headers.h +++ b/libsoup/soup-message-headers.h @@ -24,7 +24,10 @@ SOUP_AVAILABLE_IN_ALL SoupMessageHeaders *soup_message_headers_new (SoupMessageHeadersType type); SOUP_AVAILABLE_IN_ALL -void soup_message_headers_free (SoupMessageHeaders *hdrs); +SoupMessageHeaders *soup_message_headers_ref (SoupMessageHeaders *hdrs); + +SOUP_AVAILABLE_IN_ALL +void soup_message_headers_unref (SoupMessageHeaders *hdrs); SOUP_AVAILABLE_IN_ALL void soup_message_headers_append (SoupMessageHeaders *hdrs, @@ -169,6 +172,6 @@ void soup_message_headers_set_content_disposition (SoupMessageHeaders *hdrs const char *disposition, GHashTable *params); -G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupMessageHeaders, soup_message_headers_free) +G_DEFINE_AUTOPTR_CLEANUP_FUNC (SoupMessageHeaders, soup_message_headers_unref) G_END_DECLS diff --git a/libsoup/soup-message.c b/libsoup/soup-message.c index ff4a278d..425c4291 100644 --- a/libsoup/soup-message.c +++ b/libsoup/soup-message.c @@ -175,8 +175,8 @@ soup_message_finalize (GObject *object) g_clear_object (&priv->tls_certificate); - soup_message_headers_free (priv->request_headers); - soup_message_headers_free (priv->response_headers); + soup_message_headers_unref (priv->request_headers); + soup_message_headers_unref (priv->response_headers); g_clear_object (&priv->request_body_stream); g_free (priv->reason_phrase); diff --git a/libsoup/soup-multipart-input-stream.c b/libsoup/soup-multipart-input-stream.c index fc10b525..8dce93a2 100644 --- a/libsoup/soup-multipart-input-stream.c +++ b/libsoup/soup-multipart-input-stream.c @@ -345,7 +345,7 @@ soup_multipart_input_stream_parse_headers (SoupMultipartInputStream *multipart) if (success) priv->remaining_bytes = soup_message_headers_get_content_length (priv->current_headers); else - g_clear_pointer (&priv->current_headers, soup_message_headers_free); + g_clear_pointer (&priv->current_headers, soup_message_headers_unref); g_byte_array_remove_range (priv->meta_buf, 0, priv->meta_buf->len); } @@ -364,7 +364,7 @@ soup_multipart_input_stream_read_headers (SoupMultipartInputStream *multipart, g_return_val_if_fail (priv->boundary != NULL, TRUE); - g_clear_pointer (&priv->current_headers, soup_message_headers_free); + g_clear_pointer (&priv->current_headers, soup_message_headers_unref); while (1) { nread = soup_filter_input_stream_read_line (priv->base_stream, read_buf, sizeof (read_buf), diff --git a/libsoup/soup-multipart.c b/libsoup/soup-multipart.c index 1e11aa59..d2ea1b5b 100644 --- a/libsoup/soup-multipart.c +++ b/libsoup/soup-multipart.c @@ -53,7 +53,7 @@ soup_multipart_new_internal (char *mime_type, char *boundary) multipart = g_slice_new (SoupMultipart); multipart->mime_type = mime_type; multipart->boundary = boundary; - multipart->headers = g_ptr_array_new_with_free_func ((GDestroyNotify)soup_message_headers_free); + multipart->headers = g_ptr_array_new_with_free_func ((GDestroyNotify)soup_message_headers_unref); multipart->bodies = g_ptr_array_new_with_free_func ((GDestroyNotify)g_bytes_unref); return multipart; diff --git a/tests/cache-test.c b/tests/cache-test.c index 781b3355..97710047 100644 --- a/tests/cache-test.c +++ b/tests/cache-test.c @@ -652,7 +652,7 @@ do_headers_test (gconstpointer data) header_value = soup_message_headers_get_list (headers, "My-Header"); g_assert_cmpstr (header_value, ==, "My header NEW value"); - soup_message_headers_free (headers); + soup_message_headers_unref (headers); soup_test_session_abort_unref (session); g_object_unref (cache); diff --git a/tests/header-parsing-test.c b/tests/header-parsing-test.c index bc701378..b7c46ea0 100644 --- a/tests/header-parsing-test.c +++ b/tests/header-parsing-test.c @@ -901,7 +901,7 @@ do_request_tests (void) g_free (method); g_free (path); - soup_message_headers_free (headers); + soup_message_headers_unref (headers); } } @@ -937,7 +937,7 @@ do_response_tests (void) g_assert_null (resptests[i].reason_phrase); g_free (reason_phrase); - soup_message_headers_free (headers); + soup_message_headers_unref (headers); } } @@ -1100,7 +1100,7 @@ do_content_disposition_tests (void) g_assert_cmpstr (filename, ==, RFC5987_TEST_FALLBACK_FILENAME); g_hash_table_destroy (params); - soup_message_headers_free (hdrs); + soup_message_headers_unref (hdrs); /* Ensure that soup-multipart always quotes filename */ g_test_bug ("641280"); @@ -1112,7 +1112,7 @@ do_content_disposition_tests (void) hdrs = soup_message_headers_new (SOUP_MESSAGE_HEADERS_MULTIPART); soup_multipart_to_message (multipart, hdrs, &buffer); - soup_message_headers_free (hdrs); + soup_message_headers_unref (hdrs); soup_multipart_free (multipart); g_assert_nonnull (strstr (g_bytes_get_data (buffer, NULL), "filename=\"token\"")); @@ -1167,7 +1167,7 @@ do_content_type_tests (void) mime_type = soup_message_headers_get_content_type (hdrs, ¶ms); g_assert_null (mime_type); - soup_message_headers_free (hdrs); + soup_message_headers_unref (hdrs); } struct { @@ -1232,7 +1232,7 @@ do_bad_header_tests (void) bad_headers[i].value); g_test_assert_expected_messages (); } - soup_message_headers_free (hdrs); + soup_message_headers_unref (hdrs); } int |