From f92b4c784930c32f7f614f93f5eb948c9a1de2a4 Mon Sep 17 00:00:00 2001 From: gingerBill Date: Sat, 27 Jun 2020 11:26:38 +0100 Subject: [PATCH] Update `sys/unix`; Rename `thread.create_and_start` --- core/sys/unix/pthread_darwin.odin | 6 ++++++ core/sys/unix/pthread_linux.odin | 4 ++++ core/sys/unix/pthread_unix.odin | 3 ++- core/thread/thread.odin | 3 ++- 4 files changed, 14 insertions(+), 2 deletions(-) diff --git a/core/sys/unix/pthread_darwin.odin b/core/sys/unix/pthread_darwin.odin index 97a750b9b..9de64ead4 100644 --- a/core/sys/unix/pthread_darwin.odin +++ b/core/sys/unix/pthread_darwin.odin @@ -78,3 +78,9 @@ PTHREAD_INHERIT_SCHED :: 1; PTHREAD_EXPLICIT_SCHED :: 2; PTHREAD_PROCESS_SHARED :: 1; PTHREAD_PROCESS_PRIVATE :: 2; + + +PTHREAD_MUTEX_NORMAL :: 0; +PTHREAD_MUTEX_RECURSIVE :: 1; +PTHREAD_MUTEX_ERRORCHECK :: 2; + diff --git a/core/sys/unix/pthread_linux.odin b/core/sys/unix/pthread_linux.odin index 09d27329c..5edd1ef5a 100644 --- a/core/sys/unix/pthread_linux.odin +++ b/core/sys/unix/pthread_linux.odin @@ -62,6 +62,10 @@ pthread_barrierattr_t :: opaque struct #align 16 { _: [PTHREAD_BARRIERATTR_T_SIZE] c.char, }; +PTHREAD_MUTEX_NORMAL :: 0; +PTHREAD_MUTEX_RECURSIVE :: 1; +PTHREAD_MUTEX_ERRORCHECK :: 2; + // TODO(tetra, 2019-11-01): Maybe make `enum c.int`s for these? PTHREAD_CREATE_JOINABLE :: 0; diff --git a/core/sys/unix/pthread_unix.odin b/core/sys/unix/pthread_unix.odin index 267bd28bc..f28e25676 100644 --- a/core/sys/unix/pthread_unix.odin +++ b/core/sys/unix/pthread_unix.odin @@ -53,7 +53,7 @@ foreign pthread { pthread_attr_getstack :: proc(attrs: ^pthread_attr_t, stack_ptr: ^rawptr, stack_size: ^u64) -> c.int ---; sched_yield :: proc() -> c.int ---; - + } @(default_calling_convention="c") @@ -101,6 +101,7 @@ foreign pthread { pthread_mutexattr_init :: proc(attrs: ^pthread_mutexattr_t) -> c.int ---; pthread_mutexattr_destroy :: proc(attrs: ^pthread_mutexattr_t) -> c.int ---; + pthread_mutexattr_settype :: proc(attrs: ^pthread_mutexattr_t, type: c.int) -> c.int ---; // p-shared = "process-shared" - i.e: is this mutex shared among multiple processes? // values: PTHREAD_PROCESS_PRIVATE, PTHREAD_PROCESS_SHARED diff --git a/core/thread/thread.odin b/core/thread/thread.odin index e38ed303b..77f87caa6 100644 --- a/core/thread/thread.odin +++ b/core/thread/thread.odin @@ -44,8 +44,9 @@ run_with_data :: proc(fn: proc(data: rawptr), data: rawptr, init_context: Maybe( } -run_with_thread_proc :: proc(fn: Thread_Proc, init_context: Maybe(runtime.Context) = nil, priority := Thread_Priority.Normal) { +create_and_start :: proc(fn: Thread_Proc, init_context: Maybe(runtime.Context) = nil, priority := Thread_Priority.Normal) -> ^Thread { t := create(fn, priority); t.init_context = init_context; start(t); + return t; }