From 9286d914c064f5e3966fee149224eeb78a7123c8 Mon Sep 17 00:00:00 2001 From: Patrick Ohly Date: Fri, 3 Sep 2010 15:40:05 +0200 Subject: EDS: workaround for D-Bus method timeouts (BMC #4026) libecal/ebook implementation based on D-Bus (Evolution >= 2.30) inevitably will run into D-Bus timeouts as the amount of data increases. This patch moves an earlier hack written for Maemo into the core code and enables it by default, if the EDS backends are active. It works by intercepting dbus_connection_send_with_reply() and substituting timeout_milliseconds==-1 ("default timeout of 25 seconds") with timeout_milliseconds=INT_MAX ("no timeout"). Setting SYNCEVOLUTION_DBUS_TIMEOUT to number of milliseconds allows controlling the final timeout value. --- debian/dbus-wrapper.cpp | 57 ------------------------------------------------- 1 file changed, 57 deletions(-) delete mode 100644 debian/dbus-wrapper.cpp (limited to 'debian') diff --git a/debian/dbus-wrapper.cpp b/debian/dbus-wrapper.cpp deleted file mode 100644 index 1fffb7e4..00000000 --- a/debian/dbus-wrapper.cpp +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Copyright (C) 2008 Patrick Ohly - * - * This library 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) version 3. - * - * This library 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 this library; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA - * 02110-1301 USA - */ - -#include - -/** - * 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; -} -- cgit v1.2.3