1 /***************************************************************************
2 * Copyright (C) 2007 by www.databasecache.com *
3 * Contact: praba_tuty@databasecache.com *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 ***************************************************************************/
28 //-1 indicates write lock is taken
32 LockInfo() { noOfReaders_
= 0; waitReaders_
= 0; waitWriters_
= 0; }
44 printf("<Lock Node>\n");
45 printf(" <Tuple> %x </Tuple>\n", ptrToTuple_
);
46 printf(" <NoOfReaders> %d </NoOfReaders>\n", lInfo_
.noOfReaders_
);
47 printf(" <WaitReaders> %x </WaitReaders>\n", lInfo_
.waitReaders_
);
48 printf(" <WaitWriters> %x </WaitWriters>\n", lInfo_
.waitWriters_
);
49 printf("</Lock Node>\n");
58 LockListIter(LockHashNode
*head
) { iter
= head
;}
60 friend class LockList
;
68 void print() { node_
->print(); }
71 class DatabaseManagerImpl
;
73 //DatabaseManager has this object and give reference to it to
74 //Table interface and so on.
75 class DllExport LockManager
78 Database
*systemDatabase_
;
82 LockHashNode
* allocLockNode(LockInfo
&info
, void *tuple
, DbRetVal
*rv
);
83 DbRetVal
deallocLockNode(LockHashNode
*head
, Bucket
*bucket
);
84 void deallocLockNode(LockHashNode
*head
);
85 Bucket
* getLockBucket(void *tuple
);
89 LockManager(Database
*sysDb_
);
90 DbRetVal
getSharedLock(void *tuple
, Transaction
**trans
);
91 DbRetVal
getExclusiveLock(void * tuple
, Transaction
**trans
);
92 DbRetVal
releaseLock(void *tuple
);
93 DbRetVal
isExclusiveLocked(void *tuple
, Transaction
**trans
, bool &status
);
94 DbRetVal
getBucketMutex(Bucket
*bucket
, int procslot
);
95 void printUsageStatistics();
96 void printDebugInfo();