aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLaytan Laats <laytanlaats@hotmail.com>2024-08-04 01:02:05 +0200
committerLaytan Laats <laytanlaats@hotmail.com>2024-08-14 01:44:37 +0200
commita73677d21aaa5bafdaf28bdce152217fcac367d0 (patch)
tree1358e4a2fa3b8cf06212e3696986eb220c72c7fc
parent67ea7bb65a891fe1bc1384199239d82af0032c7b (diff)
os2: nice != priority
-rw-r--r--core/os/os2/process_posix_darwin.odin20
-rw-r--r--core/sys/darwin/proc.odin26
2 files changed, 36 insertions, 10 deletions
diff --git a/core/os/os2/process_posix_darwin.odin b/core/os/os2/process_posix_darwin.odin
index 0c902996b..882170670 100644
--- a/core/os/os2/process_posix_darwin.odin
+++ b/core/os/os2/process_posix_darwin.odin
@@ -22,16 +22,16 @@ foreign lib {
_process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator: runtime.Allocator) -> (info: Process_Info, err: Error) {
info.pid = pid
- get_pidinfo :: proc(pid: int, selection: Process_Info_Fields) -> (ppid: u32, nice: Maybe(i32), uid: posix.uid_t, ok: bool) {
+ get_pidinfo :: proc(pid: int, selection: Process_Info_Fields) -> (ppid: u32, prio: Maybe(i32), uid: posix.uid_t, ok: bool) {
// Short info is enough and requires less permissions if the priority isn't requested.
if .Priority in selection {
- pinfo: darwin.proc_bsdinfo
- ret := darwin.proc_pidinfo(posix.pid_t(pid), .BSDINFO, 0, &pinfo, size_of(pinfo))
+ info: darwin.proc_taskallinfo
+ ret := darwin.proc_pidinfo(posix.pid_t(pid), .TASKALLINFO, 0, &info, size_of(info))
if ret > 0 {
- assert(ret == size_of(pinfo))
- ppid = pinfo.pbi_ppid
- nice = pinfo.pbi_nice
- uid = pinfo.pbi_uid
+ assert(ret == size_of(info))
+ ppid = info.pbsd.pbi_ppid
+ prio = info.ptinfo.pti_priority
+ uid = info.pbsd.pbi_uid
ok = true
return
}
@@ -55,7 +55,7 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator
pidinfo: {
if selection & {.PPid, .Priority, .Username } != {} {
- ppid, mnice, uid, ok := get_pidinfo(pid, selection)
+ ppid, mprio, uid, ok := get_pidinfo(pid, selection)
if !ok {
if err == nil {
err = _get_platform_error()
@@ -68,8 +68,8 @@ _process_info_by_pid :: proc(pid: int, selection: Process_Info_Fields, allocator
info.fields += {.PPid}
}
- if nice, has_nice := mnice.?; has_nice && .Priority in selection {
- info.priority = int(nice)
+ if prio, has_prio := mprio.?; has_prio && .Priority in selection {
+ info.priority = int(prio)
info.fields += {.Priority}
}
diff --git a/core/sys/darwin/proc.odin b/core/sys/darwin/proc.odin
index a49383670..8f7eb1fcb 100644
--- a/core/sys/darwin/proc.odin
+++ b/core/sys/darwin/proc.odin
@@ -98,6 +98,32 @@ vinfo_stat :: struct {
vst_qspare: [2]i64,
}
+proc_taskinfo :: struct {
+ pti_virtual_size: u64 `fmt:"M"`,
+ pti_resident_size: u64 `fmt:"M"`,
+ pti_total_user: u64,
+ pti_total_system: u64,
+ pti_threads_user: u64,
+ pti_threads_system: u64,
+ pti_policy: i32,
+ pti_faults: i32,
+ pti_pageins: i32,
+ pti_cow_faults: i32,
+ pti_messages_sent: i32,
+ pti_messages_received: i32,
+ pti_syscalls_mach: i32,
+ pti_syscalls_unix: i32,
+ pti_csw: i32,
+ pti_threadnum: i32,
+ pti_numrunning: i32,
+ pti_priority: i32,
+}
+
+proc_taskallinfo :: struct {
+ pbsd: proc_bsdinfo,
+ ptinfo: proc_taskinfo,
+}
+
fsid_t :: distinct [2]i32
PBI_Flag_Bits :: enum u32 {