]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
sd-bus: add new sd_bus_pending_method_calls() call
authorLennart Poettering <lennart@poettering.net>
Wed, 8 May 2024 11:05:40 +0000 (13:05 +0200)
committerLuca Boccassi <bluca@debian.org>
Tue, 11 Jun 2024 22:17:38 +0000 (23:17 +0100)
man/rules/meson.build
man/sd_bus_pending_method_calls.xml [new file with mode: 0644]
src/libsystemd/libsystemd.sym
src/libsystemd/sd-bus/sd-bus.c
src/systemd/sd-bus.h

index a9a2a25c0d791242921bb0a8a452288359e0e52f..c3e1eefd8a39987f84398925b6da1cf2cf184389 100644 (file)
@@ -418,6 +418,7 @@ manpages = [
   '3',
   ['sd_bus_path_decode', 'sd_bus_path_decode_many', 'sd_bus_path_encode_many'],
   ''],
+ ['sd_bus_pending_method_calls', '3', [], ''],
  ['sd_bus_process', '3', [], ''],
  ['sd_bus_query_sender_creds', '3', ['sd_bus_query_sender_privilege'], ''],
  ['sd_bus_reply_method_error',
diff --git a/man/sd_bus_pending_method_calls.xml b/man/sd_bus_pending_method_calls.xml
new file mode 100644 (file)
index 0000000..063009c
--- /dev/null
@@ -0,0 +1,88 @@
+<?xml version='1.0'?>
+<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+  "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->
+
+<refentry id="sd_bus_pending_method_calls"
+          xmlns:xi="http://www.w3.org/2001/XInclude">
+
+  <refentryinfo>
+    <title>sd_bus_pending_method_calls</title>
+    <productname>systemd</productname>
+  </refentryinfo>
+
+  <refmeta>
+    <refentrytitle>sd_bus_pending_method_calls</refentrytitle>
+    <manvolnum>3</manvolnum>
+  </refmeta>
+
+  <refnamediv>
+    <refname>sd_bus_pending_method_calls</refname>
+
+    <refpurpose>Return the number of currently pending, outgoing method calls</refpurpose>
+  </refnamediv>
+
+  <refsynopsisdiv>
+    <funcsynopsis>
+      <funcsynopsisinfo>#include &lt;systemd/sd-bus.h&gt;</funcsynopsisinfo>
+
+      <funcprototype>
+        <funcdef>int <function>sd_bus_pending_method_calls</function></funcdef>
+        <paramdef>sd_bus *<parameter>bus</parameter></paramdef>
+      </funcprototype>
+
+    </funcsynopsis>
+  </refsynopsisdiv>
+
+  <refsect1>
+    <title>Description</title>
+
+    <para><function>sd_bus_pending_method_calls()</function> returns the number of currently pending outgoing
+    method calls, i.e. method calls enqueued with
+    <citerefentry><refentrytitle>sd_bus_call_async</refentrytitle><manvolnum>3</manvolnum></citerefentry> for
+    which no reply has been received yet, and which have not reached a time-out yet.</para>
+
+    <para>The <parameter>bus</parameter> argument may be <constant>NULL</constant>, in which case zero is
+    returned.</para>
+
+  </refsect1>
+
+  <refsect1>
+    <title>Return Value</title>
+
+    <para>This function returns 0 if there are no pending method calls, or a <constant>NULL</constant> bus
+    object was specified. On failure, a negative errno-style error code is returned.</para>
+
+    <refsect2>
+      <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, library or module instance.</para></listitem>
+        </varlistentry>
+      </variablelist>
+    </refsect2>
+  </refsect1>
+
+  <xi:include href="libsystemd-pkgconfig.xml" />
+
+  <refsect1>
+    <title>History</title>
+    <para><function>sd_bus_pending_method_calls()</function> was added in version 257.</para>
+  </refsect1>
+
+  <refsect1>
+    <title>See Also</title>
+
+    <para><simplelist type="inline">
+      <member><citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry></member>
+      <member><citerefentry><refentrytitle>sd-bus</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
+      <member><citerefentry><refentrytitle>sd_bus_call_async</refentrytitle><manvolnum>3</manvolnum></citerefentry></member>
+    </simplelist></para>
+  </refsect1>
+
+</refentry>
index 78b4453462935be22843585844a7bfab1c87623a..6874240b8a2828d9b5b7382d9bbd73ceecbdb936 100644 (file)
@@ -843,3 +843,8 @@ global:
         sd_journal_stream_fd_with_namespace;
         sd_event_source_get_inotify_path;
 } LIBSYSTEMD_255;
+
+LIBSYSTEMD_257 {
+global:
+        sd_bus_pending_method_calls;
+} LIBSYSTEMD_256;
index 1a642cb19783104c71ddc61b72f796a4ce4a17af..738afe0e94888f06a0b1d46cf861b28848eb3e40 100644 (file)
@@ -4471,3 +4471,21 @@ _public_ int sd_bus_enqueue_for_read(sd_bus *bus, sd_bus_message *m) {
         bus->rqueue[bus->rqueue_size++] = bus_message_ref_queued(m, bus);
         return 0;
 }
+
+_public_ int sd_bus_pending_method_calls(sd_bus *bus) {
+
+        /* Returns the number of currently pending asynchronous method calls. This is graceful, i.e. an
+         * unallocated (i.e. NULL) bus connection has no method calls pending. */
+
+        if (!bus)
+                return 0;
+
+        assert_return(bus = bus_resolve(bus), -ENOPKG);
+
+        if (!BUS_IS_OPEN(bus->state))
+                return 0;
+
+        size_t n = ordered_hashmap_size(bus->reply_callbacks);
+
+        return n > INT_MAX ? INT_MAX : (int) n; /* paranoid overflow check */
+}
index f1a3311992e693418652d8f36064bc2a291398fb..2d8efe5c7e24a3939be23f748b54bd50ef64303d 100644 (file)
@@ -238,6 +238,8 @@ int sd_bus_add_fallback_vtable(sd_bus *bus, sd_bus_slot **slot, const char *pref
 int sd_bus_add_node_enumerator(sd_bus *bus, sd_bus_slot **slot, const char *path, sd_bus_node_enumerator_t callback, void *userdata);
 int sd_bus_add_object_manager(sd_bus *bus, sd_bus_slot **slot, const char *path);
 
+int sd_bus_pending_method_calls(sd_bus *bus);
+
 /* Slot object */
 
 sd_bus_slot* sd_bus_slot_ref(sd_bus_slot *slot);