Main Page   Data Structures   File List   Data Fields   Globals   Related Pages  

palm/palm_locking.c

Go to the documentation of this file.
00001 
00006 #include <PalmOS.h>
00007 #include <StringMgr.h>
00008 #include <globals.h>
00009 #include <locking.h>
00010 #include <mem_compat.h>
00011 
00013 static struct tag_lockers {
00014         MemHandle       handle; 
00015         int             lockcount; 
00016         void            **destVar; 
00017 } lockZones[lz_end] = {
00018         { NULL, 0, &worldPtr },
00019         { NULL, 0, &flagPtr },
00020         { NULL, 0, &growablePtr }
00021 };
00022 
00023 void
00024 LockZone(lockZone zone)
00025 {
00026         struct tag_lockers *lock = lockZones + zone;
00027 
00028         lock->lockcount += 1;
00029         if (lock->lockcount == 1) {
00030                 if (lock->handle) {
00031                         MemPtr mp = MemHandleLock(lock->handle);
00032                         *(lock->destVar) = mp;
00033                 }
00034                 lock->handle = NULL;
00035         }
00036 }
00037 
00038 void
00039 ReleaseZone(lockZone zone)
00040 {
00041         struct tag_lockers *lock = lockZones + zone;
00042 
00043         LockZone(zone);
00044         if (*lock->destVar != NULL) {
00045                 MemPtrFree(*lock->destVar);
00046         }
00047         lock->handle = NULL;
00048         lock->destVar = NULL;
00049         lock->lockcount = 0;
00050 }
00051 
00052 void
00053 UnlockZone(lockZone zone)
00054 {
00055         struct tag_lockers *lock = lockZones + zone;
00056         MemPtr mp = *lock->destVar;
00057 
00058         if (mp != NULL) {
00059                 lock->handle = MemPtrRecoverHandle(mp);
00060         }
00061         lock->lockcount -= 1;
00062         if (lock->lockcount == 0) {
00063                 if (mp != NULL)
00064                         MemHandleUnlock(lock->handle);
00065                 *lock->destVar = NULL;
00066         }
00067 
00068         ErrFatalDisplayIf(lock->lockcount < 0,
00069             "Too many unlock calls");
00070 }
00071 

Generated on Mon Aug 30 19:44:15 2004 for pocketcity by doxygen1.2.18