}
static void
+soup_client_input_stream_finalize (GObject *object)
+{
+ SoupClientInputStream *cistream = SOUP_CLIENT_INPUT_STREAM (object);
+
+ g_clear_object (&cistream->priv->msg);
+
+ G_OBJECT_CLASS (soup_client_input_stream_parent_class)->finalize (object);
+}
+
+static void
soup_client_input_stream_set_property (GObject *object, guint prop_id,
const GValue *value, GParamSpec *pspec)
{
g_type_class_add_private (stream_class, sizeof (SoupClientInputStreamPrivate));
+ object_class->finalize = soup_client_input_stream_finalize;
object_class->set_property = soup_client_input_stream_set_property;
object_class->get_property = soup_client_input_stream_get_property;
};
static void
+soup_converter_wrapper_init (SoupConverterWrapper *converter)
+{
+ converter->priv = G_TYPE_INSTANCE_GET_PRIVATE (converter,
+ SOUP_TYPE_CONVERTER_WRAPPER,
+ SoupConverterWrapperPrivate);
+}
+
+static void
soup_converter_wrapper_finalize (GObject *object)
{
SoupConverterWrapperPrivate *priv = SOUP_CONVERTER_WRAPPER (object)->priv;
g_clear_object (&priv->base_converter);
+ g_clear_object (&priv->msg);
G_OBJECT_CLASS (soup_converter_wrapper_parent_class)->finalize (object);
}
}
static void
-soup_converter_wrapper_init (SoupConverterWrapper *converter)
-{
- converter->priv = G_TYPE_INSTANCE_GET_PRIVATE (converter,
- SOUP_TYPE_CONVERTER_WRAPPER,
- SoupConverterWrapperPrivate);
-}
-
-static void
soup_converter_wrapper_class_init (SoupConverterWrapperClass *klass)
{
GObjectClass *gobject_class = G_OBJECT_CLASS (klass);
SoupIOStream *siostream = SOUP_IO_STREAM (object);
g_clear_object (&siostream->priv->base_iostream);
+ g_clear_object (&siostream->priv->istream);
+ g_clear_object (&siostream->priv->ostream);
G_OBJECT_CLASS (soup_io_stream_parent_class)->finalize (object);
}
"converter", wrapper,
NULL);
g_object_unref (io->body_istream);
+ g_object_unref (wrapper);
io->body_istream = filter;
}
g_error_free (error);
soup_message_io_finished (msg);
- }
+ } else if (error)
+ g_error_free (error);
g_object_unref (msg);
g_clear_object (&cancellable);
if (!io_run_until (msg,
SOUP_MESSAGE_IO_STATE_DONE,
SOUP_MESSAGE_IO_STATE_DONE,
- cancellable, error))
+ cancellable, error)) {
+ g_object_unref (msg);
return FALSE;
+ }
soup_message_io_finished (msg);
g_object_unref (msg);
g_object_unref (sadata->http);
g_object_unref (sadata->simple);
- if (sadata->cancellable)
- g_object_unref (sadata->cancellable);
- if (sadata->stream)
- g_object_unref (sadata->stream);
- if (sadata->original)
- g_object_unref (sadata->original);
+ g_clear_object (&sadata->cancellable);
+ g_clear_object (&sadata->stream);
+ g_clear_object (&sadata->original);
g_slice_free (SendAsyncData, sadata);
}
return;
}
- mostream = g_object_get_data (G_OBJECT (item->msg), "SoupSessionAsync:ostream");
+ mostream = g_object_get_data (G_OBJECT (item->result), "SoupSessionAsync:ostream");
if (mostream) {
gpointer data;
gssize size;
{
SoupMessageQueueItem *item = user_data;
GInputStream *istream = g_object_get_data (source, "istream");
-
GError *error = NULL;
+ /* It should be safe to call the sync close() method here since
+ * the message body has already been written.
+ */
+ g_input_stream_close (istream, NULL, NULL);
+ g_object_unref (istream);
+
/* If the message was cancelled, it will be completed via other means */
if (g_cancellable_is_cancelled (item->cancellable) ||
!item->result) {
if (g_output_stream_splice_finish (G_OUTPUT_STREAM (source),
result, &error) == -1) {
send_request_return_result (item, NULL, error);
+ soup_message_queue_item_unref (item);
return;
}
- /* Otherwise either restarted or finished will eventually be called.
- * It should be safe to call the sync close() method here since
- * the message body has already been written.
- */
- g_input_stream_close (istream, NULL, NULL);
+ /* Otherwise either restarted or finished will eventually be called. */
do_idle_run_queue (item->session);
soup_message_queue_item_unref (item);
}
/* Message may be requeued, so gather the current message body... */
ostream = g_memory_output_stream_new (NULL, 0, g_realloc, g_free);
- g_object_set_data_full (G_OBJECT (item->msg), "SoupSessionAsync:ostream",
+ g_object_set_data_full (G_OBJECT (item->result), "SoupSessionAsync:ostream",
ostream, g_object_unref);
- g_object_set_data_full (G_OBJECT (ostream), "istream",
- stream, g_object_unref);
+ g_object_set_data (G_OBJECT (ostream), "istream", stream);
/* Give the splice op its own ref on item */
soup_message_queue_item_ref (item);
g_object_unref (priv->connect_cancel);
priv->connect_cancel = NULL;
- if (cancelled)
+ if (cancelled) {
+ g_clear_error (&error);
return SOUP_STATUS_CANCELLED;
+ }
}
if (error) {
g_return_val_if_reached (FALSE);
base_domain = soup_tld_get_base_domain_internal (domain, 0, &error);
- if (g_strcmp0 (domain, base_domain))
+ if (g_strcmp0 (domain, base_domain)) {
+ g_clear_error (&error);
return FALSE;
+ }
if (g_error_matches (error, SOUP_TLD_ERROR, SOUP_TLD_ERROR_NO_BASE_DOMAIN)) {
g_error_free (error);
if (!soup_header_contains (options, "empty")) {
soup_message_body_append (msg->response_body,
SOUP_MEMORY_TAKE, contents, length);
- }
+ } else
+ g_free (contents);
if (soup_header_contains (options, "trailing-junk")) {
soup_message_body_append (msg->response_body, SOUP_MEMORY_COPY,
g_error_free (error);
errors++;
}
+ g_object_unref (stream);
check_response (msg, expected_encoding, expected_content_type, status);
g_object_unref (msg);
cmp = do_single_coding_req_test (req, "gzip", "text/plain", EXPECT_DECODED);
check_req_bodies (plain, cmp, "plain", "compressed w/ junk");
g_byte_array_free (cmp, TRUE);
+ g_object_unref (msg);
g_object_unref (req);
/* Plain text data, claim gzip with server error */
*/
check_req_bodies (plain, cmp, "plain", "mis-encoded");
g_byte_array_free (cmp, TRUE);
+ g_object_unref (msg);
g_object_unref (req);
/* Plain text data, claim deflate */
cmp = do_single_coding_req_test (req, "deflate", "text/plain", EXPECT_DECODED);
check_req_bodies (plain, cmp, "plain", "compressed");
g_byte_array_free (cmp, TRUE);
+ g_object_unref (msg);
g_object_unref (req);
/* Plain text data, claim deflate w/ junk */
cmp = do_single_coding_req_test (req, "deflate", "text/plain", EXPECT_DECODED);
check_req_bodies (plain, cmp, "plain", "compressed w/ junk");
g_byte_array_free (cmp, TRUE);
+ g_object_unref (msg);
g_object_unref (req);
/* Plain text data, claim deflate with server error */
cmp = do_single_coding_req_test (req, "deflate", "text/plain", EXPECT_NOT_DECODED);
check_req_bodies (plain, cmp, "plain", "mis-encoded");
g_byte_array_free (cmp, TRUE);
+ g_object_unref (msg);
g_object_unref (req);
/* Plain text data, claim deflate (no zlib headers)*/
cmp = do_single_coding_req_test (req, "deflate", "text/plain", EXPECT_DECODED);
check_req_bodies (plain, cmp, "plain", "compressed");
g_byte_array_free (cmp, TRUE);
+ g_object_unref (msg);
g_object_unref (req);
/* Plain text data, claim deflate with server error */
cmp = do_single_coding_req_test (req, "deflate", "text/plain", EXPECT_NOT_DECODED);
check_req_bodies (plain, cmp, "plain", "mis-encoded");
g_byte_array_free (cmp, TRUE);
+ g_object_unref (msg);
g_object_unref (req);
g_byte_array_free (plain, TRUE);
g_byte_array_free (body, TRUE);
g_object_unref (req);
+ soup_uri_free (uri);
soup_test_session_abort_unref (session);
}
errors++;
g_clear_error (&error);
}
+ g_object_unref (stream);
}
if (sockets[1]) {
errors++;
g_clear_error (&error);
}
+ g_object_unref (stream);
}
msg = soup_request_http_get_message (SOUP_REQUEST_HTTP (req));
g_object_ref (msg);
soup_session_queue_message (session, msg, NULL, NULL);
g_main_loop_run (loop);
+ g_main_loop_unref (loop);
if (msg->status_code != SOUP_STATUS_OK) {
debug_printf (1, " Unexpected response: %d %s\n",
errors++;
}
g_object_unref (msg);
+ g_object_unref (socket);
}
static void
...
fun:_dl_allocate_tls
...
- fun:g_thread_create_posix_impl
+ fun:g_system_thread_new
}
{
glib/filenamecharsets
fun:g_tls_backend_gnutls_store_session
}
{
+ glib/gtlssessioncache_client
+ Memcheck:Leak
+ ...
+ fun:gnutls_session_get_data2
+ fun:g_tls_client_connection_gnutls_finish_handshake
+}
+{
+ glib/gtlssessioncache_client2
+ Memcheck:Leak
+ ...
+ fun:g_bytes_new_with_free_func
+ fun:g_tls_client_connection_gnutls_finish_handshake
+}
+{
+ glib/gtlssessioncache_client3
+ Memcheck:Leak
+ ...
+ fun:g_bytes_new_take
+ fun:g_tls_client_connection_gnutls_constructed
+}
+{
+ glib/gtlssessioncache_client4
+ Memcheck:Leak
+ ...
+ fun:g_strdup_printf
+ fun:g_tls_client_connection_gnutls_constructed
+}
+{
+ glib/gtlssessioncache_server
+ Memcheck:Leak
+ ...
+ fun:g_tls_server_connection_gnutls_db_store
+}
+{
glib/cached_poll_array
Memcheck:Leak
...
fun:g_malloc_n
fun:g_main_context_iterate
}
+{
+ glib/rand
+ Memcheck:Leak
+ ...
+ fun:g_rand_new
+ fun:g_random_int_range
+}
+{
+ glib/g_cancellable_push_current
+ Memcheck:Leak
+ ...
+ fun:g_cancellable_push_current
+}
+{
+ glib/slice_thread_local
+ Memcheck:Leak
+ ...
+ fun:thread_memory_from_self
+}
# probably inlines the aggressive memcpy/memcmp
{
...
fun:intern_header_name
}
+{
+ libsoup/tlds
+ Memcheck:Leak
+ ...
+ fun:soup_tld_ensure_rules_hash_table
+}
# fixme?
errors++;
g_clear_error (&error);
}
+ g_object_unref (stream);
}
debug_printf (1, " %d %s\n", msg->status_code, msg->reason_phrase);
g_main_context_push_thread_default (context);
run_test (GPOINTER_TO_INT (num), FALSE);
g_main_context_pop_thread_default (context);
+ g_main_context_unref (context);
return NULL;
}
}
g_error_free (error);
+ g_object_unref (msg);
g_object_unref (req);
debug_printf (2, "\n");
return;
debug_printf (1, " could not send request: %s\n",
error->message);
g_error_free (error);
+ g_object_unref (msg);
g_object_unref (req);
errors++;
debug_printf (2, "\n");
g_error_free (error);
errors++;
}
+ g_object_unref (stream);
if (msg->status_code != final_status) {
debug_printf (1, " - Expected final status of %d, got %d !\n",
errors++;
}
+ g_object_unref (msg);
g_object_unref (req);
debug_printf (2, "\n");
}
stream = soup_request_send_finish (SOUP_REQUEST (source), res, &error);
if (!stream) {
debug_printf (1, " send_async failed: %s\n", error->message);
+ g_clear_error (&error);
errors++;
g_main_loop_quit (loop);
return;
} else if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
debug_printf (1, " send_async failed with wrong error: %s\n", error->message);
errors++;
- g_clear_error (&error);
}
+ g_clear_error (&error);
g_main_loop_quit (loop);
return;
} else {
{
SoupSocket **save_socket = user_data;
+ g_clear_object (save_socket);
*save_socket = g_object_ref (socket);
}
msg->status_code, msg->reason_phrase,
expected_status);
g_object_unref (msg);
+ g_object_unref (socket);
errors++;
return;
}
} else if (!g_error_matches (error, G_IO_ERROR, G_IO_ERROR_CANCELLED)) {
debug_printf (1, " send failed with wrong error: %s\n", error->message);
errors++;
- g_clear_error (&error);
}
+ g_clear_error (&error);
g_object_unref (msg);
+ g_object_unref (socket);
return;
} else if (!in) {
debug_printf (1, " soup_request_send failed: %s\n",
error->message);
g_object_unref (msg);
g_clear_error (&error);
+ g_object_unref (socket);
errors++;
return;
}
msg->reason_phrase);
g_object_unref (msg);
g_object_unref (in);
+ g_object_unref (socket);
errors++;
return;
}
error->message);
errors++;
}
+ g_object_unref (stream);
}
if (SOUP_STATUS_IS_SUCCESSFUL (msg->status_code) &&