]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
dbus: Move send_message() call before _error label
authorCarlos Garnacho <carlosg@gnome.org>
Sat, 18 Feb 2017 14:27:13 +0000 (15:27 +0100)
committerRico Tzschichholz <ricotz@ubuntu.com>
Sat, 18 Feb 2017 18:25:25 +0000 (19:25 +0100)
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

codegen/valagdbusservermodule.vala

index e3cbc6e4f744d783b865f949e584aed3971940c5..4f06210f7932110fbcdc6aeeb6d4edd2954a29f5 100644 (file)
@@ -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);