Skip to content

Commit 3230496

Browse files
committed
cleanup job
1 parent e1f8f32 commit 3230496

File tree

2 files changed

+17
-23
lines changed

2 files changed

+17
-23
lines changed

src/windows/constrain.rs

Lines changed: 15 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,11 @@
33
use std::{ffi::OsString, os::windows::ffi::OsStrExt};
44

55
use crate::{
6-
windows::{Cvt, Error},
6+
windows::{util::OwnedHandle, Cvt, Error},
77
ResourceUsageData,
88
};
99

1010
use winapi::um::{
11-
handleapi::CloseHandle,
1211
jobapi2::{
1312
AssignProcessToJobObject, CreateJobObjectW, QueryInformationJobObject,
1413
SetInformationJobObject, TerminateJobObject,
@@ -25,19 +24,17 @@ use winapi::um::{
2524
/// Responsible for resource isolation & adding & killing
2625
#[derive(Debug)]
2726
pub(crate) struct Job {
28-
handle: HANDLE,
27+
handle: OwnedHandle,
2928
}
3029

31-
unsafe impl Send for Job {}
32-
unsafe impl Sync for Job {}
33-
3430
impl Job {
3531
pub(crate) fn new(jail_id: &str) -> Result<Self, Error> {
3632
let name: OsString = format!("minion-sandbox-job-{}", jail_id).into();
3733
let name: Vec<u16> = name.encode_wide().collect();
3834
let handle = unsafe {
3935
Cvt::nonzero(CreateJobObjectW(std::ptr::null_mut(), name.as_ptr()) as i32)? as HANDLE
4036
};
37+
let handle = OwnedHandle::new(handle);
4138
Ok(Self { handle })
4239
}
4340
pub(crate) fn enable_resource_limits(
@@ -60,7 +57,7 @@ impl Job {
6057
| JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE;
6158
unsafe {
6259
Cvt::nonzero(SetInformationJobObject(
63-
self.handle,
60+
self.handle.as_raw(),
6461
JobObjectExtendedLimitInformation,
6562
(&mut info as *mut JOBOBJECT_EXTENDED_LIMIT_INFORMATION).cast(),
6663
sizeof::<JOBOBJECT_EXTENDED_LIMIT_INFORMATION>(),
@@ -69,16 +66,22 @@ impl Job {
6966
Ok(())
7067
}
7168
pub(crate) fn kill(&self) -> Result<(), Error> {
72-
unsafe { Cvt::nonzero(TerminateJobObject(self.handle, 0xDEADBEEF)).map(|_| ()) }
69+
unsafe { Cvt::nonzero(TerminateJobObject(self.handle.as_raw(), 0xDEADBEEF)).map(|_| ()) }
7370
}
7471
pub(crate) fn add_process(&self, process_handle: HANDLE) -> Result<(), Error> {
75-
unsafe { Cvt::nonzero(AssignProcessToJobObject(self.handle, process_handle)).map(|_| ()) }
72+
unsafe {
73+
Cvt::nonzero(AssignProcessToJobObject(
74+
self.handle.as_raw(),
75+
process_handle,
76+
))
77+
.map(|_| ())
78+
}
7679
}
7780
pub(crate) fn resource_usage(&self) -> Result<crate::ResourceUsageData, Error> {
7881
let cpu = unsafe {
7982
let mut info: JOBOBJECT_BASIC_ACCOUNTING_INFORMATION = std::mem::zeroed();
8083
Cvt::nonzero(QueryInformationJobObject(
81-
self.handle,
84+
self.handle.as_raw(),
8285
JobObjectBasicAccountingInformation,
8386
(&mut info as *mut JOBOBJECT_BASIC_ACCOUNTING_INFORMATION).cast(),
8487
sizeof::<JOBOBJECT_BASIC_ACCOUNTING_INFORMATION>(),
@@ -92,7 +95,7 @@ impl Job {
9295
let memory = unsafe {
9396
let mut info: JOBOBJECT_EXTENDED_LIMIT_INFORMATION = std::mem::zeroed();
9497
Cvt::nonzero(QueryInformationJobObject(
95-
self.handle,
98+
self.handle.as_raw(),
9699
JobObjectExtendedLimitInformation,
97100
(&mut info as *mut JOBOBJECT_EXTENDED_LIMIT_INFORMATION).cast(),
98101
sizeof::<JOBOBJECT_EXTENDED_LIMIT_INFORMATION>(),
@@ -110,7 +113,7 @@ impl Job {
110113
unsafe {
111114
let mut info: JOBOBJECT_LIMIT_VIOLATION_INFORMATION = std::mem::zeroed();
112115
Cvt::nonzero(QueryInformationJobObject(
113-
self.handle,
116+
self.handle.as_raw(),
114117
JobObjectLimitViolationInformation,
115118
(&mut info as *mut JOBOBJECT_LIMIT_VIOLATION_INFORMATION).cast(),
116119
sizeof::<JOBOBJECT_LIMIT_VIOLATION_INFORMATION>(),
@@ -127,14 +130,6 @@ impl Job {
127130
}
128131
}
129132

130-
impl Drop for Job {
131-
fn drop(&mut self) {
132-
unsafe {
133-
CloseHandle(self.handle);
134-
}
135-
}
136-
}
137-
138133
fn sizeof<T>() -> u32 {
139134
let sz = std::mem::size_of::<T>();
140135
assert!(sz <= (u32::max_value() as usize));

src/windows/spawn.rs

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,8 @@ use winapi::{
2121
handleapi::INVALID_HANDLE_VALUE,
2222
minwinbase::SECURITY_ATTRIBUTES,
2323
processthreadsapi::{
24-
CreateProcessW, DeleteProcThreadAttributeList,
25-
InitializeProcThreadAttributeList, UpdateProcThreadAttribute, PROCESS_INFORMATION,
26-
PROC_THREAD_ATTRIBUTE_LIST,
24+
CreateProcessW, DeleteProcThreadAttributeList, InitializeProcThreadAttributeList,
25+
UpdateProcThreadAttribute, PROCESS_INFORMATION, PROC_THREAD_ATTRIBUTE_LIST,
2726
},
2827
winbase::{
2928
CreateFileMappingA, CREATE_UNICODE_ENVIRONMENT, EXTENDED_STARTUPINFO_PRESENT,

0 commit comments

Comments
 (0)