diff options
Diffstat (limited to 'tddb/td/db/TQueue.cpp')
| -rw-r--r-- | tddb/td/db/TQueue.cpp | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/tddb/td/db/TQueue.cpp b/tddb/td/db/TQueue.cpp index 1f7c65c2f..5fc61c98e 100644 --- a/tddb/td/db/TQueue.cpp +++ b/tddb/td/db/TQueue.cpp @@ -216,15 +216,23 @@ class TQueueImpl final : public TQueue { } void clear(QueueId queue_id, size_t keep_count) final { - auto size = get_size(queue_id); + auto queue_it = queues_.find(queue_id); + if (queue_it == queues_.end()) { + return; + } + auto &q = queue_it->second; + auto size = get_size(q); if (size <= keep_count) { return; } - MutableSpan<TQueue::Event> span; - auto r_size = get(queue_id, get_tail(queue_id).advance(0 - keep_count).move_as_ok(), true, 0, span); - CHECK(r_size.is_ok()); - CHECK(r_size.ok() == keep_count); + auto end_it = q.events.end(); + while (keep_count-- > 0) { + --end_it; + } + for (auto it = q.events.begin(); it != end_it;) { + pop(q, queue_id, it, q.tail_id); + } } Result<size_t> get(QueueId queue_id, EventId from_id, bool forget_previous, int32 unix_time_now, |
