Replaced BeOS mutex implementation. Now all platforms have recursive mutexes.
This commit is contained in:
parent
4396d7b3ba
commit
63f9a21c44
|
@ -2,6 +2,11 @@
|
|||
* CHANGELOG.
|
||||
*/
|
||||
|
||||
03242007 - Replaced BeOS semaphores with BLockers for the mutex implementation.
|
||||
It's much simpler, it has "benaphores" built in behind the scenes
|
||||
for faster performance, and it's recursive...also, we were
|
||||
previously setting the PhysicsFS error state if BeOS mutex grabbing
|
||||
failed (a big no no!), and that's now fixed. Good wins all around.
|
||||
03222007 - Replaced some Malloc and all the alloca() calls with
|
||||
__PHYSFS_smallAlloc(), which will stack allocate small (128 or
|
||||
less bytes) blocks and Malloc the rest...naturally these now have
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include <be/storage/Path.h>
|
||||
#include <be/kernel/fs_info.h>
|
||||
#include <be/device/scsi.h>
|
||||
#include <be/support/Locker.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
@ -204,43 +205,27 @@ char *__PHYSFS_platformCurrentDir(void)
|
|||
} /* __PHYSFS_platformCurrentDir */
|
||||
|
||||
|
||||
/* !!! FIXME: semaphores are not mutexes... */
|
||||
void *__PHYSFS_platformCreateMutex(void)
|
||||
{
|
||||
sem_id *retval = (sem_id *) allocator.Malloc(sizeof (sem_id));
|
||||
sem_id rc;
|
||||
|
||||
BAIL_IF_MACRO(retval == NULL, ERR_OUT_OF_MEMORY, NULL);
|
||||
rc = create_sem(1, "PhysicsFS semaphore");
|
||||
if (rc < B_OK)
|
||||
{
|
||||
allocator.Free(retval);
|
||||
BAIL_MACRO(strerror(rc), NULL);
|
||||
} // if
|
||||
|
||||
*retval = rc;
|
||||
return(retval);
|
||||
return(new BLocker("PhysicsFS lock", true));
|
||||
} /* __PHYSFS_platformCreateMutex */
|
||||
|
||||
|
||||
void __PHYSFS_platformDestroyMutex(void *mutex)
|
||||
{
|
||||
delete_sem( *((sem_id *) mutex) );
|
||||
allocator.Free(mutex);
|
||||
delete ((BLocker *) mutex);
|
||||
} /* __PHYSFS_platformDestroyMutex */
|
||||
|
||||
|
||||
int __PHYSFS_platformGrabMutex(void *mutex)
|
||||
{
|
||||
status_t rc = acquire_sem(*((sem_id *) mutex));
|
||||
BAIL_IF_MACRO(rc < B_OK, strerror(rc), 0);
|
||||
return(1);
|
||||
return ((BLocker *) mutex)->Lock() ? 1 : 0;
|
||||
} /* __PHYSFS_platformGrabMutex */
|
||||
|
||||
|
||||
void __PHYSFS_platformReleaseMutex(void *mutex)
|
||||
{
|
||||
release_sem(*((sem_id *) mutex));
|
||||
((BLocker *) mutex)->Unlock();
|
||||
} /* __PHYSFS_platformReleaseMutex */
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue