Skip to content

Commit 87bcd5a

Browse files
committed
cleanup job
1 parent 47c09f6 commit 87bcd5a

File tree

1 file changed

+9
-20
lines changed

1 file changed

+9
-20
lines changed

src/windows/constrain.rs

Lines changed: 9 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,16 @@ 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 { Cvt::nonzero(AssignProcessToJobObject(self.handle.as_raw(), process_handle)).map(|_| ()) }
7673
}
7774
pub(crate) fn resource_usage(&self) -> Result<crate::ResourceUsageData, Error> {
7875
let cpu = unsafe {
7976
let mut info: JOBOBJECT_BASIC_ACCOUNTING_INFORMATION = std::mem::zeroed();
8077
Cvt::nonzero(QueryInformationJobObject(
81-
self.handle,
78+
self.handle.as_raw(),
8279
JobObjectBasicAccountingInformation,
8380
(&mut info as *mut JOBOBJECT_BASIC_ACCOUNTING_INFORMATION).cast(),
8481
sizeof::<JOBOBJECT_BASIC_ACCOUNTING_INFORMATION>(),
@@ -92,7 +89,7 @@ impl Job {
9289
let memory = unsafe {
9390
let mut info: JOBOBJECT_EXTENDED_LIMIT_INFORMATION = std::mem::zeroed();
9491
Cvt::nonzero(QueryInformationJobObject(
95-
self.handle,
92+
self.handle.as_raw(),
9693
JobObjectExtendedLimitInformation,
9794
(&mut info as *mut JOBOBJECT_EXTENDED_LIMIT_INFORMATION).cast(),
9895
sizeof::<JOBOBJECT_EXTENDED_LIMIT_INFORMATION>(),
@@ -110,7 +107,7 @@ impl Job {
110107
unsafe {
111108
let mut info: JOBOBJECT_LIMIT_VIOLATION_INFORMATION = std::mem::zeroed();
112109
Cvt::nonzero(QueryInformationJobObject(
113-
self.handle,
110+
self.handle.as_raw(),
114111
JobObjectLimitViolationInformation,
115112
(&mut info as *mut JOBOBJECT_LIMIT_VIOLATION_INFORMATION).cast(),
116113
sizeof::<JOBOBJECT_LIMIT_VIOLATION_INFORMATION>(),
@@ -127,14 +124,6 @@ impl Job {
127124
}
128125
}
129126

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

0 commit comments

Comments
 (0)