#[derive(Debug, Copy, Clone, Eq, PartialEq, Hash)]
#[derive(Deserialize, Serialize)]
#[serde(deny_unknown_fields)]
pub enum OutOfMemoryAdjustment
{
MoreLikely(MoreLikelyAdjustment),
Neither,
LessLikely(LessLikelyAdjustment),
Exempt,
}
impl Default for OutOfMemoryAdjustment
{
#[inline(always)]
fn default() -> Self
{
OutOfMemoryAdjustment::Neither
}
}
impl PartialOrd for OutOfMemoryAdjustment
{
#[inline(always)]
fn partial_cmp(&self, right: &Self) -> Option<Ordering>
{
Some(self.cmp(right))
}
}
impl Ord for OutOfMemoryAdjustment
{
#[inline(always)]
fn cmp(&self, right: &Self) -> Ordering
{
(*self).to_value().cmp(&(*right).to_value())
}
}
impl OutOfMemoryAdjustment
{
#[inline(always)]
pub fn set(self, proc_path: &ProcPath, process_identifier: ProcessIdentifierChoice) -> io::Result<()>
{
let value = self.to_value();
if value < 0
{
assert_effective_user_id_is_root("write negative value to `/proc/<PID>/oom_adj`");
}
proc_path.process_file_path(process_identifier, "oom_adj").write_value(UnpaddedDecimalInteger(value))
}
#[inline(always)]
fn to_value(self) -> i8
{
use self::OutOfMemoryAdjustment::*;
match self
{
MoreLikely(adjustment) => adjustment as i8,
Neither => 0,
LessLikely(adjustment) => adjustment as i8,
Exempt => -17,
}
}
}