]> git.ipfire.org Git - thirdparty/vala.git/commitdiff
D-Bus: Unregister path on object destruction
authorSebastian Pölsterl <sebp@k-d-w.org>
Sun, 29 Mar 2009 06:50:22 +0000 (08:50 +0200)
committerJürg Billeter <j@bitron.ch>
Sun, 29 Mar 2009 06:51:18 +0000 (08:51 +0200)
Fixes bug 576874.

gobject/valaccodebasemodule.vala
gobject/valadbusservermodule.vala

index 822c8417e6725273cfd38fed26a76ddb38f6dadd..0b05134d0a620fdecc9dc9c82bb597b2d92cb00b 100644 (file)
@@ -444,6 +444,37 @@ internal class Vala.CCodeBaseModule : CCodeModule {
                        block.add_statement (new CCodeIfStatement (new CCodeIdentifier ("vtable"), ifblock, elseblock));
 
                        source_type_member_definition.append (cfunc);
+
+                       // unregister function
+                       cfunc = new CCodeFunction ("_vala_dbus_unregister_object", "void");
+                       cfunc.add_parameter (new CCodeFormalParameter ("connection", "gpointer"));
+                       cfunc.add_parameter (new CCodeFormalParameter ("object", "GObject*"));
+
+                       cfunc.modifiers |= CCodeModifiers.STATIC;
+                       source_declarations.add_type_member_declaration (cfunc.copy ());
+
+                       block = new CCodeBlock ();
+                       cfunc.block = block;
+
+                       cdecl = new CCodeDeclaration ("char*");
+                       cdecl.add_declarator (new CCodeVariableDeclarator ("path"));
+                       block.add_statement (cdecl);
+
+                       var path = new CCodeFunctionCall (new CCodeIdentifier ("g_object_steal_data"));
+                       path.add_argument (new CCodeCastExpression (new CCodeIdentifier ("object"), "GObject*"));
+                       path.add_argument (new CCodeConstant ("\"dbus_object_path\""));
+                       block.add_statement (new CCodeExpressionStatement (new CCodeAssignment (new CCodeIdentifier ("path"), path)));
+
+                       var unregister_call = new CCodeFunctionCall (new CCodeIdentifier ("dbus_connection_unregister_object_path"));
+                       unregister_call.add_argument (new CCodeIdentifier ("connection"));
+                       unregister_call.add_argument (new CCodeIdentifier ("path"));
+                       block.add_statement (new CCodeExpressionStatement (unregister_call));
+
+                       var path_free = new CCodeFunctionCall (new CCodeIdentifier ("g_free"));
+                       path_free.add_argument (new CCodeIdentifier ("path"));
+                       block.add_statement (new CCodeExpressionStatement (path_free));
+
+                       source_type_member_definition.append (cfunc);
                }
 
                CCodeComment comment = null;
index d13e8e16796ef596254d5a2afb17af425986a5a4..26d032b6151ac81011e50b2cbde63e5309394c36 100644 (file)
@@ -359,6 +359,12 @@ internal class Vala.DBusServerModule : DBusClientModule {
                cregister.add_argument (new CCodeIdentifier ("object"));
                register_block.add_statement (new CCodeExpressionStatement (cregister));
 
+               var weak_unregister = new CCodeFunctionCall (new CCodeIdentifier ("g_object_weak_ref"));
+               weak_unregister.add_argument (new CCodeIdentifier ("object"));
+               weak_unregister.add_argument (new CCodeIdentifier ("_vala_dbus_unregister_object"));
+               weak_unregister.add_argument (new CCodeIdentifier ("connection"));
+               register_block.add_statement (new CCodeExpressionStatement (weak_unregister));
+
                block.add_statement (new CCodeIfStatement (register_check, register_block));
 
                handle_signals (object_type.type_symbol, block);