*** empty log message ***
[csql.git] / src / storage / PageInfo.cxx
blob9e16a6695fb79e1843a4ae7cc193c44ff649e134
1 /***************************************************************************
2 * Copyright (C) 2007 by www.databasecache.com *
3 * Contact: praba_tuty@databasecache.com *
4 * *
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. *
9 * *
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. *
14 * *
15 ***************************************************************************/
16 #include<Allocator.h>
17 #include<os.h>
18 #include<Config.h>
19 #include<Debug.h>
21 void PageInfo::setPageAsFree()
23 int ret = Mutex::CASGen(&isUsed_, isUsed_, 0);
24 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
25 ret = Mutex::CASGen(&flags , flags, 0);;
26 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
27 ret = Mutex::CASL((long*)&nextPage_, (long)nextPage_, 0);
28 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
29 ret = Mutex::CASL((long*)&nextPageAfterMerge_, (long)nextPageAfterMerge_, 0);
30 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
31 return;
33 void PageInfo::setPageAsUsed(size_t offset)
35 int ret = Mutex::CAS(&isUsed_, isUsed_,1);
36 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
37 InUse flagToSet=0;
38 SETBIT(flagToSet, HAS_SPACE);
39 ret = Mutex::CASGen(&flags , flags, flagToSet);;
40 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
41 ret = Mutex::CASL((long*)&nextPage_, (long)nextPage_, 0);
42 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
43 if (PAGE_SIZE > offset) {
44 ret = Mutex::CASL((long*)&nextPageAfterMerge_, (long)nextPageAfterMerge_, 0);
45 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
46 } else {
47 ret = Mutex::CASL((long*)&nextPageAfterMerge_,
48 (long) nextPageAfterMerge_ ,
49 (long)(((char*)this)+ offset));
50 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
52 return;
54 void PageInfo::setFirstPageAsUsed()
56 int ret = Mutex::CASGen(&isUsed_, 0,1);
57 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
58 InUse flagToSet=0;
59 SETBIT(flagToSet, HAS_SPACE);
60 ret = Mutex::CASGen(&flags , flags, flagToSet);;
61 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
62 ret = Mutex::CASL((long*)&nextPageAfterMerge_, (long)nextPageAfterMerge_, 0);
63 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
64 //nextPage_ = NULL;
65 ret = Mutex::CASL((long*)&nextPage_, (long)nextPage_, 0);
66 if (ret != 0) printError(ErrSysFatal, "Fatal:CAS Failed");
67 return;