(Vita) We can implement mutexes properly for Vita

This commit is contained in:
twinaphex 2015-08-12 14:59:37 +02:00
parent e57202ff90
commit d80b24f380

View File

@ -24,9 +24,13 @@
#ifndef _PSP_PTHREAD_WRAP__ #ifndef _PSP_PTHREAD_WRAP__
#define _PSP_PTHREAD_WRAP__ #define _PSP_PTHREAD_WRAP__
#ifdef VITA
#include <psp2/kernel/threadmgr.h>
#else
#include <pspkernel.h> #include <pspkernel.h>
#include <pspthreadman.h> #include <pspthreadman.h>
#include <pspthreadman_kernel.h> #include <pspthreadman_kernel.h>
#endif
#include <stdio.h> #include <stdio.h>
#include <retro_inline.h> #include <retro_inline.h>
@ -78,24 +82,40 @@ static INLINE int pthread_mutex_init(pthread_mutex_t *mutex,
{ {
sprintf(name_buffer, "0x%08X", (uint32_t) mutex); sprintf(name_buffer, "0x%08X", (uint32_t) mutex);
#ifdef VITA
return *mutex = sceKernelCreateMutex(name_buffer, 0, 0, 0);
#else
return *mutex = sceKernelCreateSema(name_buffer, 0, 1, 1, NULL); return *mutex = sceKernelCreateSema(name_buffer, 0, 1, 1, NULL);
#endif
} }
static INLINE int pthread_mutex_destroy(pthread_mutex_t *mutex) static INLINE int pthread_mutex_destroy(pthread_mutex_t *mutex)
{ {
#ifdef VITA
return sceKernelDeleteMutex(*mutex);
#else
return sceKernelDeleteSema(*mutex); return sceKernelDeleteSema(*mutex);
#endif
} }
static INLINE int pthread_mutex_lock(pthread_mutex_t *mutex) static INLINE int pthread_mutex_lock(pthread_mutex_t *mutex)
{ {
//FIXME: stub #ifdef VITA
return sceKernelLockMutex(*mutex, 1, 0);
#else
/* FIXME: stub */
return 1; return 1;
#endif
} }
static INLINE int pthread_mutex_unlock(pthread_mutex_t *mutex) static INLINE int pthread_mutex_unlock(pthread_mutex_t *mutex)
{ {
//FIXME: stub #ifdef VITA
return sceKernelUnlockMutex(*mutex, 1);
#else
/* FIXME: stub */
return 1; return 1;
#endif
} }