diff options
author | Hans Boehm <hboehm@google.com> | 2021-05-17 15:18:14 -0700 |
---|---|---|
committer | Hans Boehm <hboehm@google.com> | 2021-05-18 15:47:31 +0000 |
commit | c3632b1aab9fa47a0193b200b61bbc9ff1374fb6 (patch) | |
tree | de8984b47580239c095a8104a1791a0345d935b4 | |
parent | 7414ec29f15bf9c5c8ad5af5ce45b3f5fc41ce80 (diff) | |
download | art-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.cc | 10 |
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); |