40 lines
1.2 KiB
C++
40 lines
1.2 KiB
C++
|
|
#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;
|
|
}
|