diff options
Diffstat (limited to 'src/libPThread')
| -rw-r--r-- | src/libPThread/PThreadKit/Thread.h | 11 | ||||
| -rw-r--r-- | src/libPThread/src/Thread.cpp | 16 |
2 files changed, 16 insertions, 11 deletions
diff --git a/src/libPThread/PThreadKit/Thread.h b/src/libPThread/PThreadKit/Thread.h index 5282a623..de8efe8a 100644 --- a/src/libPThread/PThreadKit/Thread.h +++ b/src/libPThread/PThreadKit/Thread.h @@ -12,11 +12,12 @@ #define PTHREAD_UNSAFE __THREAD_UNSAFE #define PTHREAD_SAFE __THREAD_SAFE -PTHREAD_SAFE SInt32 pthread_create(_Output ThreadRef* thread, VoidPtr attr, VoidPtr (*start_routine)(VoidPtr), VoidPtr arg); -PTHREAD_SAFE SInt32 pthread_join(ThreadRef thread, VoidPtr* retval); -PTHREAD_SAFE SInt32 pthread_exit(SInt32 retval); -PTHREAD_SAFE SInt32 pthread_detach(ThreadRef thread); +PTHREAD_SAFE SInt32 pthread_create(_Output ThreadRef* thread, VoidPtr attr, + VoidPtr (*start_routine)(VoidPtr), VoidPtr arg); +PTHREAD_SAFE SInt32 pthread_join(ThreadRef thread, VoidPtr* retval); +PTHREAD_SAFE SInt32 pthread_exit(SInt32 retval); +PTHREAD_SAFE SInt32 pthread_detach(ThreadRef thread); PTHREAD_SAFE ThreadRef pthread_self(Void); -PTHREAD_SAFE SInt32 pthread_yield(void); +PTHREAD_SAFE SInt32 pthread_yield(void); #endif // LIBPOSIX_POSIXKIT_THREAD_H diff --git a/src/libPThread/src/Thread.cpp b/src/libPThread/src/Thread.cpp index 5a351be8..c1799d9c 100644 --- a/src/libPThread/src/Thread.cpp +++ b/src/libPThread/src/Thread.cpp @@ -22,21 +22,25 @@ PTHREAD_SAFE SInt32 pthread_exit(SInt32 retval) { } PTHREAD_SAFE SInt32 pthread_join(ThreadRef thread, VoidPtr* retval) { - SInt32* ret = (SInt32*)retval; - *ret = ThrJoinThread(thread); + SInt32* ret = (SInt32*) retval; + if (!ret) return -1; + + *ret = ThrJoinThread(thread); return 0; } -PTHREAD_SAFE SInt32 pthread_create(_Output ThreadRef* thread, VoidPtr attr, VoidPtr (*start_routine)(VoidPtr), VoidPtr arg) { +PTHREAD_SAFE SInt32 pthread_create(_Output ThreadRef* thread, VoidPtr attr, + VoidPtr (*start_routine)(VoidPtr), VoidPtr arg) { LIBSYS_UNUSED(attr); - /// @note passing zero means you'd have to read the argv until you hit a nullptr. - ThreadRef thrd = ThrCreateThread("pthread_thread", (ThrProcKind)start_routine, 0, arg, 0); + if (!attr || !thread || !arg || !start_routine) return -1; + + /// @note passing zero means you'd have to read the argv until you hit a nullptr. + ThreadRef thrd = ThrCreateThread("pthread_thread", (ThrProcKind) start_routine, 0, arg, 0); if (!thrd) return -1; *thread = thrd; return 0; } - |
