summaryrefslogtreecommitdiffstats
path: root/common/resourceaccess.cpp
diff options
context:
space:
mode:
authorChristian Mollekopf <chrigi_1@fastmail.fm>2015-07-20 16:43:48 +0200
committerChristian Mollekopf <chrigi_1@fastmail.fm>2015-07-23 17:37:53 +0200
commitaf04544218447141757cc7365aac8363b99cb9cf (patch)
tree6c0a1e825f7d893be8cc866bcd17c4caa9a080e9 /common/resourceaccess.cpp
parentb187b95672fe0d8b16ba80bedd9022f1cda3a051 (diff)
downloadsink-af04544218447141757cc7365aac8363b99cb9cf.tar.gz
sink-af04544218447141757cc7365aac8363b99cb9cf.zip
Give up after trying to connect for a while
Diffstat (limited to 'common/resourceaccess.cpp')
-rw-r--r--common/resourceaccess.cpp24
1 files changed, 19 insertions, 5 deletions
diff --git a/common/resourceaccess.cpp b/common/resourceaccess.cpp
index 78a5155..84c5dcb 100644
--- a/common/resourceaccess.cpp
+++ b/common/resourceaccess.cpp
@@ -113,11 +113,12 @@ KAsync::Job<QSharedPointer<QLocalSocket> > ResourceAccess::connectToServer(const
113 113
114KAsync::Job<void> ResourceAccess::Private::tryToConnect() 114KAsync::Job<void> ResourceAccess::Private::tryToConnect()
115{ 115{
116 auto counter = QSharedPointer<int>::create();
117 *counter = 0;
116 return KAsync::dowhile([this]() -> bool { 118 return KAsync::dowhile([this]() -> bool {
117 //TODO abort after N retries?
118 return !socket; 119 return !socket;
119 }, 120 },
120 [this](KAsync::Future<void> &future) { 121 [this, counter](KAsync::Future<void> &future) {
121 Trace() << "Loop"; 122 Trace() << "Loop";
122 KAsync::wait(50) 123 KAsync::wait(50)
123 .then(connectToServer(resourceInstanceIdentifier)) 124 .then(connectToServer(resourceInstanceIdentifier))
@@ -126,8 +127,15 @@ KAsync::Job<void> ResourceAccess::Private::tryToConnect()
126 socket = s; 127 socket = s;
127 future.setFinished(); 128 future.setFinished();
128 }, 129 },
129 [&future](int errorCode, const QString &errorString) { 130 [&future, counter](int errorCode, const QString &errorString) {
130 future.setFinished(); 131 const int maxRetries = 10;
132 if (*counter > maxRetries) {
133 Trace() << "Giving up";
134 future.setError(-1, "Failed to connect to socket");
135 } else {
136 future.setFinished();
137 }
138 *counter = *counter + 1;
131 }).exec(); 139 }).exec();
132 }); 140 });
133} 141}
@@ -153,6 +161,9 @@ KAsync::Job<void> ResourceAccess::Private::initializeSocket()
153 tryToConnect() 161 tryToConnect()
154 .then<void>([&future]() { 162 .then<void>([&future]() {
155 future.setFinished(); 163 future.setFinished();
164 }, [this, &future](int errorCode, const QString &errorString) {
165 Warning() << "Failed to connect to started resource";
166 future.setError(errorCode, errorString);
156 }).exec(); 167 }).exec();
157 } else { 168 } else {
158 Warning() << "Failed to start resource"; 169 Warning() << "Failed to start resource";
@@ -179,7 +190,7 @@ ResourceAccess::~ResourceAccess()
179{ 190{
180 log("Closing access"); 191 log("Closing access");
181 if (!d->resultHandler.isEmpty()) { 192 if (!d->resultHandler.isEmpty()) {
182 Warning() << "Left jobs running while shutting down ResourceAccess"; 193 Warning() << "Left jobs running while shutting down ResourceAccess: " << d->resultHandler.keys();
183 } 194 }
184} 195}
185 196
@@ -257,6 +268,9 @@ void ResourceAccess::open()
257 QObject::connect(d->socket.data(), &QIODevice::readyRead, 268 QObject::connect(d->socket.data(), &QIODevice::readyRead,
258 this, &ResourceAccess::readResourceMessage); 269 this, &ResourceAccess::readResourceMessage);
259 connected(); 270 connected();
271 },
272 [](int error, const QString &errorString) {
273 Warning() << "Failed to initialize socket " << errorString;
260 }).exec(); 274 }).exec();
261} 275}
262 276