Merge lp:~michihenning/storage-framework/add-cancel-on-destroy into lp:storage-framework/devel

Proposed by Michi Henning
Status: Merged
Approved by: James Henstridge
Approved revision: 67
Merged at revision: 64
Proposed branch: lp:~michihenning/storage-framework/add-cancel-on-destroy
Merge into: lp:storage-framework/devel
Diff against target: 177 lines (+30/-5)
10 files modified
include/unity/storage/internal/ItemMetadata.h (+1/-0)
include/unity/storage/provider/internal/ProviderInterface.h (+1/-0)
include/unity/storage/provider/internal/TempfileUploadJobImpl.h (+1/-0)
include/unity/storage/qt/client/Exceptions.h (+3/-0)
include/unity/storage/qt/client/internal/remote_client/UploaderImpl.h (+3/-0)
src/qt/client/internal/local_client/DownloaderImpl.cpp (+3/-0)
src/qt/client/internal/local_client/ItemImpl.cpp (+1/-0)
src/qt/client/internal/local_client/UploaderImpl.cpp (+4/-0)
src/qt/client/internal/remote_client/DownloaderImpl.cpp (+2/-2)
src/qt/client/internal/remote_client/UploaderImpl.cpp (+11/-3)
To merge this branch: bzr merge lp:~michihenning/storage-framework/add-cancel-on-destroy
Reviewer Review Type Date Requested Status
unity-api-1-bot continuous-integration Approve
James Henstridge Approve
Review via email: mp+304025@code.launchpad.net

Commit message

Send cancel message to server if uploader is destroyed without a prior call to
cancel() or finish_upload().

Description of the change

Send cancel message to server if uploader is destroyed without a prior
call to cancel() or finish_upload().

To post a comment you must log in.
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

PASSED: Continuous integration, rev:64
https://jenkins.canonical.com/unity-api-1/job/lp-storage-framework-ci/97/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build/498
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/504
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=vivid+overlay/409
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=xenial+overlay/409
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=yakkety/409
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/339
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/339
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/339
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/339
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/339
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/339
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/339
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/339
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/339/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/339
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/339/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-framework-ci/97/rebuild

review: Approve (continuous-integration)
65. By Michi Henning

Suppressed a bunch more compiler warnings from Arm builds.

66. By Michi Henning

Suppressed one more compiler warning.

Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

PASSED: Continuous integration, rev:65
https://jenkins.canonical.com/unity-api-1/job/lp-storage-framework-ci/98/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build/499
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/505
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=vivid+overlay/410
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=xenial+overlay/410
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=yakkety/410
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/340
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/340/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/340
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/340/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/340
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/340/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/340
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/340/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/340
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/340/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/340
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/340/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/340
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/340/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/340
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/340/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/340
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/340/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-framework-ci/98/rebuild

review: Approve (continuous-integration)
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

PASSED: Continuous integration, rev:66
https://jenkins.canonical.com/unity-api-1/job/lp-storage-framework-ci/99/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build/500
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/506
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=vivid+overlay/411
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=xenial+overlay/411
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=yakkety/411
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/341
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/341
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/341
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/341
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/341
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/341
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/341
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/341
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/341/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/341
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/341/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-framework-ci/99/rebuild

review: Approve (continuous-integration)
Revision history for this message
James Henstridge (jamesh) wrote :

I've left an inline comment.

While reading the surrounding code, I think I spotted a bug in UploaderImpl::cancel(): the process_reply() callback never sets the passed QFutureInterface to ready. All it does is call make_ready_future(), which creates a new future which is then ignored.

Has it really made the code clearer to have these make_ready_future/make_exceptional_future overloads that don't actually make new QFutures? The closure passed to Handler will never want to make a new future, but rather just update the result of the passed QFutureInterface.

Revision history for this message
Michi Henning (michihenning) wrote :

Thanks for spotting that bug, it now sets the future via the QFutureInterface.

The QFuture overloads in make_future.h are a little dangerous because it's easy to accidentally return a new future instead of instead of setting the one inside the QFutureInterface.

I'll have a look at cleaning this up in a separate MR.

67. By Michi Henning

Set future via the promise in the handler rather than returning a new ready future.

Revision history for this message
James Henstridge (jamesh) wrote :

Looks good!

Revision history for this message
James Henstridge (jamesh) :
review: Approve
Revision history for this message
unity-api-1-bot (unity-api-1-bot) wrote :

PASSED: Continuous integration, rev:67
https://jenkins.canonical.com/unity-api-1/job/lp-storage-framework-ci/100/
Executed test runs:
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build/502
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-0-fetch/508
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=vivid+overlay/413
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=xenial+overlay/413
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-1-sourcepkg/release=yakkety/413
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/343
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=vivid+overlay/343/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/343
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=xenial+overlay/343/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/343
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=amd64,release=yakkety/343/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/343
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=vivid+overlay/343/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/343
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=xenial+overlay/343/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/343
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=armhf,release=yakkety/343/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/343
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=vivid+overlay/343/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/343
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=xenial+overlay/343/artifact/output/*zip*/output.zip
    SUCCESS: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/343
        deb: https://jenkins.canonical.com/unity-api-1/job/build-2-binpkg/arch=i386,release=yakkety/343/artifact/output/*zip*/output.zip

Click here to trigger a rebuild:
https://jenkins.canonical.com/unity-api-1/job/lp-storage-framework-ci/100/rebuild

review: Approve (continuous-integration)

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'include/unity/storage/internal/ItemMetadata.h'
--- include/unity/storage/internal/ItemMetadata.h 2016-08-11 04:37:13 +0000
+++ include/unity/storage/internal/ItemMetadata.h 2016-08-26 02:52:25 +0000
@@ -21,6 +21,7 @@
21#include <unity/storage/common.h>21#include <unity/storage/common.h>
2222
23#pragma GCC diagnostic push23#pragma GCC diagnostic push
24#pragma GCC diagnostic ignored "-Wcast-align"
24#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"25#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
25#pragma GCC diagnostic ignored "-Wswitch-default"26#pragma GCC diagnostic ignored "-Wswitch-default"
26#include <QMap>27#include <QMap>
2728
=== modified file 'include/unity/storage/provider/internal/ProviderInterface.h'
--- include/unity/storage/provider/internal/ProviderInterface.h 2016-08-03 03:55:20 +0000
+++ include/unity/storage/provider/internal/ProviderInterface.h 2016-08-26 02:52:25 +0000
@@ -22,6 +22,7 @@
22#include <unity/storage/provider/internal/Handler.h>22#include <unity/storage/provider/internal/Handler.h>
2323
24#pragma GCC diagnostic push24#pragma GCC diagnostic push
25#pragma GCC diagnostic ignored "-Wcast-align"
25#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"26#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
26#pragma GCC diagnostic ignored "-Wswitch-default"27#pragma GCC diagnostic ignored "-Wswitch-default"
27#include <QObject>28#include <QObject>
2829
=== modified file 'include/unity/storage/provider/internal/TempfileUploadJobImpl.h'
--- include/unity/storage/provider/internal/TempfileUploadJobImpl.h 2016-08-23 09:09:22 +0000
+++ include/unity/storage/provider/internal/TempfileUploadJobImpl.h 2016-08-26 02:52:25 +0000
@@ -21,6 +21,7 @@
21#include <unity/storage/provider/internal/UploadJobImpl.h>21#include <unity/storage/provider/internal/UploadJobImpl.h>
2222
23#pragma GCC diagnostic push23#pragma GCC diagnostic push
24#pragma GCC diagnostic ignored "-Wcast-align"
24#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"25#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
25#include <QLocalSocket>26#include <QLocalSocket>
26#include <QTemporaryFile>27#include <QTemporaryFile>
2728
=== modified file 'include/unity/storage/qt/client/Exceptions.h'
--- include/unity/storage/qt/client/Exceptions.h 2016-08-05 05:37:23 +0000
+++ include/unity/storage/qt/client/Exceptions.h 2016-08-26 02:52:25 +0000
@@ -20,7 +20,10 @@
2020
21#include <unity/storage/visibility.h>21#include <unity/storage/visibility.h>
2222
23#pragma GCC diagnostic push
24#pragma GCC diagnostic ignored "-Wcast-align"
23#include <QException>25#include <QException>
26#pragma GCC diagnostic pop
24#include <QString>27#include <QString>
2528
26namespace unity29namespace unity
2730
=== modified file 'include/unity/storage/qt/client/internal/remote_client/UploaderImpl.h'
--- include/unity/storage/qt/client/internal/remote_client/UploaderImpl.h 2016-08-03 03:20:39 +0000
+++ include/unity/storage/qt/client/internal/remote_client/UploaderImpl.h 2016-08-26 02:52:25 +0000
@@ -65,12 +65,15 @@
65 std::shared_ptr<ProviderInterface> const& provider);65 std::shared_ptr<ProviderInterface> const& provider);
6666
67private:67private:
68 enum State { uploading, finalized };
69
68 QString upload_id_;70 QString upload_id_;
69 QDBusUnixFileDescriptor fd_;71 QDBusUnixFileDescriptor fd_;
70 QString old_etag_;72 QString old_etag_;
71 std::shared_ptr<Root> root_;73 std::shared_ptr<Root> root_;
72 std::shared_ptr<ProviderInterface> provider_;74 std::shared_ptr<ProviderInterface> provider_;
73 std::shared_ptr<QLocalSocket> write_socket_;75 std::shared_ptr<QLocalSocket> write_socket_;
76 State state_;
74};77};
7578
76} // namespace remote_client79} // namespace remote_client
7780
=== modified file 'src/qt/client/internal/local_client/DownloaderImpl.cpp'
--- src/qt/client/internal/local_client/DownloaderImpl.cpp 2016-08-11 01:34:55 +0000
+++ src/qt/client/internal/local_client/DownloaderImpl.cpp 2016-08-26 02:52:25 +0000
@@ -23,7 +23,10 @@
23#include <unity/storage/qt/client/File.h>23#include <unity/storage/qt/client/File.h>
24#include <unity/storage/qt/client/internal/make_future.h>24#include <unity/storage/qt/client/internal/make_future.h>
2525
26#pragma GCC diagnostic push
27#pragma GCC diagnostic ignored "-Wcast-align"
26#include <QLocalSocket>28#include <QLocalSocket>
29#pragma GCC diagnostic pop
2730
28#include <cassert>31#include <cassert>
2932
3033
=== modified file 'src/qt/client/internal/local_client/ItemImpl.cpp'
--- src/qt/client/internal/local_client/ItemImpl.cpp 2016-08-03 06:09:59 +0000
+++ src/qt/client/internal/local_client/ItemImpl.cpp 2016-08-26 02:52:25 +0000
@@ -30,6 +30,7 @@
3030
31#include <boost/algorithm/string/predicate.hpp>31#include <boost/algorithm/string/predicate.hpp>
32#pragma GCC diagnostic push32#pragma GCC diagnostic push
33#pragma GCC diagnostic ignored "-Wcast-align"
33#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"34#pragma GCC diagnostic ignored "-Wctor-dtor-privacy"
34#include <QtConcurrent>35#include <QtConcurrent>
35#pragma GCC diagnostic pop36#pragma GCC diagnostic pop
3637
=== modified file 'src/qt/client/internal/local_client/UploaderImpl.cpp'
--- src/qt/client/internal/local_client/UploaderImpl.cpp 2016-08-25 05:18:37 +0000
+++ src/qt/client/internal/local_client/UploaderImpl.cpp 2016-08-26 02:52:25 +0000
@@ -25,7 +25,11 @@
25#include <unity/storage/qt/client/internal/local_client/tmpfile_prefix.h>25#include <unity/storage/qt/client/internal/local_client/tmpfile_prefix.h>
26#include <unity/storage/qt/client/internal/make_future.h>26#include <unity/storage/qt/client/internal/make_future.h>
2727
28
29#pragma GCC diagnostic push
30#pragma GCC diagnostic ignored "-Wcast-align"
28#include <QLocalSocket>31#include <QLocalSocket>
32#pragma GCC diagnostic pop
2933
30#include <cassert>34#include <cassert>
3135
3236
=== modified file 'src/qt/client/internal/remote_client/DownloaderImpl.cpp'
--- src/qt/client/internal/remote_client/DownloaderImpl.cpp 2016-08-03 04:13:28 +0000
+++ src/qt/client/internal/remote_client/DownloaderImpl.cpp 2016-08-26 02:52:25 +0000
@@ -79,9 +79,9 @@
79{79{
80 auto reply = provider_->FinishDownload(download_id_);80 auto reply = provider_->FinishDownload(download_id_);
8181
82 auto process_reply = [this](decltype(reply) const&, QFutureInterface<void>&)82 auto process_reply = [this](decltype(reply) const&, QFutureInterface<void>& qf)
83 {83 {
84 make_ready_future();84 make_ready_future(qf);
85 };85 };
8686
87 auto handler = new Handler<void>(this, reply, process_reply);87 auto handler = new Handler<void>(this, reply, process_reply);
8888
=== modified file 'src/qt/client/internal/remote_client/UploaderImpl.cpp'
--- src/qt/client/internal/remote_client/UploaderImpl.cpp 2016-08-09 02:25:13 +0000
+++ src/qt/client/internal/remote_client/UploaderImpl.cpp 2016-08-26 02:52:25 +0000
@@ -54,6 +54,7 @@
54 , root_(root.lock())54 , root_(root.lock())
55 , provider_(provider)55 , provider_(provider)
56 , write_socket_(new QLocalSocket)56 , write_socket_(new QLocalSocket)
57 , state_(uploading)
57{58{
58 assert(!upload_id.isEmpty());59 assert(!upload_id.isEmpty());
59 assert(fd.isValid());60 assert(fd.isValid());
@@ -66,7 +67,10 @@
6667
67UploaderImpl::~UploaderImpl()68UploaderImpl::~UploaderImpl()
68{69{
69 write_socket_->abort();70 if (state_ == uploading)
71 {
72 provider_->CancelUpload(upload_id_);
73 }
70}74}
7175
72shared_ptr<QLocalSocket> UploaderImpl::socket() const76shared_ptr<QLocalSocket> UploaderImpl::socket() const
@@ -76,6 +80,8 @@
7680
77QFuture<shared_ptr<File>> UploaderImpl::finish_upload()81QFuture<shared_ptr<File>> UploaderImpl::finish_upload()
78{82{
83 state_ = finalized;
84
79 auto reply = provider_->FinishUpload(upload_id_);85 auto reply = provider_->FinishUpload(upload_id_);
80 auto process_reply = [this](decltype(reply) const& reply, QFutureInterface<shared_ptr<File>>& qf)86 auto process_reply = [this](decltype(reply) const& reply, QFutureInterface<shared_ptr<File>>& qf)
81 {87 {
@@ -107,10 +113,12 @@
107113
108QFuture<void> UploaderImpl::cancel() noexcept114QFuture<void> UploaderImpl::cancel() noexcept
109{115{
116 state_ = finalized;
117
110 auto reply = provider_->CancelUpload(upload_id_);118 auto reply = provider_->CancelUpload(upload_id_);
111 auto process_reply = [this](decltype(reply) const&, QFutureInterface<void>&)119 auto process_reply = [this](decltype(reply) const&, QFutureInterface<void>& qf)
112 {120 {
113 make_ready_future();121 make_ready_future(qf);
114 };122 };
115123
116 write_socket_->abort();124 write_socket_->abort();

Subscribers

People subscribed via source and target branches

to all changes: