summaryrefslogtreecommitdiff
path: root/debian/dbus-wrapper.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'debian/dbus-wrapper.cpp')
-rw-r--r--debian/dbus-wrapper.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/debian/dbus-wrapper.cpp b/debian/dbus-wrapper.cpp
new file mode 100644
index 00000000..86a02926
--- /dev/null
+++ b/debian/dbus-wrapper.cpp
@@ -0,0 +1,39 @@
+
+#include <dlfcn.h>
+
+/**
+ * There are valid use cases where the (previously hard-coded) default
+ * timeout was too short. This function replaces _DBUS_DEFAULT_TIMEOUT_VALUE
+ * and - if set - interprets the content of DBUS_DEFAULT_TIMEOUT as
+ * number of milliseconds.
+ */
+static int _dbus_connection_default_timeout(void)
+{
+ const char *def = getenv("DBUS_DEFAULT_TIMEOUT");
+ int timeout = 0;
+
+ if (def) {
+ timeout = atoi(def);
+ }
+ if (timeout <= 0) {
+ /* the traditional _DBUS_DEFAULT_TIMEOUT_VALUE */
+ timeout = 25 * 1000;
+ }
+}
+
+extern "C" int
+dbus_connection_send_with_reply (void *connection,
+ void *message,
+ void **pending_return,
+ int timeout_milliseconds)
+{
+ static typeof(dbus_connection_send_with_reply) *real_func;
+
+ if (!real_func) {
+ real_func = (typeof(dbus_connection_send_with_reply) *)dlsym(RTLD_NEXT, "dbus_connection_send_with_reply");
+ }
+ return real_func ?
+ real_func(connection, message, pending_return,
+ timeout_milliseconds == -1 ? _dbus_connection_default_timeout() : timeout_milliseconds) :
+ 0;
+}