Skip to content

Commit fe32ef4

Browse files
happyCoder92copybara-github
authored andcommitted
Automated rollback of commit afe4c62.
PiperOrigin-RevId: 707009678 Change-Id: I72cf41191af4f09433bb5aaf7cc174b2c1af935e
1 parent d02ef0c commit fe32ef4

File tree

2 files changed

+16
-39
lines changed

2 files changed

+16
-39
lines changed

sandboxed_api/sandbox2/util/deadline_manager.cc

Lines changed: 15 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -16,10 +16,8 @@
1616

1717
#include <sys/syscall.h>
1818

19-
#include <algorithm>
2019
#include <csignal>
2120
#include <memory>
22-
#include <vector>
2321

2422
#include "absl/base/call_once.h"
2523
#include "absl/flags/flag.h"
@@ -139,46 +137,27 @@ void DeadlineManager::Run() {
139137
return (!queue_.empty() && next_deadline != (*queue_.begin())->deadline) ||
140138
cancelled_;
141139
};
142-
for (;;) {
143-
std::vector<DeadlineRegistration::Data*> to_be_notified;
144-
{
145-
absl::MutexLock lock(&queue_mutex_);
146-
if (cancelled_) {
147-
break;
148-
}
149-
next_deadline = absl::InfiniteFuture();
150-
if (!queue_.empty()) {
151-
next_deadline = (*queue_.begin())->deadline;
152-
}
153-
if (queue_mutex_.AwaitWithDeadline(
154-
absl::Condition(&next_deadline_changed_or_cancelled),
155-
next_deadline)) {
156-
continue;
157-
}
158-
absl::Time current = std::max(absl::Now(), next_deadline);
159-
while (!queue_.empty() && (*queue_.begin())->deadline <= current) {
160-
to_be_notified.push_back(*queue_.begin());
161-
queue_.erase(queue_.begin());
162-
}
140+
absl::MutexLock lock(&queue_mutex_);
141+
while (!cancelled_) {
142+
next_deadline = absl::InfiniteFuture();
143+
if (!queue_.empty()) {
144+
next_deadline = (*queue_.begin())->deadline;
145+
}
146+
if (queue_mutex_.AwaitWithDeadline(
147+
absl::Condition(&next_deadline_changed_or_cancelled),
148+
next_deadline)) {
149+
continue;
163150
}
164-
std::vector<DeadlineRegistration::Data*> to_reinsert;
165-
absl::Time next_notification_time =
166-
RoundUpTo(absl::Now() + kResolution, kResolution);
167-
for (DeadlineRegistration::Data* entry : to_be_notified) {
151+
absl::Time next_notification_time = RoundUpTo(absl::Now(), kResolution);
152+
while (!queue_.empty() && (*queue_.begin())->deadline <= next_deadline) {
153+
DeadlineRegistration::Data* entry = *queue_.begin();
154+
queue_.erase(queue_.begin());
168155
absl::MutexLock lock(&entry->mutex);
169156
entry->expired = true;
170157
if (entry->in_blocking_fn) {
171158
util::Syscall(__NR_tgkill, getpid(), entry->tid, signal_nr_);
172159
entry->deadline = next_notification_time;
173-
to_reinsert.push_back(entry);
174-
}
175-
}
176-
{
177-
absl::MutexLock lock(&queue_mutex_);
178-
for (DeadlineRegistration::Data* entry : to_reinsert) {
179-
if (entry->deadline != absl::InfiniteFuture()) {
180-
queue_.insert(entry);
181-
}
160+
queue_.insert(entry);
182161
}
183162
}
184163
}

sandboxed_api/sandbox2/util/deadline_manager.h

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,7 @@ class DeadlineRegistration {
7171

7272
struct Data {
7373
absl::Mutex mutex;
74-
// Adjusted under both DeadlineManager::queue_mutex_ and Data::mutex.
75-
// DeadlineManager thread reads it holding just queue_mutex_ and writes
76-
// holding just Data::mutex.
74+
// Changed only under both DeadlineManager::queue_mutex_ and Data::mutex.
7775
absl::Time deadline = absl::InfiniteFuture();
7876
pid_t ABSL_GUARDED_BY(mutex) tid = -1;
7977
bool ABSL_GUARDED_BY(mutex) in_blocking_fn = false;

0 commit comments

Comments
 (0)