| ... | ... | @@ -467,6 +467,7 @@ pub const Loop = struct { |
| 467 | 467 | }}; |
| 468 | 468 | _ = os.poll(&pfd, -1) catch |poll_err| switch (poll_err) { |
| 469 | 469 | error.SystemResources, |
| 470 | error.NetworkSubsystemFailed, |
| 470 | 471 | error.Unexpected, |
| 471 | 472 | => { |
| 472 | 473 | // Even poll() didn't work. The best we can do now is sleep for a |
| ... | ... | @@ -772,7 +773,7 @@ pub const Loop = struct { |
| 772 | 773 | self.delay_queue.waiters.insert(&entry); |
| 773 | 774 | |
| 774 | 775 | // Speculatively wake up the timer thread when we add a new entry. |
| 775 | | // If the timer thread is sleeping on a longer entry, we need to |
| 776 | // If the timer thread is sleeping on a longer entry, we need to |
| 776 | 777 | // interrupt it so that our entry can be expired in time. |
| 777 | 778 | self.delay_queue.event.set(); |
| 778 | 779 | } |
| ... | ... | @@ -784,7 +785,7 @@ pub const Loop = struct { |
| 784 | 785 | thread: *std.Thread, |
| 785 | 786 | event: std.AutoResetEvent, |
| 786 | 787 | is_running: bool, |
| 787 | | |
| 788 | |
| 788 | 789 | /// Initialize the delay queue by spawning the timer thread |
| 789 | 790 | /// and starting any timer resources. |
| 790 | 791 | fn init(self: *DelayQueue) !void { |
| ... | ... | @@ -799,7 +800,7 @@ pub const Loop = struct { |
| 799 | 800 | }; |
| 800 | 801 | } |
| 801 | 802 | |
| 802 | | /// Entry point for the timer thread |
| 803 | /// Entry point for the timer thread |
| 803 | 804 | /// which waits for timer entries to expire and reschedules them. |
| 804 | 805 | fn run(self: *DelayQueue) void { |
| 805 | 806 | const loop = @fieldParentPtr(Loop, "delay_queue", self); |
| ... | ... | @@ -847,12 +848,12 @@ pub const Loop = struct { |
| 847 | 848 | const entry = self.peekExpiringEntry() orelse return null; |
| 848 | 849 | if (entry.expires > now) |
| 849 | 850 | return null; |
| 850 | | |
| 851 | |
| 851 | 852 | assert(self.entries.remove(&entry.node)); |
| 852 | 853 | return entry; |
| 853 | 854 | } |
| 854 | | |
| 855 | | /// Returns an estimate for the amount of time |
| 855 | |
| 856 | /// Returns an estimate for the amount of time |
| 856 | 857 | /// to wait until the next waiting entry expires. |
| 857 | 858 | fn nextExpire(self: *Waiters) ?u64 { |
| 858 | 859 | const entry = self.peekExpiringEntry() orelse return null; |