diff options
author | Mark Salyzyn <salyzyn@google.com> | 2020-05-14 09:20:30 -0700 |
---|---|---|
committer | Mark Salyzyn <salyzyn@google.com> | 2020-05-19 13:25:07 -0700 |
commit | 61de0d226d9455ca4ea71b838881d916c8fd2f03 (patch) | |
tree | c6e5c2c9f63e6d27b5a4402157e1b447b13913e9 /init/builtins.cpp | |
parent | 9113e7be9556d002e84c08bb5ed1aa7dd1bcf618 (diff) |
init: support wait timeout with more precision
A one second timeout is so coarse and can affect boot time when
the possibility that the file does not exist. Switch to accepting
a floating point number for seconds for the wait for file command.
Signed-off-by: Mark Salyzyn <salyzyn@google.com>
Bug: 151950334
Test: wait_for_file sleep 0.05 reports an appropriate delay
Change-Id: I8d8ed386519ab54270b05ce91663d0add30f12e7
Diffstat (limited to 'init/builtins.cpp')
-rw-r--r-- | init/builtins.cpp | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/init/builtins.cpp b/init/builtins.cpp index 200bfff7d..149a766b3 100644 --- a/init/builtins.cpp +++ b/init/builtins.cpp @@ -49,6 +49,7 @@ #include <android-base/chrono_utils.h> #include <android-base/file.h> #include <android-base/logging.h> +#include <android-base/parsedouble.h> #include <android-base/parseint.h> #include <android-base/properties.h> #include <android-base/stringprintf.h> @@ -1065,11 +1066,12 @@ static Result<void> do_load_system_props(const BuiltinArguments& args) { static Result<void> do_wait(const BuiltinArguments& args) { auto timeout = kCommandRetryTimeout; if (args.size() == 3) { - int timeout_int; - if (!android::base::ParseInt(args[2], &timeout_int)) { + double timeout_double; + if (!android::base::ParseDouble(args[2], &timeout_double, 0)) { return Error() << "failed to parse timeout"; } - timeout = std::chrono::seconds(timeout_int); + timeout = std::chrono::duration_cast<std::chrono::nanoseconds>( + std::chrono::duration<double>(timeout_double)); } if (wait_for_file(args[1].c_str(), timeout) != 0) { |