[-]
[+]
|
Changed |
_service:tar_git:libgrilio.changes
|
|
[-]
[+]
|
Changed |
_service:tar_git:libgrilio.spec
^
|
|
[-]
[+]
|
Changed |
_service
^
|
@@ -2,7 +2,7 @@
<service name="tar_git">
<param name="url">https://git.merproject.org/mer-core/libgrilio.git</param>
<param name="branch">master</param>
- <param name="revision">09ab47fc2a02106ed5ece87d73e742d2a6fc2e70</param>
+ <param name="revision">07eb0174e784c5038cfe889ab2b8199571c83cd1</param>
<param name="token"/>
<param name="debian">N</param>
<param name="dumb">N</param>
|
[-]
[+]
|
Changed |
_service:tar_git:libgrilio-1.0.34.tar.bz2/Makefile
^
|
@@ -21,7 +21,7 @@
VERSION_MAJOR = 1
VERSION_MINOR = 0
-VERSION_RELEASE = 33
+VERSION_RELEASE = 34
# Version for pkg-config
PCVERSION = $(VERSION_MAJOR).$(VERSION_MINOR).$(VERSION_RELEASE)
|
[-]
[+]
|
Changed |
_service:tar_git:libgrilio-1.0.34.tar.bz2/debian/changelog
^
|
@@ -1,3 +1,9 @@
+libgrilio (1.0.34) unstable; urgency=low
+
+ * Handle requests stuck in the process of being sent
+
+ -- Slava Monich <slava.monich@jolla.com> Tue, 11 Jun 2019 14:49:45 +0300
+
libgrilio (1.0.33) unstable; urgency=low
* Ignore zero id in grilio_transport_release_id()
|
[-]
[+]
|
Changed |
_service:tar_git:libgrilio-1.0.34.tar.bz2/src/grilio_channel.c
^
|
@@ -1909,7 +1909,8 @@
if (priv->send_req) {
/* Current request will be unreferenced after it's sent */
req = priv->send_req;
- if (req->status != GRILIO_REQUEST_CANCELLED) {
+ if (req->status != GRILIO_REQUEST_DONE &&
+ req->status != GRILIO_REQUEST_CANCELLED) {
req->status = GRILIO_REQUEST_CANCELLED;
grilio_channel_remove_request(priv, req);
if (notify && req->response) {
|
[-]
[+]
|
Changed |
_service:tar_git:libgrilio-1.0.34.tar.bz2/test/test_io/test_io.c
^
|
@@ -1384,6 +1384,94 @@
}
/*==========================================================================*
+ * WriteTimeout
+ *==========================================================================*/
+
+typedef struct test_write_timeout_data {
+ Test test;
+ gboolean req_destroyed;
+} TestWriteTimeout;
+
+static
+void
+test_write_timeout_req_destroyed(
+ gpointer user_data)
+{
+ TestWriteTimeout* data = G_CAST(user_data, TestWriteTimeout, test);
+
+ GDEBUG("Request destroyed");
+ g_assert(!data->req_destroyed);
+ data->req_destroyed = TRUE;
+}
+
+static
+void
+test_write_timeout_done(
+ GRilIoChannel* io,
+ int status,
+ const void* data,
+ guint len,
+ void* user_data)
+{
+ Test* test = user_data;
+
+ g_assert(status == GRILIO_STATUS_TIMEOUT);
+ GDEBUG("Request timed out");
+ test->timeout_id = g_timeout_add_seconds(TEST_TIMEOUT,
+ test_timeout_expired, test);
+ g_main_loop_quit(test->loop);
+}
+
+static
+void
+test_write_timeout_connected(
+ GRilIoChannel* io,
+ void* user_data)
+{
+ Test* test = user_data;
+ TestWriteTimeout* data = G_CAST(test, TestWriteTimeout, test);
+ GRilIoRequest* req = grilio_request_new();
+
+ /* This causes send to get stuck */
+ grilio_test_server_shutdown(test->server);
+ grilio_request_set_timeout(req, 10);
+ g_assert(grilio_channel_send_request_full(test->io, req,
+ RIL_REQUEST_TEST, test_write_timeout_done,
+ test_write_timeout_req_destroyed, test));
+ grilio_request_unref(req);
+ g_assert(!data->req_destroyed);
+}
+
+static
+void
+test_write_timeout(
+ void)
+{
+ TestWriteTimeout* data = test_new(TestWriteTimeout, "WriteTimeout");
+ Test* test = &data->test;
+
+ grilio_channel_add_connected_handler(test->io,
+ test_write_timeout_connected, test);
+ g_main_loop_run(test->loop);
+
+ /* It's stuck, so it's not destroyed yet */
+ g_assert(!data->req_destroyed);
+
+ /* Even grilio_channel_cancel_all won't destroy it */
+ grilio_channel_cancel_all(test->io, FALSE);
+ g_assert(!data->req_destroyed);
+
+ /* Only this will */
+ grilio_channel_unref(test->io);
+ grilio_transport_unref(test->transport);
+ g_assert(data->req_destroyed);
+ test->transport = NULL;
+ test->io = NULL;
+
+ test_free(test);
+}
+
+/*==========================================================================*
* Disconnect
*==========================================================================*/
@@ -3680,6 +3768,7 @@
g_test_add_func(TEST_PREFIX "WriteError1", test_write_error1);
g_test_add_func(TEST_PREFIX "WriteError2", test_write_error2);
g_test_add_func(TEST_PREFIX "WriteError3", test_write_error3);
+ g_test_add_func(TEST_PREFIX "WriteTimeout", test_write_timeout);
g_test_add_func(TEST_PREFIX "Disconnect", test_disconnect);
g_test_add_func(TEST_PREFIX "ShortPacket", test_short_packet);
g_test_add_func(TEST_PREFIX "ShortResponse", test_short_response);
|