[libsoup/wip/remove-deprecations: 12/49] Remove deprecated SoupChunkAllocator APIs
- From: Patrick Griffis <pgriffis src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libsoup/wip/remove-deprecations: 12/49] Remove deprecated SoupChunkAllocator APIs
- Date: Tue, 30 Jun 2020 21:55:18 +0000 (UTC)
commit 290f900c7d9382c06132c012096d464a54c4154f
Author: Patrick Griffis <pgriffis igalia com>
Date: Wed Feb 12 13:59:25 2020 -0800
Remove deprecated SoupChunkAllocator APIs
docs/reference/libsoup-2.4-sections.txt | 2 -
libsoup/soup-message-io.c | 19 ++----
libsoup/soup-message-private.h | 8 ---
libsoup/soup-message.c | 108 --------------------------------
libsoup/soup-message.h | 14 -----
tests/chunk-test.c | 71 ---------------------
6 files changed, 5 insertions(+), 217 deletions(-)
---
diff --git a/docs/reference/libsoup-2.4-sections.txt b/docs/reference/libsoup-2.4-sections.txt
index 0f130a56..bcc9e379 100644
--- a/docs/reference/libsoup-2.4-sections.txt
+++ b/docs/reference/libsoup-2.4-sections.txt
@@ -31,8 +31,6 @@ soup_message_add_status_code_handler
SoupMessageFlags
soup_message_set_flags
soup_message_get_flags
-SoupChunkAllocator
-soup_message_set_chunk_allocator
<SUBSECTION>
soup_message_disable_feature
soup_message_get_soup_request
diff --git a/libsoup/soup-message-io.c b/libsoup/soup-message-io.c
index 1f550e63..406e9632 100644
--- a/libsoup/soup-message-io.c
+++ b/libsoup/soup-message-io.c
@@ -744,20 +744,11 @@ io_read (SoupMessage *msg, gboolean blocking,
case SOUP_MESSAGE_IO_STATE_BODY:
- if (soup_message_has_chunk_allocator (msg)) {
- buffer = soup_message_allocate_chunk (msg, io->read_length);
- if (!buffer) {
- g_return_val_if_fail (!io->item || !io->item->new_api, FALSE);
- soup_message_io_pause (msg);
- return FALSE;
- }
- } else {
- if (!stack_buf)
- stack_buf = alloca (RESPONSE_BLOCK_SIZE);
- buffer = soup_buffer_new (SOUP_MEMORY_TEMPORARY,
- stack_buf,
- RESPONSE_BLOCK_SIZE);
- }
+ if (!stack_buf)
+ stack_buf = alloca (RESPONSE_BLOCK_SIZE);
+ buffer = soup_buffer_new (SOUP_MEMORY_TEMPORARY,
+ stack_buf,
+ RESPONSE_BLOCK_SIZE);
nread = g_pollable_stream_read (io->body_istream,
(guchar *)buffer->data,
diff --git a/libsoup/soup-message-private.h b/libsoup/soup-message-private.h
index 0c6f5d97..61f90752 100644
--- a/libsoup/soup-message-private.h
+++ b/libsoup/soup-message-private.h
@@ -15,10 +15,6 @@
typedef struct {
gpointer io_data;
- SoupChunkAllocator chunk_allocator;
- gpointer chunk_allocator_data;
- GDestroyNotify chunk_allocator_dnotify;
-
guint msg_flags;
gboolean server_side;
@@ -177,8 +173,4 @@ void soup_message_set_content_sniffer (SoupMessage *msg
void soup_message_set_bytes_for_sniffing (SoupMessage *msg,
gsize bytes);
-gboolean soup_message_has_chunk_allocator (SoupMessage *msg);
-SoupBuffer *soup_message_allocate_chunk (SoupMessage *msg,
- goffset read_length);
-
#endif /* __SOUP_MESSAGE_PRIVATE_H__ */
diff --git a/libsoup/soup-message.c b/libsoup/soup-message.c
index d51c9c04..fee53d29 100644
--- a/libsoup/soup-message.c
+++ b/libsoup/soup-message.c
@@ -171,8 +171,6 @@ soup_message_finalize (GObject *object)
SoupMessagePrivate *priv = soup_message_get_instance_private (msg);
soup_message_io_cleanup (msg);
- if (priv->chunk_allocator_dnotify)
- priv->chunk_allocator_dnotify (priv->chunk_allocator_data);
g_clear_pointer (&priv->uri, soup_uri_free);
g_clear_pointer (&priv->first_party, soup_uri_free);
@@ -1773,95 +1771,6 @@ soup_message_set_status_full (SoupMessage *msg,
g_object_notify (G_OBJECT (msg), SOUP_MESSAGE_REASON_PHRASE);
}
-/**
- * SoupChunkAllocator:
- * @msg: the #SoupMessage the chunk is being allocated for
- * @max_len: the maximum length that will be read, or 0.
- * @user_data: the data passed to soup_message_set_chunk_allocator()
- *
- * The prototype for a chunk allocation callback. This should allocate
- * a new #SoupBuffer and return it for the I/O layer to read message
- * body data off the network into.
- *
- * If @max_len is non-0, it indicates the maximum number of bytes that
- * could be read, based on what is known about the message size. Note
- * that this might be a very large number, and you should not simply
- * try to allocate that many bytes blindly. If @max_len is 0, that
- * means that libsoup does not know how many bytes remain to be read,
- * and the allocator should return a buffer of a size that it finds
- * convenient.
- *
- * If the allocator returns %NULL, the message will be paused. It is
- * up to the application to make sure that it gets unpaused when it
- * becomes possible to allocate a new buffer.
- *
- * Return value: (nullable): the new buffer (or %NULL)
- *
- * Deprecated: Use #SoupRequest if you want to read into your
- * own buffers.
- **/
-
-/**
- * soup_message_set_chunk_allocator:
- * @msg: a #SoupMessage
- * @allocator: the chunk allocator callback
- * @user_data: data to pass to @allocator
- * @destroy_notify: destroy notifier to free @user_data when @msg is
- * destroyed
- *
- * Sets an alternate chunk-allocation function to use when reading
- * @msg's body when using the traditional (ie,
- * non-#SoupRequest<!-- -->-based) API. Every time data is available
- * to read, libsoup will call @allocator, which should return a
- * #SoupBuffer. (See #SoupChunkAllocator for additional details.)
- * Libsoup will then read data from the network into that buffer, and
- * update the buffer's <literal>length</literal> to indicate how much
- * data it read.
- *
- * Generally, a custom chunk allocator would be used in conjunction
- * with soup_message_body_set_accumulate() %FALSE and
- * #SoupMessage::got_chunk, as part of a strategy to avoid unnecessary
- * copying of data. However, you cannot assume that every call to the
- * allocator will be followed by a call to your
- * #SoupMessage::got_chunk handler; if an I/O error occurs, then the
- * buffer will be unreffed without ever having been used. If your
- * buffer-allocation strategy requires special cleanup, use
- * soup_buffer_new_with_owner() rather than doing the cleanup from the
- * #SoupMessage::got_chunk handler.
- *
- * The other thing to remember when using non-accumulating message
- * bodies is that the buffer passed to the #SoupMessage::got_chunk
- * handler will be unreffed after the handler returns, just as it
- * would be in the non-custom-allocated case. If you want to hand the
- * chunk data off to some other part of your program to use later,
- * you'll need to ref the #SoupBuffer (or its owner, in the
- * soup_buffer_new_with_owner() case) to ensure that the data remains
- * valid.
- *
- * Deprecated: #SoupRequest provides a much simpler API that lets you
- * read the response directly into your own buffers without needing to
- * mess with callbacks, pausing/unpausing, etc.
- **/
-void
-soup_message_set_chunk_allocator (SoupMessage *msg,
- SoupChunkAllocator allocator,
- gpointer user_data,
- GDestroyNotify destroy_notify)
-{
- SoupMessagePrivate *priv;
-
- g_return_if_fail (SOUP_IS_MESSAGE (msg));
-
- priv = soup_message_get_instance_private (msg);
-
- if (priv->chunk_allocator_dnotify)
- priv->chunk_allocator_dnotify (priv->chunk_allocator_data);
-
- priv->chunk_allocator = allocator;
- priv->chunk_allocator_data = user_data;
- priv->chunk_allocator_dnotify = destroy_notify;
-}
-
/**
* soup_message_disable_feature:
* @msg: a #SoupMessage
@@ -2339,20 +2248,3 @@ soup_message_set_bytes_for_sniffing (SoupMessage *msg, gsize bytes)
priv->bytes_for_sniffing = bytes;
}
-
-gboolean
-soup_message_has_chunk_allocator (SoupMessage *msg)
-{
- SoupMessagePrivate *priv = soup_message_get_instance_private (msg);
-
- return priv->chunk_allocator != NULL;
-}
-
-SoupBuffer *
-soup_message_allocate_chunk (SoupMessage *msg,
- goffset read_length)
-{
- SoupMessagePrivate *priv = soup_message_get_instance_private (msg);
-
- return priv->chunk_allocator (msg, read_length, priv->chunk_allocator_data);
-}
diff --git a/libsoup/soup-message.h b/libsoup/soup-message.h
index fdf6789f..d0f9bea0 100644
--- a/libsoup/soup-message.h
+++ b/libsoup/soup-message.h
@@ -196,20 +196,6 @@ void soup_message_set_redirect (SoupMessage *msg,
guint status_code,
const char *redirect_uri);
-/* I/O */
-#ifndef SOUP_DISABLE_DEPRECATED
-typedef SoupBuffer * (*SoupChunkAllocator) (SoupMessage *msg,
- gsize max_len,
- gpointer user_data);
-
-SOUP_AVAILABLE_IN_2_4
-SOUP_DEPRECATED_IN_2_42_FOR(SoupRequest)
-void soup_message_set_chunk_allocator (SoupMessage *msg,
- SoupChunkAllocator allocator,
- gpointer user_data,
- GDestroyNotify destroy_notify);
-#endif
-
SOUP_AVAILABLE_IN_2_28
void soup_message_disable_feature (SoupMessage *msg,
GType feature_type);
diff --git a/tests/chunk-test.c b/tests/chunk-test.c
index c658cbd4..79d5b640 100644
--- a/tests/chunk-test.c
+++ b/tests/chunk-test.c
@@ -211,76 +211,6 @@ do_request_test (gconstpointer data)
soup_uri_free (uri);
}
-typedef struct {
- SoupBuffer *current_chunk;
- GChecksum *check;
- int length;
-} GetTestData;
-
-static SoupBuffer *
-chunk_allocator (SoupMessage *msg, gsize max_len, gpointer user_data)
-{
- GetTestData *gtd = user_data;
-
- debug_printf (2, " allocating chunk\n");
-
- soup_test_assert (gtd->current_chunk == NULL,
- "error: next chunk allocated before last one freed");
- gtd->current_chunk = soup_buffer_new_with_owner (g_malloc (6), 6,
- >d->current_chunk,
- clear_buffer_ptr);
- return gtd->current_chunk;
-}
-
-static void
-got_chunk (SoupMessage *msg, SoupBuffer *chunk, gpointer user_data)
-{
- GetTestData *gtd = user_data;
-
- debug_printf (2, " got chunk, %d bytes\n",
- (int)chunk->length);
- if (chunk != gtd->current_chunk) {
- debug_printf (1, "chunk mismatch! %p vs %p\n",
- chunk, gtd->current_chunk);
- }
-
- g_checksum_update (gtd->check, (guchar *)chunk->data, chunk->length);
- gtd->length += chunk->length;
-}
-
-static void
-do_response_test (void)
-{
- GetTestData gtd;
- SoupMessage *msg;
- const char *client_md5, *server_md5;
-
- gtd.current_chunk = NULL;
- gtd.length = 0;
- gtd.check = g_checksum_new (G_CHECKSUM_MD5);
-
- msg = soup_message_new_from_uri ("GET", base_uri);
- soup_message_body_set_accumulate (msg->response_body, FALSE);
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- soup_message_set_chunk_allocator (msg, chunk_allocator, >d, NULL);
- G_GNUC_END_IGNORE_DEPRECATIONS;
- g_signal_connect (msg, "got_chunk",
- G_CALLBACK (got_chunk), >d);
- soup_session_send_message (session, msg);
-
- soup_test_assert_message_status (msg, SOUP_STATUS_OK);
- g_assert_null (msg->response_body->data);
- g_assert_cmpint (soup_message_headers_get_content_length (msg->response_headers), ==, gtd.length);
-
- client_md5 = g_checksum_get_string (gtd.check);
- server_md5 = soup_message_headers_get_one (msg->response_headers,
- "Content-MD5");
- g_assert_cmpstr (client_md5, ==, server_md5);
-
- g_object_unref (msg);
- g_checksum_free (gtd.check);
-}
-
/* Make sure TEMPORARY buffers are handled properly with non-accumulating
* message bodies.
*/
@@ -446,7 +376,6 @@ main (int argc, char **argv)
g_test_add_data_func ("/chunks/request/proper-streaming/restart", GINT_TO_POINTER (PROPER_STREAMING |
RESTART), do_request_test);
g_test_add_data_func ("/chunks/request/hacky-streaming", GINT_TO_POINTER (HACKY_STREAMING),
do_request_test);
g_test_add_data_func ("/chunks/request/hacky-streaming/restart", GINT_TO_POINTER (HACKY_STREAMING |
RESTART), do_request_test);
- g_test_add_func ("/chunks/response", do_response_test);
g_test_add_func ("/chunks/temporary", do_temporary_test);
g_test_add_func ("/chunks/large", do_large_chunk_test);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]