55 lines
1.6 KiB
Rust
55 lines
1.6 KiB
Rust
// GStreamer
|
|
//
|
|
// Copyright (C) 2015-2023 Sebastian Dröge <sebastian@centricular.com>
|
|
//
|
|
// This Source Code Form is subject to the terms of the Mozilla Public License, v2.0.
|
|
// If a copy of the MPL was not distributed with this file, You can obtain one at
|
|
// <https://mozilla.org/MPL/2.0/>.
|
|
//
|
|
// SPDX-License-Identifier: MPL-2.0
|
|
|
|
use crate::error::Error;
|
|
|
|
pub fn set_priority() -> Result<(), Error> {
|
|
#[cfg(unix)]
|
|
{
|
|
use std::io;
|
|
|
|
use crate::{bail, ffi::unix::*};
|
|
|
|
// SAFETY: Setting the process priority can happen at any time. A negative
|
|
// priority require special permissions, which should've been given to the process.
|
|
//
|
|
// On error it returns a negative value.
|
|
unsafe {
|
|
if setpriority(PRIO_PROCESS, 0, -5) < 0 {
|
|
bail!(
|
|
source: io::Error::last_os_error(),
|
|
"Failed to set process priority"
|
|
);
|
|
}
|
|
}
|
|
}
|
|
#[cfg(windows)]
|
|
{
|
|
use std::io;
|
|
|
|
use crate::{bail, ffi::windows::*};
|
|
|
|
// SAFETY: Getting a handle to the current thread is safe at any time
|
|
let thread = unsafe { GetCurrentThread() };
|
|
|
|
// SAFETY: SetThreadPriority() requires a valid thread handle, which was given above,
|
|
// and will return 0 on errors.
|
|
unsafe {
|
|
if SetThreadPriority(thread, THREAD_PRIORITY_TIME_CRITICAL) == 0 {
|
|
bail!(
|
|
source: io::Error::last_os_error(),
|
|
"Failed to set thread priority"
|
|
);
|
|
}
|
|
}
|
|
}
|
|
Ok(())
|
|
}
|