]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-bus: add APIs to query the current read and write queue size
authorLennart Poettering <lennart@poettering.net>
Tue, 13 Feb 2018 17:27:05 +0000 (18:27 +0100)
committerLennart Poettering <lennart@poettering.net>
Tue, 27 Feb 2018 18:54:29 +0000 (19:54 +0100)
man/rules/meson.build
man/sd_bus_get_n_queued_read.xml [new file with mode: 0644]
src/libsystemd/libsystemd.sym
src/libsystemd/sd-bus/sd-bus.c

index bfc267b544d1388d1d70a0a2b1d48b310cf18724..84b911b36599b6f59d9953a20f78db363e44d32f 100644 (file)
@@ -186,6 +186,7 @@ manpages = [
   ['SD_BUS_ERROR_END', 'SD_BUS_ERROR_MAP', 'sd_bus_error_map'],
   ''],
  ['sd_bus_get_fd', '3', [], ''],
+ ['sd_bus_get_n_queued_read', '3', ['sd_bus_get_n_queued_write'], ''],
  ['sd_bus_is_open', '3', ['sd_bus_is_ready'], ''],
  ['sd_bus_message_append', '3', ['sd_bus_message_appendv'], ''],
  ['sd_bus_message_append_array',
diff --git a/man/sd_bus_get_n_queued_read.xml b/man/sd_bus_get_n_queued_read.xml
new file mode 100644 (file)
index 0000000..b39e87f
--- /dev/null
@@ -0,0 +1,129 @@
+<?xml version='1.0'?> <!--*- Mode: nxml; nxml-child-indent: 2; indent-tabs-mode: nil -*-->
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.2//EN"
+"http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
+
+<!--
+  SPDX-License-Identifier: LGPL-2.1+
+
+  This file is part of systemd.
+
+  Copyright 2018 Lennart Poettering
+
+  systemd is free software; you can redistribute it and/or modify it
+  under the terms of the GNU Lesser General Public License as published by
+  the Free Software Foundation; either version 2.1 of the License, or
+  (at your option) any later version.
+
+  systemd is distributed in the hope that it will be useful, but
+  WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+  Lesser General Public License for more details.
+
+  You should have received a copy of the GNU Lesser General Public License
+  along with systemd; If not, see <http://www.gnu.org/licenses/>.
+-->
+
+<refentry id="sd_bus_get_n_queued_read">
+
+  <refentryinfo>
+    <title>sd_bus_get_fd</title>
+    <productname>systemd</productname>
+
+    <authorgroup>
+      <author>
+        <contrib>Developer</contrib>
+        <firstname>Lennart</firstname>
+        <surname>Poettering</surname>
+        <email>lennart@poettering.net</email>
+      </author>
+    </authorgroup>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_bus_get_n_queued_read</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_bus_get_n_queued_read</refname>
+    <refname>sd_bus_get_n_queued_write</refname>
+
+    <refpurpose>Get the number of pending bus messages in the read and write queues of a bus connection object</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int <function>sd_bus_get_n_queued_read</function></funcdef>
+        <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
+        <paramdef>uint64_t *<parameter>ret</parameter></paramdef>
+      </funcprototype>
+
+      <funcprototype>
+        <funcdef>int <function>sd_bus_get_n_queued_write</function></funcdef>
+        <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
+        <paramdef>uint64_t *<parameter>ret</parameter></paramdef>
+      </funcprototype>
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para>
+      <function>sd_bus_get_n_queued_read()</function> may be used to query the number of bus messages in the read queue
+      of a bus connection object. The read queue contains all messages read from the transport medium (e.g. network
+      socket) but not yet processed locally. The function expects two arguments: the bus object to query the number of
+      queued messages of, and a pointer to a 64bit counter variable to write the current queue size to. Use
+      <function>sd_bus_process()</function> in order to process queued messages, i.e. to reduce the size of the read
+      queue (as well as, in fact, the write queue, see below) when it is non-zero.
+    </para>
+
+    <para>
+      Similar, <function>sd_bus_get_n_queued_write()</function> may be used to query the number of currently pending
+      bus messages in the write queue of a bus connection object. The write queue contains all messages enqueued into
+      the connection with a call such as <function>sd_bus_send()</function> but not yet written to the transport
+      medium. The expected arguments are similar to the ones of <function>sd_bus_get_n_queued_read()</function>. Here
+      too, use <function>sd_bus_process()</function> to reduce the size of the write queue. Alternatively, use
+      <function>sd_bus_flush()</function> to synchronously write out any pending bus messages until the write queue is
+      empty.
+    </para>
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para>On success, these functions return 0 or a positive integer. On failure, they return a negative errno-style
+    error code.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>Errors</title>
+
+    <para>Returned errors may indicate the following problems:</para>
+
+    <variablelist>
+      <varlistentry>
+        <term><constant>-ECHILD</constant></term>
+
+        <listitem><para>The bus connection has been created in a different process.</para></listitem>
+      </varlistentry>
+
+    </variablelist>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para>
+      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_bus_process</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_bus_send</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
+      <citerefentry><refentrytitle>sd_bus_flush</refentrytitle><manvolnum>3</manvolnum></citerefentry>
+    </para>
+  </refsect1>
+
+</refentry>
index 00aeefbe19b6c43e3c7cc5df21c9ea72dc58bcee..7ff5816180d6a40006264711bcd4e71f70abf4aa 100644 (file)
@@ -549,3 +549,9 @@ global:
         sd_event_source_get_io_fd_own;
         sd_event_source_set_io_fd_own;
 } LIBSYSTEMD_236;
+
+LIBSYSTEMD_238 {
+global:
+        sd_bus_get_n_queued_read;
+        sd_bus_get_n_queued_write;
+} LIBSYSTEMD_237;
index cbbc6b6f0cd512247a7106a52fafb8dbdd069776..2f5e483ae2bcbb4c870987e9bc8cd0987497a0c1 100644 (file)
@@ -4091,3 +4091,23 @@ _public_ int sd_bus_get_sender(sd_bus *bus, const char **ret) {
         *ret = bus->patch_sender;
         return 0;
 }
+
+_public_ int sd_bus_get_n_queued_read(sd_bus *bus, uint64_t *ret) {
+        assert_return(bus, -EINVAL);
+        assert_return(bus = bus_resolve(bus), -ENOPKG);
+        assert_return(!bus_pid_changed(bus), -ECHILD);
+        assert_return(ret, -EINVAL);
+
+        *ret = bus->rqueue_size;
+        return 0;
+}
+
+_public_ int sd_bus_get_n_queued_write(sd_bus *bus, uint64_t *ret) {
+        assert_return(bus, -EINVAL);
+        assert_return(bus = bus_resolve(bus), -ENOPKG);
+        assert_return(!bus_pid_changed(bus), -ECHILD);
+        assert_return(ret, -EINVAL);
+
+        *ret = bus->wqueue_size;
+        return 0;
+}