diff options
author | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-07-20 16:43:48 +0200 |
---|---|---|
committer | Christian Mollekopf <chrigi_1@fastmail.fm> | 2015-07-23 17:37:53 +0200 |
commit | af04544218447141757cc7365aac8363b99cb9cf (patch) | |
tree | 6c0a1e825f7d893be8cc866bcd17c4caa9a080e9 | |
parent | b187b95672fe0d8b16ba80bedd9022f1cda3a051 (diff) | |
download | sink-af04544218447141757cc7365aac8363b99cb9cf.tar.gz sink-af04544218447141757cc7365aac8363b99cb9cf.zip |
Give up after trying to connect for a while
-rw-r--r-- | common/resourceaccess.cpp | 24 |
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 | ||
114 | KAsync::Job<void> ResourceAccess::Private::tryToConnect() | 114 | KAsync::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 | ||