Hello community,

here is the log from the commit of package kio for openSUSE:Factory checked in 
at 2019-01-21 10:23:53
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kio (Old)
 and      /work/SRC/openSUSE:Factory/.kio.new.28833 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kio"

Mon Jan 21 10:23:53 2019 rev:73 rq:666008 version:5.54.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/kio/kio.changes  2018-12-19 13:41:59.163908450 
+0100
+++ /work/SRC/openSUSE:Factory/.kio.new.28833/kio.changes       2019-01-21 
10:23:56.289844040 +0100
@@ -1,0 +2,12 @@
+Mon Jan 14 06:08:48 UTC 2019 - [email protected]
+
+- Update to 5.54.0
+  * New feature release
+  * For more details please see:
+  * https://www.kde.org/announcements/kde-frameworks-5.54.0.php
+- Changes since 5.53.0:
+  * Too many changes to list here
+- Add upstream patch to prevent crashes in KIO (kde#402665)
+  * 0002-Revert-Refactor-SlaveInterface-calcSpeed.patch
+
+-------------------------------------------------------------------

Old:
----
  kio-5.53.0.tar.xz

New:
----
  0002-Revert-Refactor-SlaveInterface-calcSpeed.patch
  kio-5.54.0.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kio.spec ++++++
--- /var/tmp/diff_new_pack.1rXtC9/_old  2019-01-21 10:23:56.785843495 +0100
+++ /var/tmp/diff_new_pack.1rXtC9/_new  2019-01-21 10:23:56.793843485 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package kio
 #
-# Copyright (c) 2018 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -16,14 +16,14 @@
 #
 
 
-%define _tar_path 5.53
+%define _tar_path 5.54
 # Full KF5 version (e.g. 5.33.0)
 %{!?_kf5_version: %global _kf5_version %{version}}
 # Last major and minor KF5 version (e.g. 5.33)
 %{!?_kf5_bugfix_version: %define _kf5_bugfix_version %(echo %{_kf5_version} | 
awk -F. '{print $1"."$2}')}
 %bcond_without lang
 Name:           kio
-Version:        5.53.0
+Version:        5.54.0
 Release:        0
 Summary:        Network transparent access to files and data
 License:        LGPL-2.1-or-later
@@ -33,6 +33,8 @@
 Source1:        baselibs.conf
 # PATCH-FIX-OPENSUSE kio_help-fallback-to-kde4-docs.patch -- allow kio_help to 
see into kde4 documentation, needed especially for khelpcenter5
 Patch0:         kio_help-fallback-to-kde4-docs.patch
+# PATCH-FIX-UPSTREAM
+Patch1:         0002-Revert-Refactor-SlaveInterface-calcSpeed.patch
 BuildRequires:  cmake >= 3.0
 BuildRequires:  extra-cmake-modules >= %{_kf5_bugfix_version}
 BuildRequires:  fdupes

++++++ 0002-Revert-Refactor-SlaveInterface-calcSpeed.patch ++++++
>From b8a5f34b34b6c4e37684fe2782b8cf39c38cd928 Mon Sep 17 00:00:00 2001
From: Fabian Vogt <[email protected]>
Date: Mon, 14 Jan 2019 13:32:52 +0100
Subject: [PATCH 2/2] Revert "Refactor SlaveInterface::calcSpeed"

This reverts commit 4e2a815b9a107663a3d75e9d9d1be336adea888e.
This commit causes crashes due to improper division and there are some
outstanding code review issues as well.

BUG: 402665
---
 src/core/slaveinterface.cpp | 48 ++++++++++++++++++++++++-------------
 src/core/slaveinterface_p.h | 19 +++++++--------
 2 files changed, 39 insertions(+), 28 deletions(-)

diff --git a/src/core/slaveinterface.cpp b/src/core/slaveinterface.cpp
index 6eb2b08d..88f649c8 100644
--- a/src/core/slaveinterface.cpp
+++ b/src/core/slaveinterface.cpp
@@ -45,7 +45,6 @@ SlaveInterface::SlaveInterface(SlaveInterfacePrivate &dd, 
QObject *parent)
     : QObject(parent), d_ptr(&dd)
 {
     connect(&d_ptr->speed_timer, &QTimer::timeout, this, 
&SlaveInterface::calcSpeed);
-    d_ptr->transfer_details.reserve(max_count);
 }
 
 SlaveInterface::~SlaveInterface()
@@ -98,24 +97,36 @@ void SlaveInterface::calcSpeed()
         return;
     }
 
-    // Note for future reference: A list is maintained for sizes and times.
-    // Minimum list size is 1 and maximum list size is 8. Delta is calculated
-    // using first and last item from the list.
-
-    const qint64 elapsed_time = d->elapsed_timer.elapsed();
-    if (elapsed_time >= 900) {
-        if (d->transfer_details.count() == max_count) {
-            d->transfer_details.removeFirst();
+    const qint64 currentTime = QDateTime::currentMSecsSinceEpoch();
+    const qint64 diff = currentTime - d->start_time;
+    if (diff - d->last_time >= 900) {
+        d->last_time = diff;
+        if (d->nums == max_nums) {
+            // let's hope gcc can optimize that well enough
+            // otherwise I'd try memcpy :)
+            for (unsigned int i = 1; i < max_nums; ++i) {
+                d->times[i - 1] = d->times[i];
+                d->sizes[i - 1] = d->sizes[i];
+            }
+            d->nums--;
         }
+        d->times[d->nums] = diff;
+        d->sizes[d->nums++] = d->filesize - d->offset;
+
+        KIO::filesize_t lspeed = 1000 * (d->sizes[d->nums - 1] - d->sizes[0]) 
/ (d->times[d->nums - 1] - d->times[0]);
+
+//qDebug() << (long)d->filesize << diff
+//          << long(d->sizes[d->nums-1] - d->sizes[0])
+//          << d->times[d->nums-1] - d->times[0]
+//          << long(lspeed) << double(d->filesize) / diff
+//          << convertSize(lspeed)
+//          << convertSize(long(double(d->filesize) / diff) * 1000);
 
-        const SlaveInterfacePrivate::TransferInfo first = 
d->transfer_details.first();
-        const SlaveInterfacePrivate::TransferInfo last = {elapsed_time, 
(d->filesize - d->offset)};
-        KIO::filesize_t lspeed = 1000 * (last.size - first.size) / (last.time 
- first.time);
         if (!lspeed) {
-            d->transfer_details.clear();
+            d->nums = 1;
+            d->times[0] = diff;
+            d->sizes[0] = d->filesize - d->offset;
         }
-        d->transfer_details.append(last);
-
         emit speed(lspeed);
     }
 }
@@ -198,10 +209,13 @@ bool SlaveInterface::dispatch(int _cmd, const QByteArray 
&rawdata)
     }
     case INF_TOTAL_SIZE: {
         KIO::filesize_t size = readFilesize_t(stream);
+        d->start_time = QDateTime::currentMSecsSinceEpoch();
+        d->last_time = 0;
         d->filesize = d->offset;
-        d->transfer_details.append({0, 0});
+        d->sizes[0] = d->filesize - d->offset;
+        d->times[0] = 0;
+        d->nums = 1;
         d->speed_timer.start(1000);
-        d->elapsed_timer.start();
         d->slave_calcs_speed = false;
         emit totalSize(size);
         break;
diff --git a/src/core/slaveinterface_p.h b/src/core/slaveinterface_p.h
index efb17d0f..a4cb5d3f 100644
--- a/src/core/slaveinterface_p.h
+++ b/src/core/slaveinterface_p.h
@@ -29,19 +29,17 @@
 #include <QTimer>
 #include <QPointer>
 #include <QHostInfo>
-#include <QVector>
-#include <QElapsedTimer>
 
 #include "kiocoredebug.h"
 
-static const unsigned int max_count = 8;
+static const unsigned int max_nums = 8;
 
 class KIO::SlaveInterfacePrivate
 {
 public:
     SlaveInterfacePrivate()
-        : connection(nullptr), filesize(0), offset(0),
-          slave_calcs_speed(false)
+        : connection(nullptr), filesize(0), offset(0), last_time(0), 
start_time(0),
+          nums(0), slave_calcs_speed(false)
     {
     }
     virtual ~SlaveInterfacePrivate()
@@ -55,14 +53,13 @@ public:
     // We need some metadata here for our SSL code in messageBox() and for 
sslMetaData().
     MetaData sslMetaData;
 
-    struct TransferInfo {
-        qint64 time;
-        KIO::filesize_t size;
-    };
-    QVector<TransferInfo> transfer_details;
-    QElapsedTimer elapsed_timer;
+    KIO::filesize_t sizes[max_nums];
+    qint64 times[max_nums];
 
     KIO::filesize_t filesize, offset;
+    size_t last_time;
+    qint64 start_time;
+    uint nums;
     bool slave_calcs_speed;
 
     void slotHostInfo(const QHostInfo &info);
-- 
2.20.1

++++++ kio-5.53.0.tar.xz -> kio-5.54.0.tar.xz ++++++
++++ 257968 lines of diff (skipped)


Reply via email to