[vala/staging: 2/3] gdbus: Ensure extracted data from the GVariant is freed on error



commit 09e6818d01eaa14cbce7bac12abe521c46d92893
Author: Carlos Garnacho <carlosg gnome org>
Date:   Sun Feb 12 23:02:34 2017 +0100

    gdbus: Ensure extracted data from the GVariant is freed on error
    
    This will make extracted variables properly freed when extracting those
    fails at some point.
    
    https://bugzilla.gnome.org/show_bug.cgi?id=778540

 codegen/valagdbusservermodule.vala |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)
---
diff --git a/codegen/valagdbusservermodule.vala b/codegen/valagdbusservermodule.vala
index 4a20a2d..0df78c2 100644
--- a/codegen/valagdbusservermodule.vala
+++ b/codegen/valagdbusservermodule.vala
@@ -23,6 +23,7 @@
 public class Vala.GDBusServerModule : GDBusClientModule {
        string generate_dbus_wrapper (Method m, ObjectTypeSymbol sym, bool ready = false) {
                string wrapper_name = "_dbus_%s".printf (get_ccode_name (m));
+               bool need_goto_label = false;
 
                if (m.base_method != null) {
                        m = m.base_method;
@@ -142,7 +143,8 @@ public class Vala.GDBusServerModule : GDBusClientModule {
                                        return_error.add_argument (new CCodeIdentifier ("error"));
                                        ccode.add_expression (return_error);
 
-                                       ccode.add_return ();
+                                       ccode.add_goto ("_error");
+                                       need_goto_label = true;
 
                                        ccode.close ();
                                }
@@ -338,6 +340,10 @@ public class Vala.GDBusServerModule : GDBusClientModule {
                        ccode.add_expression (ccall);
                }
 
+               if (need_goto_label) {
+                       ccode.add_label ("_error");
+               }
+
                foreach (Parameter param in m.get_parameters ()) {
                        if ((param.direction == ParameterDirection.IN && !ready) ||
                            (param.direction == ParameterDirection.OUT && !no_reply && (!m.coroutine || 
ready))) {


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]