diff options
| author | Carlos Garcia Campos <cgarcia@igalia.com> | 2015-02-19 11:07:26 +0100 |
|---|---|---|
| committer | Carlos Garcia Campos <carlosgc@gnome.org> | 2015-03-02 09:42:37 +0100 |
| commit | 02f805dbf54dc6a30b53aa3b1607fd2c911e411f (patch) | |
| tree | 2d71793f4ae0d715397066cf80e6f654548e029b | |
| parent | 34cefba257d39cce16ba401f1853dabde8bb8ee6 (diff) | |
| download | libsoup-02f805dbf54dc6a30b53aa3b1607fd2c911e411f.tar.gz | |
cache: kick the message queue when a cached resource finishes
Otherwise the resource is not unqueued unless a new request is made.
https://bugzilla.gnome.org/show_bug.cgi?id=744788
| -rw-r--r-- | libsoup/soup-session.c | 3 | ||||
| -rw-r--r-- | tests/cache-test.c | 24 |
2 files changed, 26 insertions, 1 deletions
diff --git a/libsoup/soup-session.c b/libsoup/soup-session.c index ed5d2abb..1cd67b82 100644 --- a/libsoup/soup-session.c +++ b/libsoup/soup-session.c @@ -4100,8 +4100,9 @@ async_return_from_cache (SoupMessageQueueItem *item, g_hash_table_unref (params); } - item->state = SOUP_MESSAGE_FINISHING; async_send_request_return_result (item, g_object_ref (stream), NULL); + item->state = SOUP_MESSAGE_FINISHING; + soup_session_kick_queue (item->session); } typedef struct { diff --git a/tests/cache-test.c b/tests/cache-test.c index 7ee1a6dc..b8d9a25f 100644 --- a/tests/cache-test.c +++ b/tests/cache-test.c @@ -122,6 +122,7 @@ static char *do_request (SoupSession *session, static gboolean last_request_hit_network; static gboolean last_request_validated; +static gboolean last_request_unqueued; static guint cancelled_requests; static void @@ -152,6 +153,7 @@ do_request (SoupSession *session, GError *error = NULL; last_request_validated = last_request_hit_network = FALSE; + last_request_unqueued = FALSE; uri = soup_uri_new_with_base (base_uri, path); req = soup_session_request_http_uri (session, method, uri, NULL); @@ -269,6 +271,7 @@ request_unqueued (SoupSession *session, SoupMessage *msg, { if (msg->status_code == SOUP_STATUS_CANCELLED) cancelled_requests++; + last_request_unqueued = TRUE; } static void @@ -287,8 +290,11 @@ do_basics_test (gconstpointer data) SOUP_SESSION_USE_THREAD_CONTEXT, TRUE, SOUP_SESSION_ADD_FEATURE, cache, NULL); + g_signal_connect (session, "request-queued", G_CALLBACK (request_queued), NULL); + g_signal_connect (session, "request-unqueued", + G_CALLBACK (request_unqueued), NULL); debug_printf (2, " Initial requests\n"); body1 = do_request (session, base_uri, "GET", "/1", NULL, @@ -318,6 +324,8 @@ do_basics_test (gconstpointer data) NULL); soup_test_assert (!last_request_hit_network, "Request for /1 not filled from cache"); + soup_test_assert (last_request_unqueued, + "Cached resource /1 not unqueued"); g_assert_cmpstr (body1, ==, cmp); g_free (cmp); @@ -331,6 +339,8 @@ do_basics_test (gconstpointer data) "Request for /2 was validated"); soup_test_assert (!last_request_hit_network, "Request for /2 not filled from cache"); + soup_test_assert (last_request_unqueued, + "Cached resource /2 not unqueued"); g_assert_cmpstr (body2, ==, cmp); g_free (cmp); @@ -341,12 +351,16 @@ do_basics_test (gconstpointer data) NULL); soup_test_assert (last_request_hit_network, "Request for /1?attr=value filled from cache"); + soup_test_assert (last_request_unqueued, + "Cached resource /1?attr=value not unqueued"); g_free (cmp); debug_printf (2, " Second request\n"); cmp = do_request (session, base_uri, "GET", "/1", NULL, NULL); soup_test_assert (!last_request_hit_network, "Second request for /1 not filled from cache"); + soup_test_assert (last_request_unqueued, + "Request for /1 not unqueued"); g_assert_cmpstr (body1, ==, cmp); g_free (cmp); @@ -362,6 +376,8 @@ do_basics_test (gconstpointer data) "Request for /3 not validated"); soup_test_assert (!last_request_hit_network, "Request for /3 not filled from cache"); + soup_test_assert (last_request_unqueued, + "Cached resource /3 not unqueued"); g_assert_cmpstr (body3, ==, cmp); g_free (cmp); @@ -377,6 +393,8 @@ do_basics_test (gconstpointer data) "Request for /3 not validated"); soup_test_assert (last_request_hit_network, "Request for /3 filled from cache"); + soup_test_assert (last_request_unqueued, + "Request for /3 not unqueued"); g_assert_cmpstr (body3, !=, cmp); g_free (cmp); @@ -389,6 +407,8 @@ do_basics_test (gconstpointer data) "Second request for /3 not validated"); soup_test_assert (!last_request_hit_network, "Second request for /3 not filled from cache"); + soup_test_assert (last_request_unqueued, + "Cached resource /3 not unqueued"); g_assert_cmpstr (body3, !=, cmp); g_free (cmp); @@ -401,6 +421,8 @@ do_basics_test (gconstpointer data) "Request for /4 not validated"); soup_test_assert (!last_request_hit_network, "Request for /4 not filled from cache"); + soup_test_assert (last_request_unqueued, + "Cached resource /4 not unqueued"); g_assert_cmpstr (body4, ==, cmp); g_free (cmp); @@ -412,6 +434,8 @@ do_basics_test (gconstpointer data) NULL); soup_test_assert (last_request_hit_network, "Request for /5 filled from cache"); + soup_test_assert (last_request_unqueued, + "Request for /5 not unqueued"); g_assert_cmpstr (body5, ==, cmp); g_free (cmp); |
