From: Carlos Garnacho Date: Sat, 18 Feb 2017 14:27:13 +0000 (+0100) Subject: dbus: Move send_message() call before _error label X-Git-Tag: 0.35.6~18 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=b3e04860257be7a7b32b977e215b3b0ca9c78992;p=thirdparty%2Fvala.git dbus: Move send_message() call before _error label Commit 09e6818d01 changed dbus server paths so requests fell back to freeing allocated memory on errors. However certain kinds of dbus replies issue a final g_dbus_connection_send_message() there. In case of errors, _reply_message will be NULL, and the error paths would have already issued g_dbus_method_invocation_return_gerror(), so the g_dbus_connection_send_message() call is both unnecessary and warns on the NULL argument. So move the DBus reply before the _error label. https://bugzilla.gnome.org/show_bug.cgi?id=778540 --- diff --git a/codegen/valagdbusservermodule.vala b/codegen/valagdbusservermodule.vala index e3cbc6e4f..4f06210f7 100644 --- a/codegen/valagdbusservermodule.vala +++ b/codegen/valagdbusservermodule.vala @@ -341,6 +341,25 @@ public class Vala.GDBusServerModule : GDBusClientModule { ccode.add_expression (ccall); } + if (!no_reply && (!m.coroutine || ready)) { + var return_value = new CCodeFunctionCall (new CCodeIdentifier ("g_dbus_connection_send_message")); + return_value.add_argument (connection); + return_value.add_argument (new CCodeIdentifier ("_reply_message")); + return_value.add_argument (new CCodeConstant ("G_DBUS_SEND_MESSAGE_FLAGS_NONE")); + return_value.add_argument (new CCodeConstant ("NULL")); + return_value.add_argument (new CCodeConstant ("NULL")); + ccode.add_expression (return_value); + + // free invocation like g_dbus_method_invocation_return_* + var unref_call = new CCodeFunctionCall (new CCodeIdentifier ("g_object_unref")); + unref_call.add_argument (new CCodeIdentifier ("invocation")); + ccode.add_expression (unref_call); + + unref_call = new CCodeFunctionCall (new CCodeIdentifier ("g_object_unref")); + unref_call.add_argument (new CCodeIdentifier ("_reply_message")); + ccode.add_expression (unref_call); + } + if (need_goto_label) { ccode.add_label ("_error"); } @@ -368,25 +387,6 @@ public class Vala.GDBusServerModule : GDBusClientModule { } } - if (!no_reply && (!m.coroutine || ready)) { - var return_value = new CCodeFunctionCall (new CCodeIdentifier ("g_dbus_connection_send_message")); - return_value.add_argument (connection); - return_value.add_argument (new CCodeIdentifier ("_reply_message")); - return_value.add_argument (new CCodeConstant ("G_DBUS_SEND_MESSAGE_FLAGS_NONE")); - return_value.add_argument (new CCodeConstant ("NULL")); - return_value.add_argument (new CCodeConstant ("NULL")); - ccode.add_expression (return_value); - - // free invocation like g_dbus_method_invocation_return_* - var unref_call = new CCodeFunctionCall (new CCodeIdentifier ("g_object_unref")); - unref_call.add_argument (new CCodeIdentifier ("invocation")); - ccode.add_expression (unref_call); - - unref_call = new CCodeFunctionCall (new CCodeIdentifier ("g_object_unref")); - unref_call.add_argument (new CCodeIdentifier ("_reply_message")); - ccode.add_expression (unref_call); - } - pop_function (); cfile.add_function_declaration (function);