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)
