Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
Replaced BeOS mutex implementation. Now all platforms have recursive …
…mutexes.
  • Loading branch information
icculus committed Mar 24, 2007
1 parent 4396d7b commit 63f9a21
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 20 deletions.
5 changes: 5 additions & 0 deletions CHANGELOG.txt
Expand Up @@ -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
Expand Down
25 changes: 5 additions & 20 deletions platform/beos.cpp
Expand Up @@ -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>
Expand Down Expand Up @@ -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 */


Expand Down

0 comments on commit 63f9a21

Please sign in to comment.