edbus: register interface before name
authorSebastian Dransfeld <sd@tango.flipp.net>
Fri, 2 Nov 2012 01:46:56 +0000 (01:46 +0000)
committerSebastian Dransfeld <sd@tango.flipp.net>
Fri, 2 Nov 2012 01:46:56 +0000 (01:46 +0000)
Else will clients activating a service fail, as the dbus expects to know
available interfaces on name request.

SVN revision: 78811

src/examples/complex_types_server.c
src/examples/server.c

index 05bcb31..b958a4e 100644 (file)
@@ -350,7 +350,6 @@ static const EDBus_Service_Interface_Desc iface_desc = {
 static void
 on_name_request(void *data, const EDBus_Message *msg, EDBus_Pending *pending)
 {
-   EDBus_Connection *conn = data;
    unsigned int flag;
 
    resp2 = malloc(sizeof(char) * 5);
@@ -373,8 +372,6 @@ on_name_request(void *data, const EDBus_Message *msg, EDBus_Pending *pending)
         printf("error name already in use\n");
         return;
      }
-
-   edbus_service_interface_register(conn, PATH, &iface_desc);
 }
 
 int
@@ -387,7 +384,8 @@ main(void)
 
    conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
 
-   edbus_name_request(conn, BUS, EDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE, on_name_request, conn);
+   edbus_service_interface_register(conn, PATH, &iface_desc);
+   edbus_name_request(conn, BUS, EDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE, on_name_request, NULL);
 
    ecore_main_loop_begin();
 
index 5678165..d2e733d 100644 (file)
@@ -195,6 +195,7 @@ on_name_request(void *data, const EDBus_Message *msg, EDBus_Pending *pending)
    EDBus_Service_Interface *iface;
    unsigned int flag;
 
+   iface = data;
    if (edbus_message_error_get(msg, NULL, NULL))
      {
         printf("error on on_name_request\n");
@@ -213,7 +214,6 @@ on_name_request(void *data, const EDBus_Message *msg, EDBus_Pending *pending)
         return;
      }
 
-   iface = edbus_service_interface_register(conn, PATH, &iface_desc);
    ecore_timer_add(5, send_signal_alive, iface);
    ecore_timer_add(6, send_signal_hello, iface);
 }
@@ -221,13 +221,16 @@ on_name_request(void *data, const EDBus_Message *msg, EDBus_Pending *pending)
 int
 main(void)
 {
+   EDBus_Service_Interface *iface;
+
    ecore_init();
    edbus_init();
 
    conn = edbus_connection_get(EDBUS_CONNECTION_TYPE_SESSION);
 
+   iface = edbus_service_interface_register(conn, PATH, &iface_desc);
    edbus_name_request(conn, BUS, EDBUS_NAME_REQUEST_FLAG_DO_NOT_QUEUE,
-                      on_name_request, NULL);
+                      on_name_request, iface);
 
    ecore_main_loop_begin();