Skip to content

Commit 9a4b4ce

Browse files
committed
Fix stall that can occur if a connect fails whilst posting
Requires post checking to be active, 'connect-fail' error skipping and some working connections Ref #99
1 parent 58fc88b commit 9a4b4ce

File tree

1 file changed

+7
-7
lines changed

1 file changed

+7
-7
lines changed

Diff for: lib/uploader.js

+7-7
Original file line numberDiff line numberDiff line change
@@ -242,28 +242,28 @@ Uploader.prototype = {
242242
self.postActive++;
243243
c.post(post, function(err, messageId) {
244244
self.postActive--;
245+
var postCompletionCb = doPost;
245246
if(err) {
246247
if(self.cancelled && err.code == 'cancelled') return;
247248
dumpPost(self, post); // post.data guaranteed to be set here
248249

249250
// handle error skipping
250251
err.skippable = true;
252+
var isPostFailure = (['connect_fail','connection_ended','not_connected'].indexOf(err.code) == -1);
251253
if(messageId) {
252254
if(err.code == 'timeout' && self.skipErrs['post-timeout']) {
253255
self._markPostError(post, 'Posting timed out');
254256
} else if((err.code == 'post_denied' || err.code == 'bad_response' || err.code == 'unknown_error') && self.skipErrs['post-reject']) {
255257
self._markPostError(post, 'Post rejected (' + err.message + ')');
256-
} else if(err.code == 'connection_ended' || err.code == 'not_connected') { // internal error - cannot continue
257-
return doPost(err);
258-
} else if(self.skipErrs['post-fail'] && err.code != 'connect_fail') {
258+
} else if(self.skipErrs['post-fail'] && isPostFailure) {
259259
self._markPostError(post, 'Posting failed (' + err.message + ')');
260260
} else
261-
return doPost(err);
262-
} else if(self.skipErrs['post-fail'] && ['connect_fail','connection_ended','not_connected'].indexOf(err.code) == -1) {
261+
postCompletionCb = doPost.bind(null, err);
262+
} else if(self.skipErrs['post-fail'] && isPostFailure) {
263263
post.messageId = null; // skipping post where Message-ID is completely invalid
264264
self._markPostError(post, 'Posting failed (' + err.message + ')');
265265
} else
266-
return doPost(err);
266+
postCompletionCb = doPost.bind(null, err);
267267
}
268268
self.articlesPosted++;
269269
self.bytesPosted += post.inputLen;
@@ -286,7 +286,7 @@ Uploader.prototype = {
286286
return;
287287
} else {
288288
post.successful = !err;
289-
self._postComplete(post, err, doPost);
289+
self._postComplete(post, err, postCompletionCb);
290290
}
291291
});
292292
});

0 commit comments

Comments
 (0)