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 ***************************************************************************/
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");
33 void PageInfo::setPageAsUsed(size_t offset
)
35 int ret
= Mutex::CAS(&isUsed_
, isUsed_
,1);
36 if (ret
!= 0) printError(ErrSysFatal
, "Fatal:CAS Failed");
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");
47 ret
= Mutex::CASL((long*)&nextPageAfterMerge_
,
48 (long) nextPageAfterMerge_
,
49 (long)(((char*)this)+ offset
));
50 if (ret
!= 0) printError(ErrSysFatal
, "Fatal:CAS Failed");
54 void PageInfo::setFirstPageAsUsed()
56 int ret
= Mutex::CASGen(&isUsed_
, 0,1);
57 if (ret
!= 0) printError(ErrSysFatal
, "Fatal:CAS Failed");
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");
65 ret
= Mutex::CASL((long*)&nextPage_
, (long)nextPage_
, 0);
66 if (ret
!= 0) printError(ErrSysFatal
, "Fatal:CAS Failed");