summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Boehm <hboehm@google.com>2021-05-17 15:18:14 -0700
committerHans Boehm <hboehm@google.com>2021-05-18 15:47:31 +0000
commitc3632b1aab9fa47a0193b200b61bbc9ff1374fb6 (patch)
treede8984b47580239c095a8104a1791a0345d935b4
parent7414ec29f15bf9c5c8ad5af5ce45b3f5fc41ce80 (diff)
downloadart-c3632b1aab9fa47a0193b200b61bbc9ff1374fb6.tar.gz
Avoid timeout with >= 1 billion nsecsandroid-s-beta-2android-s-beta-1
Registering a timeout of >= 1000 msecs produced an error message, but still resulted in a system call with timeout nsecs >= 1 billion, which would cause an error return from the system call and a crash. Avoid this by restricting timeouts to the maximum. Also enforce minimum for symmetry. Bug: 140968481 Test: TreeHugger Change-Id: I191fb88a03bf09d2c5a93864bb26624c10b6e52d
-rw-r--r--runtime/runtime.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/runtime/runtime.cc b/runtime/runtime.cc
index 53431508c7..38f8ce1039 100644
--- a/runtime/runtime.cc
+++ b/runtime/runtime.cc
@@ -1418,9 +1418,13 @@ bool Runtime::Init(RuntimeArgumentMap&& runtime_options_in) {
monitor_timeout_enable_ = runtime_options.GetOrDefault(Opt::MonitorTimeoutEnable);
int monitor_timeout_ms = runtime_options.GetOrDefault(Opt::MonitorTimeout);
- if (monitor_timeout_ms < Monitor::kMonitorTimeoutMinMs ||
- monitor_timeout_ms >= Monitor::kMonitorTimeoutMaxMs) {
- LOG(ERROR) << "Improper monitor timeout could cause crash!";
+ if (monitor_timeout_ms < Monitor::kMonitorTimeoutMinMs) {
+ LOG(WARNING) << "Monitor timeout too short: Increasing";
+ monitor_timeout_ms = Monitor::kMonitorTimeoutMinMs;
+ }
+ if (monitor_timeout_ms >= Monitor::kMonitorTimeoutMaxMs) {
+ LOG(WARNING) << "Monitor timeout too long: Decreasing";
+ monitor_timeout_ms = Monitor::kMonitorTimeoutMaxMs - 1;
}
monitor_timeout_ns_ = MsToNs(monitor_timeout_ms);