#include "../../SDL_internal.h"
#include <e32std.h>
#include "SDL_thread.h"
#include "SDL_systhread_c.h"
struct SDL_mutex
{
TInt handle;
};
extern TInt CreateUnique(TInt (*aFunc)(const TDesC& aName, TAny*, TAny*), TAny*, TAny*);
static TInt NewMutex(const TDesC& aName, TAny* aPtr1, TAny*)
{
return ((RMutex*)aPtr1)->CreateGlobal(aName);
}
SDL_mutex *
SDL_CreateMutex(void)
{
RMutex rmutex;
TInt status = CreateUnique(NewMutex, &rmutex, NULL);
if(status != KErrNone)
{
SDL_SetError("Couldn't create mutex.");
}
SDL_mutex* mutex = new SDL_mutex;
mutex->handle = rmutex.Handle();
return(mutex);
}
void
SDL_DestroyMutex(SDL_mutex * mutex)
{
if (mutex)
{
RMutex rmutex;
rmutex.SetHandle(mutex->handle);
rmutex.Signal();
rmutex.Close();
delete(mutex);
mutex = NULL;
}
}
#if 0#endif
int
SDL_LockMutex(SDL_mutex * mutex)
{
if (mutex == NULL)
{
return SDL_SetError("Passed a NULL mutex.");
}
RMutex rmutex;
rmutex.SetHandle(mutex->handle);
rmutex.Wait();
return(0);
}
int
SDL_UnlockMutex(SDL_mutex * mutex)
{
if ( mutex == NULL )
{
return SDL_SetError("Passed a NULL mutex.");
}
RMutex rmutex;
rmutex.SetHandle(mutex->handle);
rmutex.Signal();
return(0);
}