libdbus, gdbus, p2p-gdbus: Add flushing connection after send 10/270510/1
authorAdam Michalski <a.michalski2@partner.samsung.com>
Thu, 3 Feb 2022 17:09:28 +0000 (18:09 +0100)
committerAdam Michalski <a.michalski2@partner.samsung.com>
Thu, 3 Feb 2022 17:09:28 +0000 (18:09 +0100)
Added flushing connection, that writes all queued outgoing messages to
the transport. Without flushing the connection, there is no guarantee
that messages have been sent to the networking buffers in the kernel
before the server sends the messages asynchronously and then exits
immediately.
It also prevents latencies from stacking during measurements under
heavy load.

Change-Id: I5383f0bb4e32c91542c887f2e55eb7bdd030d738

benchmark/gdbus.c
benchmark/libdbus.c
benchmark/p2p-gdbus.c

index 75dc701a3885dc74a02f458e1194dc101d5b3c9d..f7de0ce3529d4d215d2e749099e58e1bc8ae47db 100644 (file)
@@ -225,6 +225,10 @@ void Send(register int size, const char *name, const char *path, bool is_lt)
                  g_printerr("Error=%s\n", error->message);
                                g_error_free (error);
                        }*/
+               g_dbus_connection_flush(conn,
+                               NULL,    /* GCancellable */
+                               NULL,    /* GAsyncReadyCallback */
+                               NULL);   /* user_data */
                if(is_lt) {
                        if(size <= ONE_PAGE_SIZE)
                                usleep(5000);
index ec34c93d54df5b478ddb9f21bca075dc33f9d6de..57dcbec617895b62c6793cf39a5b067dd833ef86 100644 (file)
@@ -188,6 +188,7 @@ void Send(register int size, const char *name, const char *path, const char *cli
                                DBUS_TYPE_INVALID);
                dbus_connection_send (conn, msg, NULL);
                dbus_message_unref(msg);
+               dbus_connection_flush(conn);
 
                if(is_lt) {
                        if(size <= ONE_PAGE_SIZE)
@@ -201,7 +202,6 @@ void Send(register int size, const char *name, const char *path, const char *cli
                }
        }
 
-       dbus_connection_flush(conn);
        free(cptr);
 }
 
index 01d28edc56c4f29a3269ec1ebc4ddb366bcc019e..542382ea49b73874de9488865729d02d21d877c4 100644 (file)
@@ -392,6 +392,10 @@ void Send(int size, const char *name, const char *path, const char *number, bool
                                NULL,
                                NULL,
                                NULL);
+               g_dbus_connection_flush(connection,
+                               NULL,    /* GCancellable */
+                               NULL,    /* GAsyncReadyCallback */
+                               NULL);   /* user_data */
                if (is_lt) {
                        if (size <= ONE_PAGE_SIZE)
                                usleep(5000);