Hello community, here is the log from the commit of package jsonrpc-glib for openSUSE:Factory checked in at 2017-10-06 11:01:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/jsonrpc-glib (Old) and /work/SRC/openSUSE:Factory/.jsonrpc-glib.new (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "jsonrpc-glib" Fri Oct 6 11:01:32 2017 rev:3 rq:531695 version:3.26.1 Changes: -------- --- /work/SRC/openSUSE:Factory/jsonrpc-glib/jsonrpc-glib.changes 2017-09-13 21:53:29.486713494 +0200 +++ /work/SRC/openSUSE:Factory/.jsonrpc-glib.new/jsonrpc-glib.changes 2017-10-06 11:01:48.772201282 +0200 @@ -1,0 +2,14 @@ +Thu Oct 5 01:41:06 UTC 2017 - [email protected] + +- Update to version 3.26.1: + + Require -std=gnu11 in project config. We always required this, + but previously we were relying on the default GCC flags to do + so. + + Fix improper use of va_list on non-Intel architectures. + + JsonrpcOutputStream now properly checks for pending operations + before flushing, so that an error is not incorrectly + synthesized. + + Improved error propagation from data streams. + + Correctness fixes for stress tests. + +------------------------------------------------------------------- Old: ---- jsonrpc-glib-3.26.0.tar.xz New: ---- jsonrpc-glib-3.26.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ jsonrpc-glib.spec ++++++ --- /var/tmp/diff_new_pack.96cJvm/_old 2017-10-06 11:01:49.256128104 +0200 +++ /var/tmp/diff_new_pack.96cJvm/_new 2017-10-06 11:01:49.260127500 +0200 @@ -18,7 +18,7 @@ %define sover 1_0-0 Name: jsonrpc-glib -Version: 3.26.0 +Version: 3.26.1 Release: 0 Summary: Library to communicate with JSON-RPC based peers License: LGPL-2.1+ ++++++ jsonrpc-glib-3.26.0.tar.xz -> jsonrpc-glib-3.26.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jsonrpc-glib-3.26.0/NEWS new/jsonrpc-glib-3.26.1/NEWS --- old/jsonrpc-glib-3.26.0/NEWS 2017-09-11 23:36:47.000000000 +0200 +++ new/jsonrpc-glib-3.26.1/NEWS 2017-10-03 22:20:30.000000000 +0200 @@ -1,4 +1,18 @@ ============== +Version 3.26.1 +============== + +Changes in this release: + + • Require -std=gnu11 in project config. We always required this, but + previously we were relying on the default GCC flags to do so. + • Fix improper use of va_list on non-Intel architectures. + • JsonrpcOutputStream now properly checks for pending operations before + flushing, so that an error is not incorrectly synthesized. + • Improved error propagation from data streams. + • Correctness fixes for stress tests. + +============== Version 3.26.0 ============== diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jsonrpc-glib-3.26.0/meson.build new/jsonrpc-glib-3.26.1/meson.build --- old/jsonrpc-glib-3.26.0/meson.build 2017-09-11 23:36:47.000000000 +0200 +++ new/jsonrpc-glib-3.26.1/meson.build 2017-10-03 22:20:30.000000000 +0200 @@ -1,8 +1,8 @@ project('jsonrpc-glib', 'c', - version: '3.26.0', + version: '3.26.1', license: 'LGPLv2.1+', meson_version: '>= 0.40.1', - default_options: [ 'warning_level=1', 'buildtype=debugoptimized' ], + default_options: [ 'warning_level=1', 'buildtype=debugoptimized', 'c_std=gnu11' ], ) version_arr = meson.project_version().split('.') diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jsonrpc-glib-3.26.0/src/jsonrpc-client.c new/jsonrpc-glib-3.26.1/src/jsonrpc-client.c --- old/jsonrpc-glib-3.26.0/src/jsonrpc-client.c 2017-09-11 23:36:47.000000000 +0200 +++ new/jsonrpc-glib-3.26.1/src/jsonrpc-client.c 2017-10-03 22:20:30.000000000 +0200 @@ -1138,7 +1138,7 @@ { JsonrpcClientPrivate *priv = jsonrpc_client_get_instance_private (self); g_autoptr(GHashTable) invocations = NULL; - g_autoptr(GError) close_error = NULL; + gboolean ret; g_return_val_if_fail (JSONRPC_IS_CLIENT (self), FALSE); g_return_val_if_fail (!cancellable || G_IS_CANCELLABLE (cancellable), FALSE); @@ -1151,8 +1151,10 @@ if (!g_cancellable_is_cancelled (priv->read_loop_cancellable)) g_cancellable_cancel (priv->read_loop_cancellable); - if (!g_io_stream_close (priv->io_stream, cancellable, &close_error)) - g_warning ("%s", close_error->message); + /* This can fail from "pending operations", but we will always cancel + * our tasks. But we should let the caller know either way. + */ + ret = g_io_stream_close (priv->io_stream, cancellable, error); /* * Closing the input stream will fail, so just rely on the callback @@ -1177,7 +1179,7 @@ g_task_return_error (task, g_error_copy (local_error)); } - return TRUE; + return ret; } /** diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jsonrpc-glib-3.26.0/src/jsonrpc-message.c new/jsonrpc-glib-3.26.1/src/jsonrpc-message.c --- old/jsonrpc-glib-3.26.0/src/jsonrpc-message.c 2017-09-11 23:36:47.000000000 +0200 +++ new/jsonrpc-glib-3.26.1/src/jsonrpc-message.c 2017-10-03 22:20:30.000000000 +0200 @@ -54,21 +54,21 @@ static void jsonrpc_message_build_object (GVariantBuilder *builder, gpointer param, - va_list args); + va_list *args); static void jsonrpc_message_build_array (GVariantBuilder *builder, gpointer param, - va_list args); + va_list *args); static gboolean jsonrpc_message_parse_object (GVariantDict *dict, gpointer param, - va_list args); + va_list *args); static gboolean jsonrpc_message_parse_array_va (GVariantIter *iter, gpointer param, - va_list args); + va_list *args); static void jsonrpc_message_build_object (GVariantBuilder *builder, gpointer param, - va_list args) + va_list *args) { JsonrpcMessageAny *keyptr = param; JsonrpcMessageAny *valptr; @@ -101,7 +101,7 @@ /* * Now try to read the value for the key/val pair. */ - valptr = param = va_arg (args, gpointer); + valptr = param = va_arg (*args, gpointer); g_variant_builder_open (builder, G_VARIANT_TYPE ("v")); @@ -109,14 +109,14 @@ { case '{': g_variant_builder_open (builder, G_VARIANT_TYPE ("a{sv}")); - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); jsonrpc_message_build_object (builder, param, args); g_variant_builder_close (builder); break; case '[': g_variant_builder_open (builder, G_VARIANT_TYPE ("av")); - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); jsonrpc_message_build_array (builder, param, args); g_variant_builder_close (builder); break; @@ -148,7 +148,7 @@ /* * Try to build the next field in the object if there is one. */ - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); jsonrpc_message_build_object (builder, param, args); EXIT; @@ -157,7 +157,7 @@ static void jsonrpc_message_build_array (GVariantBuilder *builder, gpointer param, - va_list args) + va_list *args) { JsonrpcMessageAny *valptr = param; @@ -173,14 +173,14 @@ { case '{': g_variant_builder_open (builder, G_VARIANT_TYPE ("a{sv}")); - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); jsonrpc_message_build_object (builder, param, args); g_variant_builder_close (builder); break; case '[': g_variant_builder_open (builder, G_VARIANT_TYPE ("av")); - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); jsonrpc_message_build_array (builder, param, args); g_variant_builder_close (builder); break; @@ -208,15 +208,15 @@ g_variant_builder_close (builder); - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); jsonrpc_message_build_array (builder, param, args); EXIT; } static GVariant * -jsonrpc_message_new_valist (gpointer first_param, - va_list args) +jsonrpc_message_new_valist (gpointer first_param, + va_list *args) { GVariantBuilder builder; @@ -238,16 +238,19 @@ g_return_val_if_fail (first_param != NULL, NULL); va_start (args, first_param); - ret = jsonrpc_message_new_valist (first_param, args); + ret = jsonrpc_message_new_valist (first_param, &args); va_end (args); + if (g_variant_is_floating (ret)) + g_variant_take_ref (ret); + return ret; } static gboolean jsonrpc_message_parse_object (GVariantDict *dict, gpointer param, - va_list args) + va_list *args) { JsonrpcMessageAny *valptr; const char *key = param; @@ -260,7 +263,7 @@ if (key == NULL || key[0] == '}') RETURN (TRUE); - valptr = va_arg (args, gpointer); + valptr = va_arg (*args, gpointer); if (valptr == NULL) g_error ("got unexpected NULL for key %s", key); @@ -281,7 +284,7 @@ ret = !!(*((JsonrpcMessageGetDict *)valptr)->dictptr = g_steal_pointer (&subdict)); else { - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); ret = jsonrpc_message_parse_object (subdict, param, args); } } @@ -297,7 +300,7 @@ ret = !!(*((JsonrpcMessageGetIter *)valptr)->iterptr = g_steal_pointer (&subiter)); else { - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); ret = jsonrpc_message_parse_array_va (subiter, param, args); } } @@ -330,7 +333,7 @@ RETURN (ret); /* If we succeeded, try to read the next field */ - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); ret = jsonrpc_message_parse_object (dict, param, args); RETURN (ret); @@ -339,7 +342,7 @@ static gboolean jsonrpc_message_parse_array_va (GVariantIter *iter, gpointer param, - va_list args) + va_list *args) { JsonrpcMessageAny *valptr = param; g_autoptr(GVariant) value = NULL; @@ -367,7 +370,7 @@ ret = !!(*((JsonrpcMessageGetDict *)valptr)->dictptr = g_steal_pointer (&subdict)); else { - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); ret = jsonrpc_message_parse_object (subdict, param, args); } } @@ -384,7 +387,7 @@ ret = !!(*((JsonrpcMessageGetIter *)valptr)->iterptr = g_steal_pointer (&subiter)); else { - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); ret = jsonrpc_message_parse_array_va (subiter, param, args); } } @@ -429,14 +432,15 @@ RETURN (ret); /* If we succeeded, try to read the next element */ - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); ret = jsonrpc_message_parse_array_va (iter, param, args); RETURN (ret); } gboolean -jsonrpc_message_parse_array (GVariantIter *iter, ...) +jsonrpc_message_parse_array (GVariantIter *iter, + ...) { va_list args; gpointer param; @@ -447,7 +451,7 @@ va_start (args, iter); param = va_arg (args, gpointer); if (param) - ret = jsonrpc_message_parse_array_va (iter, param, args); + ret = jsonrpc_message_parse_array_va (iter, param, &args); va_end (args); return ret; @@ -455,7 +459,7 @@ static gboolean jsonrpc_message_parse_valist (GVariant *message, - va_list args) + va_list *args) { gpointer param; gboolean ret = FALSE; @@ -463,7 +467,7 @@ g_assert (message != NULL); g_assert (g_variant_is_of_type (message, G_VARIANT_TYPE ("a{sv}"))); - param = va_arg (args, gpointer); + param = va_arg (*args, gpointer); if (param != NULL) { @@ -478,7 +482,8 @@ } gboolean -jsonrpc_message_parse (GVariant *message, ...) +jsonrpc_message_parse (GVariant *message, + ...) { gboolean ret; va_list args; @@ -487,7 +492,7 @@ g_return_val_if_fail (g_variant_is_of_type (message, G_VARIANT_TYPE ("a{sv}")), FALSE); va_start (args, message); - ret = jsonrpc_message_parse_valist (message, args); + ret = jsonrpc_message_parse_valist (message, &args); va_end (args); return ret; diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jsonrpc-glib-3.26.0/src/jsonrpc-output-stream.c new/jsonrpc-glib-3.26.1/src/jsonrpc-output-stream.c --- old/jsonrpc-glib-3.26.0/src/jsonrpc-output-stream.c 2017-09-11 23:36:47.000000000 +0200 +++ new/jsonrpc-glib-3.26.1/src/jsonrpc-output-stream.c 2017-10-03 22:20:30.000000000 +0200 @@ -254,7 +254,8 @@ g_assert (JSONRPC_IS_OUTPUT_STREAM (self)); - if (priv->queue.length == 0) + if (priv->queue.length == 0 || + g_output_stream_has_pending (G_OUTPUT_STREAM (self))) return; task = g_queue_pop_head (&priv->queue); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/jsonrpc-glib-3.26.0/tests/test-stress.c new/jsonrpc-glib-3.26.1/tests/test-stress.c --- old/jsonrpc-glib-3.26.0/tests/test-stress.c 2017-09-11 23:36:47.000000000 +0200 +++ new/jsonrpc-glib-3.26.1/tests/test-stress.c 2017-10-03 22:20:30.000000000 +0200 @@ -65,9 +65,10 @@ if (n_ops == 0) { LOG ("server: closing client stream"); - r = jsonrpc_client_close (client, NULL, &error); - g_assert_no_error (error); - g_assert_cmpint (r, ==, 1); + /* Close might error, but the tasks are always + * flushed and cancelled. + */ + jsonrpc_client_close (client, NULL, NULL); } }
