[geary/wip/conversation-polish: 17/22] Make ImapCommand throw a timeout error when a timeout has occurred
- From: Michael Gratton <mjog src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [geary/wip/conversation-polish: 17/22] Make ImapCommand throw a timeout error when a timeout has occurred
- Date: Tue, 29 Jan 2019 05:39:54 +0000 (UTC)
commit d4a6ea7479a87d7a499125d36bffe84f23b68e03
Author: Michael Gratton <mike vee net>
Date: Thu Jan 24 18:55:39 2019 +1100
Make ImapCommand throw a timeout error when a timeout has occurred
This allows API clients to retry email store and folder operations if
the network has disappeared.
src/engine/imap/command/imap-command.vala | 11 +++++++++++
1 file changed, 11 insertions(+)
---
diff --git a/src/engine/imap/command/imap-command.vala b/src/engine/imap/command/imap-command.vala
index a77bfa55..dd6eb18d 100644
--- a/src/engine/imap/command/imap-command.vala
+++ b/src/engine/imap/command/imap-command.vala
@@ -78,6 +78,8 @@ public class Geary.Imap.Command : BaseObject {
private Geary.Nonblocking.Semaphore complete_lock =
new Geary.Nonblocking.Semaphore();
+ private bool timed_out = false;
+
private Geary.Nonblocking.Spinlock? literal_spinlock = null;
private GLib.Cancellable? literal_cancellable = null;
@@ -224,6 +226,14 @@ public class Geary.Imap.Command : BaseObject {
public async void wait_until_complete(GLib.Cancellable cancellable)
throws GLib.Error {
yield this.complete_lock.wait_async(cancellable);
+
+ if (this.timed_out) {
+ throw new ImapError.TIMED_OUT(
+ "%s: No command response was received",
+ to_brief_string()
+ );
+ }
+
// Since this is part of the public API, perform a strict
// check on the status code.
check_status(true);
@@ -353,6 +363,7 @@ public class Geary.Imap.Command : BaseObject {
}
private void on_response_timeout() {
+ this.timed_out = true;
cancel_command();
response_timed_out();
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]