Refine ContextManager
- Add isManagingContext API
- Remove global lock and global variable (use Singleton instead)
- Encapsulate getSlotIndexFromAddress API
- Extract configurable define to Config.h
diff --git a/lib/bcc/CacheReader.cpp b/lib/bcc/CacheReader.cpp
index a820053..7288b19 100644
--- a/lib/bcc/CacheReader.cpp
+++ b/lib/bcc/CacheReader.cpp
@@ -101,7 +101,7 @@
mFileSize = stfile.st_size;
if (mFileSize < (off_t)sizeof(OBCC_Header) ||
- mFileSize < (off_t)BCC_CONTEXT_SIZE) {
+ mFileSize < (off_t)ContextManager::ContextSize) {
LOGE("Cache file is too small to be correct.\n");
return false;
}
@@ -215,7 +215,8 @@
#undef CHECK_SECTION_OFFSET
if (mFileSize < mpHeader->context_offset ||
- mFileSize < mpHeader->context_offset + BCC_CONTEXT_SIZE) {
+ mFileSize < (off_t)mpHeader->context_offset +
+ (off_t)ContextManager::ContextSize) {
LOGE("context section overflow.\n");
return false;
}
@@ -410,9 +411,10 @@
bool CacheReader::readContext() {
- mpResult->mContext = allocateContext(mpHeader->context_cached_addr,
- mFile->getFD(),
- mpHeader->context_offset);
+ mpResult->mContext =
+ ContextManager::get().allocateContext(mpHeader->context_cached_addr,
+ mFile->getFD(),
+ mpHeader->context_offset);
if (!mpResult->mContext) {
// Unable to allocate at cached address. Give up.
@@ -431,7 +433,7 @@
uint32_t sum = mpHeader->context_parity_checksum;
uint32_t *ptr = reinterpret_cast<uint32_t *>(mpResult->mContext);
- for (size_t i = 0; i < BCC_CONTEXT_SIZE / sizeof(uint32_t); ++i) {
+ for (size_t i = 0; i < ContextManager::ContextSize / sizeof(uint32_t); ++i) {
sum ^= *ptr++;
}