diff options
Diffstat (limited to 'debian/dbus-wrapper.cpp')
-rw-r--r-- | debian/dbus-wrapper.cpp | 39 |
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; +} |