[SCM] libksieve packaging branch, debian/sid, updated. debian/16.04.3-1-2-gb606171

Didier Raboud odyx at moszumanska.debian.org
Wed Jan 25 17:41:18 UTC 2017


Gitweb-URL: http://git.debian.org/?p=pkg-kde/applications/libksieve.git;a=commitdiff;h=24de8d3

The following commit has been merged in the debian/sid branch:
commit 24de8d34e15786f31283b5427b970e5ee60adba1
Author: Didier Raboud <odyx at debian.org>
Date:   Tue Jan 17 18:47:12 2017 +0100

    Backport 5 upstream patches to fix connection unreliability after some time
    
    Thanks-To: Maximilian Engelhardt <maxi at daemonizer.de>
    Closes: #850462
---
 .../3176d1c-only-set-connected-once-ready.patch    |  32 ++++++
 .../6862737-dont-call-connecttohost-twice.patch    | 109 +++++++++++++++++++++
 debian/patches/8fb8219_reconnect_socket.patch      |  58 +++++++++++
 ...bf8a1-add-return-in-case-waiting-for-data.patch |  27 +++++
 ...e4afdd-fix-race-while-handling-ssl-errors.patch | 103 +++++++++++++++++++
 debian/patches/series                              |   5 +
 6 files changed, 334 insertions(+)

diff --git a/debian/patches/3176d1c-only-set-connected-once-ready.patch b/debian/patches/3176d1c-only-set-connected-once-ready.patch
new file mode 100644
index 0000000..e823894
--- /dev/null
+++ b/debian/patches/3176d1c-only-set-connected-once-ready.patch
@@ -0,0 +1,32 @@
+From 3176d1cdf6e36429ac9c6b4ee79b37c22b4273c9 Mon Sep 17 00:00:00 2001
+From: David Faure <faure at kde.org>
+Date: Fri, 15 Jul 2016 15:39:06 +0200
+Subject: KManageSieve::Session: only set m_connected once we're ready to go.
+
+Otherwise when doing StartTls and setting m_state to None, the first
+job can get started too early (easier to trigger in valgrind).
+---
+ src/kmanagesieve/session.cpp | 5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+--- a/src/kmanagesieve/session.cpp
++++ b/src/kmanagesieve/session.cpp
+@@ -65,10 +65,6 @@
+             this, &Session::sslError);
+     connect(m_thread, &SessionThread::sslDone,
+             this, &Session::sslDone);
+-    connect(m_thread, &SessionThread::socketConnected,
+-    [ = ]() {
+-        m_connected = true;
+-    });
+     connect(m_thread, &SessionThread::socketDisconnected,
+     [ = ]() {
+         m_connected = false;
+@@ -312,6 +308,7 @@
+ void Session::authenticationDone()
+ {
+     m_state = None;
++    m_connected = true;
+     QMetaObject::invokeMethod(this, "executeNextJob", Qt::QueuedConnection);
+ }
+ 
diff --git a/debian/patches/6862737-dont-call-connecttohost-twice.patch b/debian/patches/6862737-dont-call-connecttohost-twice.patch
new file mode 100644
index 0000000..df241f0
--- /dev/null
+++ b/debian/patches/6862737-dont-call-connecttohost-twice.patch
@@ -0,0 +1,109 @@
+From 6862737561a9ee5fadcd78bd0655d0b45c893534 Mon Sep 17 00:00:00 2001
+From: David Faure <faure at kde.org>
+Date: Thu, 14 Jul 2016 16:53:18 +0200
+Subject: KSieve: don't call connectToHost twice for each host on startup.
+
+Summary:
+The code to reconnect after a disconnect shouldn't just assume
+that "m_connected == false" means we're disconnected. There's a 3rd case:
+we are trying to connect. So I introduced another boolean, m_disconnected.
+
+When disconnected, m_connected == false, m_disconnected == true.
+While trying to connect, m_connected == false, m_disconnected == false.
+When connected, m_connected == true, m_disconnected == false.
+
+Test Plan: Watching kmail's debug output
+
+Reviewers: mlaurent
+
+Subscribers: #kde_pim
+
+Differential Revision: https://phabricator.kde.org/D2172
+---
+ src/kmanagesieve/session.cpp  | 9 ++++++---
+ src/kmanagesieve/session.h    | 6 +++++-
+ src/kmanagesieve/sievejob.cpp | 2 +-
+ 3 files changed, 12 insertions(+), 5 deletions(-)
+
+diff --git a/src/kmanagesieve/session.cpp b/src/kmanagesieve/session.cpp
+index 7a858e5..53164c8 100644
+--- a/src/kmanagesieve/session.cpp
++++ b/src/kmanagesieve/session.cpp
+@@ -48,7 +48,8 @@ Session::Session(QObject *parent) :
+     m_currentJob(Q_NULLPTR),
+     m_state(None),
+     m_supportsStartTls(false),
+-    m_connected(false)
++    m_connected(false),
++    m_disconnected(true)
+ {
+     qRegisterMetaType<KManageSieve::AuthDetails>();
+     qRegisterMetaType<KManageSieve::Response>();
+@@ -71,6 +72,7 @@ Session::Session(QObject *parent) :
+     connect(m_thread, &SessionThread::socketDisconnected,
+     [ = ]() {
+         m_connected = false;
++        m_disconnected = true;
+     });
+ }
+ 
+@@ -84,6 +86,7 @@ void Session::connectToHost(const QUrl &url)
+ {
+     qCDebug(KMANAGERSIEVE_LOG) << "connect to host url: " << url;
+     m_url = url;
++    m_disconnected = false;
+     m_thread->connectToHost(url);
+     m_state = PreTlsCapabilities;
+ }
+@@ -227,9 +230,9 @@ void Session::executeNextJob()
+     m_currentJob->d->run(this);
+ }
+ 
+-bool Session::connected() const
++bool Session::disconnected() const
+ {
+-    return m_connected;
++    return m_disconnected;
+ }
+ 
+ QStringList Session::sieveExtensions() const
+diff --git a/src/kmanagesieve/session.h b/src/kmanagesieve/session.h
+index d3127c4..8a582ba 100644
+--- a/src/kmanagesieve/session.h
++++ b/src/kmanagesieve/session.h
+@@ -66,7 +66,10 @@ public:
+ 
+     QStringList sieveExtensions() const;
+ 
+-    bool connected() const;
++    /**
++     * @return true if we are not connected nor currently connecting, i.e. it's ok to call connectToHost()
++     */
++    bool disconnected() const;
+ 
+ private:
+     bool requestCapabilitiesAfterStartTls() const;
+@@ -102,6 +105,7 @@ private:
+     State m_state;
+     bool m_supportsStartTls;
+     bool m_connected;
++    bool m_disconnected;
+ 
+     friend class SessionThread;
+ };
+diff --git a/src/kmanagesieve/sievejob.cpp b/src/kmanagesieve/sievejob.cpp
+index eef58dd..dd7ec67 100644
+--- a/src/kmanagesieve/sievejob.cpp
++++ b/src/kmanagesieve/sievejob.cpp
+@@ -36,7 +36,7 @@ Session *SieveJob::Private::sessionForUrl(const QUrl &url)
+         m_sessionPool.insert(hostUrl, sessionPtr);
+         sessionPtr->connectToHost(hostUrl);
+     } else {
+-        if (!sessionPtr->connected()) {
++        if (sessionPtr->disconnected()) {
+             sessionPtr->connectToHost(hostUrl);
+         }
+     }
+-- 
+cgit v0.11.2
+
diff --git a/debian/patches/8fb8219_reconnect_socket.patch b/debian/patches/8fb8219_reconnect_socket.patch
new file mode 100644
index 0000000..3282568
--- /dev/null
+++ b/debian/patches/8fb8219_reconnect_socket.patch
@@ -0,0 +1,58 @@
+From 8fb821950bd8caae0c4a86e1d2ecb4caabab1689 Mon Sep 17 00:00:00 2001
+From: Montel Laurent <montel at kde.org>
+Date: Fri, 1 Jul 2016 23:11:11 +0200
+Subject: Reconnect socket
+
+---
+ src/kmanagesieve/session.cpp  | 5 +++++
+ src/kmanagesieve/session.h    | 2 ++
+ src/kmanagesieve/sievejob.cpp | 4 ++++
+ 3 files changed, 11 insertions(+)
+
+diff --git a/src/kmanagesieve/session.cpp b/src/kmanagesieve/session.cpp
+index b45237c..7c38273 100644
+--- a/src/kmanagesieve/session.cpp
++++ b/src/kmanagesieve/session.cpp
+@@ -227,6 +227,11 @@ void Session::executeNextJob()
+     m_currentJob->d->run(this);
+ }
+ 
++bool Session::connected() const
++{
++    return m_connected;
++}
++
+ QStringList Session::sieveExtensions() const
+ {
+     return m_sieveExtensions;
+diff --git a/src/kmanagesieve/session.h b/src/kmanagesieve/session.h
+index c507069..d3127c4 100644
+--- a/src/kmanagesieve/session.h
++++ b/src/kmanagesieve/session.h
+@@ -66,6 +66,8 @@ public:
+ 
+     QStringList sieveExtensions() const;
+ 
++    bool connected() const;
++
+ private:
+     bool requestCapabilitiesAfterStartTls() const;
+ 
+diff --git a/src/kmanagesieve/sievejob.cpp b/src/kmanagesieve/sievejob.cpp
+index 92d75a5..2a90abf 100644
+--- a/src/kmanagesieve/sievejob.cpp
++++ b/src/kmanagesieve/sievejob.cpp
+@@ -35,6 +35,10 @@ Session *SieveJob::Private::sessionForUrl(const QUrl &url)
+         sessionPtr = QPointer<Session>(new Session());
+         m_sessionPool.insert(hostUrl, sessionPtr);
+         sessionPtr->connectToHost(hostUrl);
++    } else {
++        if (!sessionPtr->connected()) {
++            sessionPtr->connectToHost(hostUrl);
++        }
+     }
+     return sessionPtr.data();
+ }
+-- 
+cgit v0.11.2
+
diff --git a/debian/patches/9bbf8a1-add-return-in-case-waiting-for-data.patch b/debian/patches/9bbf8a1-add-return-in-case-waiting-for-data.patch
new file mode 100644
index 0000000..16c1354
--- /dev/null
+++ b/debian/patches/9bbf8a1-add-return-in-case-waiting-for-data.patch
@@ -0,0 +1,27 @@
+From 9bbf8a1dd9f3683000228773eef5dbeb12e0d008 Mon Sep 17 00:00:00 2001
+From: David Faure <faure at kde.org>
+Date: Thu, 14 Jul 2016 12:55:41 +0200
+Subject: KSieve: add return in case we're waiting for more data for
+ "quantity".
+
+Differential Revision: https://phabricator.kde.org/D2163
+---
+ src/kmanagesieve/sessionthread.cpp | 2 ++
+ 1 file changed, 2 insertions(+)
+
+diff --git a/src/kmanagesieve/sessionthread.cpp b/src/kmanagesieve/sessionthread.cpp
+index a38d31a..d344453 100644
+--- a/src/kmanagesieve/sessionthread.cpp
++++ b/src/kmanagesieve/sessionthread.cpp
+@@ -175,6 +175,8 @@ void SessionThread::slotDataReceived()
+         if (m_pendingQuantity <= 0) {
+             qCDebug(KMANAGERSIEVE_LOG) << "S: " << m_data.trimmed();
+             Q_EMIT responseReceived(m_lastResponse, m_data);
++        } else {
++            return; // waiting for more data
+         }
+     }
+ 
+-- 
+cgit v0.11.2
+
diff --git a/debian/patches/ee4afdd-fix-race-while-handling-ssl-errors.patch b/debian/patches/ee4afdd-fix-race-while-handling-ssl-errors.patch
new file mode 100644
index 0000000..acc8106
--- /dev/null
+++ b/debian/patches/ee4afdd-fix-race-while-handling-ssl-errors.patch
@@ -0,0 +1,103 @@
+From ee4afdd78597cb9379a39951b9eca94a8e927f98 Mon Sep 17 00:00:00 2001
+From: David Faure <faure at kde.org>
+Date: Thu, 14 Jul 2016 14:13:24 +0200
+Subject: KSieve Session: fix race while handling SSL errors.
+
+Summary:
+No need to post a request to the thread for handling an ignored ssl error,
+which the thread will simply handle by emitting the sslDone signal,
+which goes back to the main thread. By doing that we were making it possible
+for the thread to emit other things meanwhile - like the received data from the server,
+out of sequence (the main thread can only handle it after receiving sslDone)
+
+This fixes the never-ending spinning in "Manage Sieve Scripts" in kmail
+for me (which happened about 20% of the time).
+
+BUG: 232246
+
+Test Plan: Manage Sieve Scripts in kmail, > 5 times.
+
+Reviewers: dvratil, mlaurent
+
+Reviewed By: mlaurent
+
+Subscribers: kde-pim, #kde_pim
+
+Tags: #kde_pim
+
+Differential Revision: https://phabricator.kde.org/D2167
+---
+ src/kmanagesieve/session.cpp       |  6 +++++-
+ src/kmanagesieve/sessionthread.cpp | 21 ---------------------
+ src/kmanagesieve/sessionthread_p.h |  2 --
+ 3 files changed, 5 insertions(+), 24 deletions(-)
+
+diff --git a/src/kmanagesieve/session.cpp b/src/kmanagesieve/session.cpp
+index 7c38273..7a858e5 100644
+--- a/src/kmanagesieve/session.cpp
++++ b/src/kmanagesieve/session.cpp
+@@ -315,7 +315,11 @@ void Session::authenticationDone()
+ void Session::sslError(const KSslErrorUiData &data)
+ {
+     const bool ignore = KIO::SslUi::askIgnoreSslErrors(data);
+-    m_thread->handleSslErrorResponse(ignore);
++    if (ignore) {
++        sslDone();
++    } else {
++        m_thread->disconnectFromHost(true);
++    }
+ }
+ 
+ void Session::sslDone()
+diff --git a/src/kmanagesieve/sessionthread.cpp b/src/kmanagesieve/sessionthread.cpp
+index c97cd11..a38d31a 100644
+--- a/src/kmanagesieve/sessionthread.cpp
++++ b/src/kmanagesieve/sessionthread.cpp
+@@ -495,24 +495,3 @@ void SessionThread::sslResult(bool encrypted)
+         Q_EMIT sslDone();
+     }
+ }
+-
+-// Called in main thread
+-void SessionThread::handleSslErrorResponse(bool response)
+-{
+-    QMetaObject::invokeMethod(this, "doHandleSslErrorResponse",
+-                              Qt::QueuedConnection,
+-                              Q_ARG(bool, response));
+-}
+-
+-// Called in secondary thread
+-void SessionThread::doHandleSslErrorResponse(bool response)
+-{
+-    Q_ASSERT(QThread::currentThread() == thread());
+-
+-    if (!response) {
+-        doDisconnectFromHost(true);
+-        return;
+-    }
+-
+-    Q_EMIT sslDone();
+-}
+diff --git a/src/kmanagesieve/sessionthread_p.h b/src/kmanagesieve/sessionthread_p.h
+index db89ea2..d607c2b 100644
+--- a/src/kmanagesieve/sessionthread_p.h
++++ b/src/kmanagesieve/sessionthread_p.h
+@@ -54,7 +54,6 @@ public:
+     void continueAuthentication(const Response &response, const QByteArray &data);
+ 
+     void startSsl();
+-    void handleSslErrorResponse(bool response);
+ 
+ Q_SIGNALS:
+     void responseReceived(const KManageSieve::Response &response, const QByteArray &data);
+@@ -76,7 +75,6 @@ private Q_SLOTS:
+     void doStartAuthentication();
+     void doContinueAuthentication(const KManageSieve::Response &response, const QByteArray &data);
+     void doStartSsl();
+-    void doHandleSslErrorResponse(bool response);
+ 
+     void slotDataReceived();
+     void slotSocketError();
+-- 
+cgit v0.11.2
+
diff --git a/debian/patches/series b/debian/patches/series
index 9d428c7..ca0362e 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1 +1,6 @@
 upstream_add_copying_files.patch
+8fb8219_reconnect_socket.patch
+ee4afdd-fix-race-while-handling-ssl-errors.patch
+6862737-dont-call-connecttohost-twice.patch
+9bbf8a1-add-return-in-case-waiting-for-data.patch
+3176d1c-only-set-connected-once-ready.patch

-- 
libksieve packaging



More information about the pkg-kde-commits mailing list