]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
D-Bus: Fix crash for properties with unowned getter in GDBus servers
authorJürg Billeter <j@bitron.ch>
Wed, 20 Oct 2010 21:26:17 +0000 (23:26 +0200)
committerJürg Billeter <j@bitron.ch>
Tue, 26 Oct 2010 17:59:01 +0000 (19:59 +0200)
Fixes bug 630832.

codegen/valagdbusservermodule.vala

index a3bfbcc863d16f236be69225c7eb21ec4f7cb1d8..bb5ec96e0c2190ece0edae9f9bbfc5d9ae8f6cd0 100644 (file)
@@ -455,22 +455,22 @@ public class Vala.GDBusServerModule : GDBusClientModule {
                var ccall = new CCodeFunctionCall (new CCodeIdentifier (prop.get_accessor.get_cname ()));
                ccall.add_argument (new CCodeIdentifier ("self"));
 
-               if (prop.property_type.is_real_non_null_struct_type ()) {
-                       cdecl = new CCodeDeclaration (prop.property_type.get_cname ());
-                       cdecl.add_declarator (new CCodeVariableDeclarator.zero ("result", default_value_for_type (prop.property_type, true)));
+               if (prop.get_accessor.value_type.is_real_non_null_struct_type ()) {
+                       cdecl = new CCodeDeclaration (prop.get_accessor.value_type.get_cname ());
+                       cdecl.add_declarator (new CCodeVariableDeclarator.zero ("result", default_value_for_type (prop.get_accessor.value_type, true)));
                        prefragment.append (cdecl);
 
                        ccall.add_argument (new CCodeUnaryExpression (CCodeUnaryOperator.ADDRESS_OF, new CCodeIdentifier ("result")));
 
                        block.add_statement (new CCodeExpressionStatement (ccall));
                } else {
-                       cdecl = new CCodeDeclaration (prop.property_type.get_cname ());
+                       cdecl = new CCodeDeclaration (prop.get_accessor.value_type.get_cname ());
                        cdecl.add_declarator (new CCodeVariableDeclarator ("result"));
                        prefragment.append (cdecl);
 
                        block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("result"), ccall)));
 
-                       var array_type = prop.property_type as ArrayType;
+                       var array_type = prop.get_accessor.value_type as ArrayType;
                        if (array_type != null) {
                                for (int dim = 1; dim <= array_type.rank; dim++) {
                                        string length_cname = get_array_length_cname ("result", dim);
@@ -484,18 +484,18 @@ public class Vala.GDBusServerModule : GDBusClientModule {
                        }
                }
 
-               var reply_expr = serialize_expression (postfragment, prop.property_type, new CCodeIdentifier ("result"));
+               var reply_expr = serialize_expression (postfragment, prop.get_accessor.value_type, new CCodeIdentifier ("result"));
 
                postfragment.append (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("_reply"), reply_expr)));
 
-               if (requires_destroy (prop.property_type)) {
+               if (requires_destroy (prop.get_accessor.value_type)) {
                        // keep local alive (symbol_reference is weak)
                        // space before `result' is work around to not trigger
                        // variable renaming, we really mean C identifier `result' here
-                       var local = new LocalVariable (prop.property_type, " result");
+                       var local = new LocalVariable (prop.get_accessor.value_type, " result");
                        var ma = new MemberAccess.simple ("result");
                        ma.symbol_reference = local;
-                       postfragment.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier ("result"), prop.property_type, ma)));
+                       postfragment.append (new CCodeExpressionStatement (get_unref_expression (new CCodeIdentifier ("result"), prop.get_accessor.value_type, ma)));
                }
 
                block.add_statement (postfragment);