Windows: Abstracted out `os::name_job` in stout.
Almost all uses identify a job object by the PID, but the job object
handle must be obtained by name. So this overloads `os::open_job` to
call `os::name_job` when given a PID.
Review: https://reviews.apache.org/r/63275
Project: http://git-wip-us.apache.org/repos/asf/mesos/repo
Commit: http://git-wip-us.apache.org/repos/asf/mesos/commit/17564c7f
Tree: http://git-wip-us.apache.org/repos/asf/mesos/tree/17564c7f
Diff: http://git-wip-us.apache.org/repos/asf/mesos/diff/17564c7f
Branch: refs/heads/master
Commit: 17564c7f8d05adede26f49f8842f1a9592055d8d
Parents: b81784d
Author: Andrew Schwartzmeyer <an...@schwartzmeyer.com>
Authored: Wed Oct 18 22:53:18 2017 -0700
Committer: Andrew Schwartzmeyer <an...@schwartzmeyer.com>
Committed: Thu Nov 30 15:54:53 2017 -0800
----------------------------------------------------------------------
3rdparty/stout/include/stout/windows/os.hpp | 45 +++++++++++-------------
1 file changed, 20 insertions(+), 25 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/mesos/blob/17564c7f/3rdparty/stout/include/stout/windows/os.hpp
----------------------------------------------------------------------
diff --git a/3rdparty/stout/include/stout/windows/os.hpp b/3rdparty/stout/include/stout/windows/os.hpp
index 3713eb6..586c35f 100644
--- a/3rdparty/stout/include/stout/windows/os.hpp
+++ b/3rdparty/stout/include/stout/windows/os.hpp
@@ -659,7 +659,7 @@ inline Try<std::wstring> name_job(pid_t pid) {
// do not inherit this handle.
inline Try<SharedHandle> open_job(
const DWORD desired_access,
- BOOL inherit_handles,
+ const BOOL inherit_handles,
const std::wstring& name)
{
SharedHandle job_handle(
@@ -679,6 +679,20 @@ inline Try<SharedHandle> open_job(
}
+
+inline Try<SharedHandle> open_job(
+ const DWORD desired_access,
+ const BOOL inherit_handles,
+ const pid_t pid)
+{
+ Try<std::wstring> name = os::name_job(pid);
+ if (name.isError()) {
+ return Error(name.error());
+ }
+
+ return open_job(desired_access, inherit_handles, name.get());
+}
+
// `create_job` function creates a named job object using `name`.
// This returns the safe job handle, which closes the job handle
// when destructed. Because the job is destroyed when its last
@@ -732,15 +746,10 @@ inline Try<SharedHandle> create_job(const std::wstring& name)
// https://msdn.microsoft.com/en-us/library/windows/desktop/ms684925(v=vs.85).aspx // NOLINT(whitespace/line_length)
inline Try<JOBOBJECT_BASIC_ACCOUNTING_INFORMATION> get_job_info(pid_t pid)
{
- Try<std::wstring> name = os::name_job(pid);
- if (name.isError()) {
- return Error(name.error());
- }
-
Try<SharedHandle> job_handle = os::open_job(
JOB_OBJECT_QUERY,
false,
- name.get());
+ pid);
if (job_handle.isError()) {
return Error(job_handle.error());
}
@@ -805,15 +814,11 @@ Result<std::set<Process>> _get_job_processes(const SharedHandle& job_handle) {
inline Try<std::set<Process>> get_job_processes(pid_t pid)
{
- Try<std::wstring> name = os::name_job(pid);
- if (name.isError()) {
- return Error(name.error());
- }
-
+ // TODO(andschwa): Overload open_job to use pid.
Try<SharedHandle> job_handle = os::open_job(
JOB_OBJECT_QUERY,
false,
- name.get());
+ pid);
if (job_handle.isError()) {
return Error(job_handle.error());
}
@@ -895,15 +900,10 @@ inline Try<Nothing> set_job_cpu_limit(pid_t pid, double cpus)
control_info.CpuRate = 1;
}
- Try<std::wstring> name = os::name_job(pid);
- if (name.isError()) {
- return Error(name.error());
- }
-
Try<SharedHandle> job_handle = os::open_job(
JOB_OBJECT_SET_ATTRIBUTES,
false,
- name.get());
+ pid);
if (job_handle.isError()) {
return Error(job_handle.error());
}
@@ -933,15 +933,10 @@ inline Try<Nothing> set_job_mem_limit(pid_t pid, Bytes limit)
info.BasicLimitInformation.LimitFlags = JOB_OBJECT_LIMIT_JOB_MEMORY;
info.JobMemoryLimit = limit.bytes();
- Try<std::wstring> name = os::name_job(pid);
- if (name.isError()) {
- return Error(name.error());
- }
-
Try<SharedHandle> job_handle = os::open_job(
JOB_OBJECT_SET_ATTRIBUTES,
false,
- name.get());
+ pid);
if (job_handle.isError()) {
return Error(job_handle.error());
}