Lines Matching refs:mem3
28102 } mem3 = { 97535575 }; variable
28104 #define mem3 GLOBAL(struct Mem3Global, mem3) macro
28111 u32 next = mem3.aPool[i].u.list.next; in memsys3UnlinkFromList()
28112 u32 prev = mem3.aPool[i].u.list.prev; in memsys3UnlinkFromList()
28113 assert( sqlite3_mutex_held(mem3.mutex) ); in memsys3UnlinkFromList()
28117 mem3.aPool[prev].u.list.next = next; in memsys3UnlinkFromList()
28120 mem3.aPool[next].u.list.prev = prev; in memsys3UnlinkFromList()
28122 mem3.aPool[i].u.list.next = 0; in memsys3UnlinkFromList()
28123 mem3.aPool[i].u.list.prev = 0; in memsys3UnlinkFromList()
28132 assert( sqlite3_mutex_held(mem3.mutex) ); in memsys3Unlink()
28133 assert( (mem3.aPool[i-1].u.hdr.size4x & 1)==0 ); in memsys3Unlink()
28135 size = mem3.aPool[i-1].u.hdr.size4x/4; in memsys3Unlink()
28136 assert( size==mem3.aPool[i+size-1].u.hdr.prevSize ); in memsys3Unlink()
28139 memsys3UnlinkFromList(i, &mem3.aiSmall[size-2]); in memsys3Unlink()
28142 memsys3UnlinkFromList(i, &mem3.aiHash[hash]); in memsys3Unlink()
28151 assert( sqlite3_mutex_held(mem3.mutex) ); in memsys3LinkIntoList()
28152 mem3.aPool[i].u.list.next = *pRoot; in memsys3LinkIntoList()
28153 mem3.aPool[i].u.list.prev = 0; in memsys3LinkIntoList()
28155 mem3.aPool[*pRoot].u.list.prev = i; in memsys3LinkIntoList()
28166 assert( sqlite3_mutex_held(mem3.mutex) ); in memsys3Link()
28168 assert( (mem3.aPool[i-1].u.hdr.size4x & 1)==0 ); in memsys3Link()
28169 size = mem3.aPool[i-1].u.hdr.size4x/4; in memsys3Link()
28170 assert( size==mem3.aPool[i+size-1].u.hdr.prevSize ); in memsys3Link()
28173 memsys3LinkIntoList(i, &mem3.aiSmall[size-2]); in memsys3Link()
28176 memsys3LinkIntoList(i, &mem3.aiHash[hash]); in memsys3Link()
28186 if( sqlite3GlobalConfig.bMemstat==0 && mem3.mutex==0 ){ in memsys3Enter()
28187 mem3.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM); in memsys3Enter()
28189 sqlite3_mutex_enter(mem3.mutex); in memsys3Enter()
28192 sqlite3_mutex_leave(mem3.mutex); in memsys3Leave()
28199 if( !mem3.alarmBusy ){ in memsys3OutOfMemory()
28200 mem3.alarmBusy = 1; in memsys3OutOfMemory()
28201 assert( sqlite3_mutex_held(mem3.mutex) ); in memsys3OutOfMemory()
28202 sqlite3_mutex_leave(mem3.mutex); in memsys3OutOfMemory()
28204 sqlite3_mutex_enter(mem3.mutex); in memsys3OutOfMemory()
28205 mem3.alarmBusy = 0; in memsys3OutOfMemory()
28217 assert( sqlite3_mutex_held(mem3.mutex) ); in memsys3Checkout()
28219 assert( mem3.aPool[i-1].u.hdr.size4x/4==nBlock ); in memsys3Checkout()
28220 assert( mem3.aPool[i+nBlock-1].u.hdr.prevSize==nBlock ); in memsys3Checkout()
28221 x = mem3.aPool[i-1].u.hdr.size4x; in memsys3Checkout()
28222 mem3.aPool[i-1].u.hdr.size4x = nBlock*4 | 1 | (x&2); in memsys3Checkout()
28223 mem3.aPool[i+nBlock-1].u.hdr.prevSize = nBlock; in memsys3Checkout()
28224 mem3.aPool[i+nBlock-1].u.hdr.size4x |= 2; in memsys3Checkout()
28225 return &mem3.aPool[i]; in memsys3Checkout()
28234 assert( sqlite3_mutex_held(mem3.mutex) ); in memsys3FromKeyBlk()
28235 assert( mem3.szKeyBlk>=nBlock ); in memsys3FromKeyBlk()
28236 if( nBlock>=mem3.szKeyBlk-1 ){ in memsys3FromKeyBlk()
28238 void *p = memsys3Checkout(mem3.iKeyBlk, mem3.szKeyBlk); in memsys3FromKeyBlk()
28239 mem3.iKeyBlk = 0; in memsys3FromKeyBlk()
28240 mem3.szKeyBlk = 0; in memsys3FromKeyBlk()
28241 mem3.mnKeyBlk = 0; in memsys3FromKeyBlk()
28246 newi = mem3.iKeyBlk + mem3.szKeyBlk - nBlock; in memsys3FromKeyBlk()
28247 assert( newi > mem3.iKeyBlk+1 ); in memsys3FromKeyBlk()
28248 mem3.aPool[mem3.iKeyBlk+mem3.szKeyBlk-1].u.hdr.prevSize = nBlock; in memsys3FromKeyBlk()
28249 mem3.aPool[mem3.iKeyBlk+mem3.szKeyBlk-1].u.hdr.size4x |= 2; in memsys3FromKeyBlk()
28250 mem3.aPool[newi-1].u.hdr.size4x = nBlock*4 + 1; in memsys3FromKeyBlk()
28251 mem3.szKeyBlk -= nBlock; in memsys3FromKeyBlk()
28252 mem3.aPool[newi-1].u.hdr.prevSize = mem3.szKeyBlk; in memsys3FromKeyBlk()
28253 x = mem3.aPool[mem3.iKeyBlk-1].u.hdr.size4x & 2; in memsys3FromKeyBlk()
28254 mem3.aPool[mem3.iKeyBlk-1].u.hdr.size4x = mem3.szKeyBlk*4 | x; in memsys3FromKeyBlk()
28255 if( mem3.szKeyBlk < mem3.mnKeyBlk ){ in memsys3FromKeyBlk()
28256 mem3.mnKeyBlk = mem3.szKeyBlk; in memsys3FromKeyBlk()
28258 return (void*)&mem3.aPool[newi]; in memsys3FromKeyBlk()
28281 assert( sqlite3_mutex_held(mem3.mutex) ); in memsys3Merge()
28283 iNext = mem3.aPool[i].u.list.next; in memsys3Merge()
28284 size = mem3.aPool[i-1].u.hdr.size4x; in memsys3Merge()
28288 assert( i > mem3.aPool[i-1].u.hdr.prevSize ); in memsys3Merge()
28289 prev = i - mem3.aPool[i-1].u.hdr.prevSize; in memsys3Merge()
28291 iNext = mem3.aPool[prev].u.list.next; in memsys3Merge()
28295 x = mem3.aPool[prev-1].u.hdr.size4x & 2; in memsys3Merge()
28296 mem3.aPool[prev-1].u.hdr.size4x = size*4 | x; in memsys3Merge()
28297 mem3.aPool[prev+size-1].u.hdr.prevSize = size; in memsys3Merge()
28303 if( size>mem3.szKeyBlk ){ in memsys3Merge()
28304 mem3.iKeyBlk = i; in memsys3Merge()
28305 mem3.szKeyBlk = size; in memsys3Merge()
28322 assert( sqlite3_mutex_held(mem3.mutex) ); in memsys3MallocUnsafe()
28337 i = mem3.aiSmall[nBlock-2]; in memsys3MallocUnsafe()
28339 memsys3UnlinkFromList(i, &mem3.aiSmall[nBlock-2]); in memsys3MallocUnsafe()
28344 for(i=mem3.aiHash[hash]; i>0; i=mem3.aPool[i].u.list.next){ in memsys3MallocUnsafe()
28345 if( mem3.aPool[i-1].u.hdr.size4x/4==nBlock ){ in memsys3MallocUnsafe()
28346 memsys3UnlinkFromList(i, &mem3.aiHash[hash]); in memsys3MallocUnsafe()
28356 if( mem3.szKeyBlk>=nBlock ){ in memsys3MallocUnsafe()
28368 for(toFree=nBlock*16; toFree<(mem3.nPool*16); toFree *= 2){ in memsys3MallocUnsafe()
28370 if( mem3.iKeyBlk ){ in memsys3MallocUnsafe()
28371 memsys3Link(mem3.iKeyBlk); in memsys3MallocUnsafe()
28372 mem3.iKeyBlk = 0; in memsys3MallocUnsafe()
28373 mem3.szKeyBlk = 0; in memsys3MallocUnsafe()
28376 memsys3Merge(&mem3.aiHash[i]); in memsys3MallocUnsafe()
28379 memsys3Merge(&mem3.aiSmall[i]); in memsys3MallocUnsafe()
28381 if( mem3.szKeyBlk ){ in memsys3MallocUnsafe()
28382 memsys3Unlink(mem3.iKeyBlk); in memsys3MallocUnsafe()
28383 if( mem3.szKeyBlk>=nBlock ){ in memsys3MallocUnsafe()
28403 assert( sqlite3_mutex_held(mem3.mutex) ); in memsys3FreeUnsafe()
28404 assert( p>mem3.aPool && p<&mem3.aPool[mem3.nPool] ); in memsys3FreeUnsafe()
28405 i = p - mem3.aPool; in memsys3FreeUnsafe()
28406 assert( (mem3.aPool[i-1].u.hdr.size4x&1)==1 ); in memsys3FreeUnsafe()
28407 size = mem3.aPool[i-1].u.hdr.size4x/4; in memsys3FreeUnsafe()
28408 assert( i+size<=mem3.nPool+1 ); in memsys3FreeUnsafe()
28409 mem3.aPool[i-1].u.hdr.size4x &= ~1; in memsys3FreeUnsafe()
28410 mem3.aPool[i+size-1].u.hdr.prevSize = size; in memsys3FreeUnsafe()
28411 mem3.aPool[i+size-1].u.hdr.size4x &= ~2; in memsys3FreeUnsafe()
28415 if( mem3.iKeyBlk ){ in memsys3FreeUnsafe()
28416 while( (mem3.aPool[mem3.iKeyBlk-1].u.hdr.size4x&2)==0 ){ in memsys3FreeUnsafe()
28417 size = mem3.aPool[mem3.iKeyBlk-1].u.hdr.prevSize; in memsys3FreeUnsafe()
28418 mem3.iKeyBlk -= size; in memsys3FreeUnsafe()
28419 mem3.szKeyBlk += size; in memsys3FreeUnsafe()
28420 memsys3Unlink(mem3.iKeyBlk); in memsys3FreeUnsafe()
28421 x = mem3.aPool[mem3.iKeyBlk-1].u.hdr.size4x & 2; in memsys3FreeUnsafe()
28422 mem3.aPool[mem3.iKeyBlk-1].u.hdr.size4x = mem3.szKeyBlk*4 | x; in memsys3FreeUnsafe()
28423 mem3.aPool[mem3.iKeyBlk+mem3.szKeyBlk-1].u.hdr.prevSize = mem3.szKeyBlk; in memsys3FreeUnsafe()
28425 x = mem3.aPool[mem3.iKeyBlk-1].u.hdr.size4x & 2; in memsys3FreeUnsafe()
28426 while( (mem3.aPool[mem3.iKeyBlk+mem3.szKeyBlk-1].u.hdr.size4x&1)==0 ){ in memsys3FreeUnsafe()
28427 memsys3Unlink(mem3.iKeyBlk+mem3.szKeyBlk); in memsys3FreeUnsafe()
28428 mem3.szKeyBlk += mem3.aPool[mem3.iKeyBlk+mem3.szKeyBlk-1].u.hdr.size4x/4; in memsys3FreeUnsafe()
28429 mem3.aPool[mem3.iKeyBlk-1].u.hdr.size4x = mem3.szKeyBlk*4 | x; in memsys3FreeUnsafe()
28430 mem3.aPool[mem3.iKeyBlk+mem3.szKeyBlk-1].u.hdr.prevSize = mem3.szKeyBlk; in memsys3FreeUnsafe()
28523 mem3.aPool = (Mem3Block *)sqlite3GlobalConfig.pHeap; in memsys3Init()
28524 mem3.nPool = (sqlite3GlobalConfig.nHeap / sizeof(Mem3Block)) - 2; in memsys3Init()
28527 mem3.szKeyBlk = mem3.nPool; in memsys3Init()
28528 mem3.mnKeyBlk = mem3.szKeyBlk; in memsys3Init()
28529 mem3.iKeyBlk = 1; in memsys3Init()
28530 mem3.aPool[0].u.hdr.size4x = (mem3.szKeyBlk<<2) + 2; in memsys3Init()
28531 mem3.aPool[mem3.nPool].u.hdr.prevSize = mem3.nPool; in memsys3Init()
28532 mem3.aPool[mem3.nPool].u.hdr.size4x = 1; in memsys3Init()
28542 mem3.mutex = 0; in memsys3Shutdown()
28569 for(i=1; i<=mem3.nPool; i+=size/4){ in sqlite3Memsys3Dump()
28570 size = mem3.aPool[i-1].u.hdr.size4x; in sqlite3Memsys3Dump()
28572 fprintf(out, "%p size error\n", &mem3.aPool[i]); in sqlite3Memsys3Dump()
28576 if( (size&1)==0 && mem3.aPool[i+size/4-1].u.hdr.prevSize!=size/4 ){ in sqlite3Memsys3Dump()
28577 fprintf(out, "%p tail size does not match\n", &mem3.aPool[i]); in sqlite3Memsys3Dump()
28581 if( ((mem3.aPool[i+size/4-1].u.hdr.size4x&2)>>1)!=(size&1) ){ in sqlite3Memsys3Dump()
28582 fprintf(out, "%p tail checkout bit is incorrect\n", &mem3.aPool[i]); in sqlite3Memsys3Dump()
28587 fprintf(out, "%p %6d bytes checked out\n", &mem3.aPool[i], (size/4)*8-8); in sqlite3Memsys3Dump()
28589 fprintf(out, "%p %6d bytes free%s\n", &mem3.aPool[i], (size/4)*8-8, in sqlite3Memsys3Dump()
28590 i==mem3.iKeyBlk ? " **key**" : ""); in sqlite3Memsys3Dump()
28594 if( mem3.aiSmall[i]==0 ) continue; in sqlite3Memsys3Dump()
28596 for(j = mem3.aiSmall[i]; j>0; j=mem3.aPool[j].u.list.next){ in sqlite3Memsys3Dump()
28597 fprintf(out, " %p(%d)", &mem3.aPool[j], in sqlite3Memsys3Dump()
28598 (mem3.aPool[j-1].u.hdr.size4x/4)*8-8); in sqlite3Memsys3Dump()
28603 if( mem3.aiHash[i]==0 ) continue; in sqlite3Memsys3Dump()
28605 for(j = mem3.aiHash[i]; j>0; j=mem3.aPool[j].u.list.next){ in sqlite3Memsys3Dump()
28606 fprintf(out, " %p(%d)", &mem3.aPool[j], in sqlite3Memsys3Dump()
28607 (mem3.aPool[j-1].u.hdr.size4x/4)*8-8); in sqlite3Memsys3Dump()
28611 fprintf(out, "key=%d\n", mem3.iKeyBlk); in sqlite3Memsys3Dump()
28612 fprintf(out, "nowUsed=%d\n", mem3.nPool*8 - mem3.szKeyBlk*8); in sqlite3Memsys3Dump()
28613 fprintf(out, "mxUsed=%d\n", mem3.nPool*8 - mem3.mnKeyBlk*8); in sqlite3Memsys3Dump()
28614 sqlite3_mutex_leave(mem3.mutex); in sqlite3Memsys3Dump()