r866 - in trunk: . platform
DONOTREPLY at icculus.org
DONOTREPLY at icculus.org
Sat Mar 24 01:42:22 EDT 2007
Author: icculus
Date: 2007-03-24 01:42:22 -0400 (Sat, 24 Mar 2007)
New Revision: 866
Modified:
trunk/CHANGELOG.txt
trunk/platform/beos.cpp
Log:
Replaced BeOS mutex implementation. Now all platforms have recursive mutexes.
Modified: trunk/CHANGELOG.txt
===================================================================
--- trunk/CHANGELOG.txt 2007-03-24 05:13:54 UTC (rev 865)
+++ trunk/CHANGELOG.txt 2007-03-24 05:42:22 UTC (rev 866)
@@ -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
Modified: trunk/platform/beos.cpp
===================================================================
--- trunk/platform/beos.cpp 2007-03-24 05:13:54 UTC (rev 865)
+++ trunk/platform/beos.cpp 2007-03-24 05:42:22 UTC (rev 866)
@@ -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 @@
} /* __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 */
More information about the physfs-commits
mailing list