Lines Matching refs:db
335 static int isLookaside(sqlite3 *db, const void *p){ in isLookaside() argument
336 return SQLITE_WITHIN(p, db->lookaside.pStart, db->lookaside.pTrueEnd); in isLookaside()
350 static int lookasideMallocSize(sqlite3 *db, const void *p){ in lookasideMallocSize() argument
352 return p<db->lookaside.pMiddle ? db->lookaside.szTrue : LOOKASIDE_SMALL; in lookasideMallocSize()
354 return db->lookaside.szTrue; in lookasideMallocSize()
357 int sqlite3DbMallocSize(sqlite3 *db, const void *p){ in sqlite3DbMallocSize() argument
360 if( db==0 ){ in sqlite3DbMallocSize()
363 }else if( !isLookaside(db,p) ){ in sqlite3DbMallocSize()
368 if( db ){ in sqlite3DbMallocSize()
369 if( ((uptr)p)<(uptr)(db->lookaside.pTrueEnd) ){ in sqlite3DbMallocSize()
371 if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ in sqlite3DbMallocSize()
372 assert( sqlite3_mutex_held(db->mutex) ); in sqlite3DbMallocSize()
376 if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){ in sqlite3DbMallocSize()
377 assert( sqlite3_mutex_held(db->mutex) ); in sqlite3DbMallocSize()
378 return db->lookaside.szTrue; in sqlite3DbMallocSize()
412 static SQLITE_NOINLINE void measureAllocationSize(sqlite3 *db, void *p){ in measureAllocationSize() argument
413 *db->pnBytesFreed += sqlite3DbMallocSize(db,p); in measureAllocationSize()
421 void sqlite3DbFreeNN(sqlite3 *db, void *p){ in sqlite3DbFreeNN() argument
422 assert( db==0 || sqlite3_mutex_held(db->mutex) ); in sqlite3DbFreeNN()
424 if( db ){ in sqlite3DbFreeNN()
425 if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){ in sqlite3DbFreeNN()
427 if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ in sqlite3DbFreeNN()
429 assert( db->pnBytesFreed==0 ); in sqlite3DbFreeNN()
433 pBuf->pNext = db->lookaside.pSmallFree; in sqlite3DbFreeNN()
434 db->lookaside.pSmallFree = pBuf; in sqlite3DbFreeNN()
438 if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){ in sqlite3DbFreeNN()
440 assert( db->pnBytesFreed==0 ); in sqlite3DbFreeNN()
442 memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */ in sqlite3DbFreeNN()
444 pBuf->pNext = db->lookaside.pFree; in sqlite3DbFreeNN()
445 db->lookaside.pFree = pBuf; in sqlite3DbFreeNN()
449 if( db->pnBytesFreed ){ in sqlite3DbFreeNN()
450 measureAllocationSize(db, p); in sqlite3DbFreeNN()
456 assert( db!=0 || sqlite3MemdebugNoType(p, MEMTYPE_LOOKASIDE) ); in sqlite3DbFreeNN()
460 void sqlite3DbNNFreeNN(sqlite3 *db, void *p){ in sqlite3DbNNFreeNN() argument
461 assert( db!=0 ); in sqlite3DbNNFreeNN()
462 assert( sqlite3_mutex_held(db->mutex) ); in sqlite3DbNNFreeNN()
464 if( ((uptr)p)<(uptr)(db->lookaside.pEnd) ){ in sqlite3DbNNFreeNN()
466 if( ((uptr)p)>=(uptr)(db->lookaside.pMiddle) ){ in sqlite3DbNNFreeNN()
468 assert( db->pnBytesFreed==0 ); in sqlite3DbNNFreeNN()
472 pBuf->pNext = db->lookaside.pSmallFree; in sqlite3DbNNFreeNN()
473 db->lookaside.pSmallFree = pBuf; in sqlite3DbNNFreeNN()
477 if( ((uptr)p)>=(uptr)(db->lookaside.pStart) ){ in sqlite3DbNNFreeNN()
479 assert( db->pnBytesFreed==0 ); in sqlite3DbNNFreeNN()
481 memset(p, 0xaa, db->lookaside.szTrue); /* Trash freed content */ in sqlite3DbNNFreeNN()
483 pBuf->pNext = db->lookaside.pFree; in sqlite3DbNNFreeNN()
484 db->lookaside.pFree = pBuf; in sqlite3DbNNFreeNN()
488 if( db->pnBytesFreed ){ in sqlite3DbNNFreeNN()
489 measureAllocationSize(db, p); in sqlite3DbNNFreeNN()
497 void sqlite3DbFree(sqlite3 *db, void *p){ in sqlite3DbFree() argument
498 assert( db==0 || sqlite3_mutex_held(db->mutex) ); in sqlite3DbFree()
499 if( p ) sqlite3DbFreeNN(db, p); in sqlite3DbFree()
594 void *sqlite3DbMallocZero(sqlite3 *db, u64 n){ in sqlite3DbMallocZero() argument
596 testcase( db==0 ); in sqlite3DbMallocZero()
597 p = sqlite3DbMallocRaw(db, n); in sqlite3DbMallocZero()
606 static SQLITE_NOINLINE void *dbMallocRawFinish(sqlite3 *db, u64 n){ in dbMallocRawFinish() argument
608 assert( db!=0 ); in dbMallocRawFinish()
610 if( !p ) sqlite3OomFault(db); in dbMallocRawFinish()
612 (db->lookaside.bDisable==0) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP); in dbMallocRawFinish()
638 void *sqlite3DbMallocRaw(sqlite3 *db, u64 n){ in sqlite3DbMallocRaw() argument
640 if( db ) return sqlite3DbMallocRawNN(db, n); in sqlite3DbMallocRaw()
645 void *sqlite3DbMallocRawNN(sqlite3 *db, u64 n){ in sqlite3DbMallocRawNN() argument
648 assert( db!=0 ); in sqlite3DbMallocRawNN()
649 assert( sqlite3_mutex_held(db->mutex) ); in sqlite3DbMallocRawNN()
650 assert( db->pnBytesFreed==0 ); in sqlite3DbMallocRawNN()
651 if( n>db->lookaside.sz ){ in sqlite3DbMallocRawNN()
652 if( !db->lookaside.bDisable ){ in sqlite3DbMallocRawNN()
653 db->lookaside.anStat[1]++; in sqlite3DbMallocRawNN()
654 }else if( db->mallocFailed ){ in sqlite3DbMallocRawNN()
657 return dbMallocRawFinish(db, n); in sqlite3DbMallocRawNN()
661 if( (pBuf = db->lookaside.pSmallFree)!=0 ){ in sqlite3DbMallocRawNN()
662 db->lookaside.pSmallFree = pBuf->pNext; in sqlite3DbMallocRawNN()
663 db->lookaside.anStat[0]++; in sqlite3DbMallocRawNN()
665 }else if( (pBuf = db->lookaside.pSmallInit)!=0 ){ in sqlite3DbMallocRawNN()
666 db->lookaside.pSmallInit = pBuf->pNext; in sqlite3DbMallocRawNN()
667 db->lookaside.anStat[0]++; in sqlite3DbMallocRawNN()
672 if( (pBuf = db->lookaside.pFree)!=0 ){ in sqlite3DbMallocRawNN()
673 db->lookaside.pFree = pBuf->pNext; in sqlite3DbMallocRawNN()
674 db->lookaside.anStat[0]++; in sqlite3DbMallocRawNN()
676 }else if( (pBuf = db->lookaside.pInit)!=0 ){ in sqlite3DbMallocRawNN()
677 db->lookaside.pInit = pBuf->pNext; in sqlite3DbMallocRawNN()
678 db->lookaside.anStat[0]++; in sqlite3DbMallocRawNN()
681 db->lookaside.anStat[2]++; in sqlite3DbMallocRawNN()
684 assert( db!=0 ); in sqlite3DbMallocRawNN()
685 assert( sqlite3_mutex_held(db->mutex) ); in sqlite3DbMallocRawNN()
686 assert( db->pnBytesFreed==0 ); in sqlite3DbMallocRawNN()
687 if( db->mallocFailed ){ in sqlite3DbMallocRawNN()
691 return dbMallocRawFinish(db, n); in sqlite3DbMallocRawNN()
695 static SQLITE_NOINLINE void *dbReallocFinish(sqlite3 *db, void *p, u64 n);
701 void *sqlite3DbRealloc(sqlite3 *db, void *p, u64 n){ in sqlite3DbRealloc() argument
702 assert( db!=0 ); in sqlite3DbRealloc()
703 if( p==0 ) return sqlite3DbMallocRawNN(db, n); in sqlite3DbRealloc()
704 assert( sqlite3_mutex_held(db->mutex) ); in sqlite3DbRealloc()
705 if( ((uptr)p)<(uptr)db->lookaside.pEnd ){ in sqlite3DbRealloc()
707 if( ((uptr)p)>=(uptr)db->lookaside.pMiddle ){ in sqlite3DbRealloc()
711 if( ((uptr)p)>=(uptr)db->lookaside.pStart ){ in sqlite3DbRealloc()
712 if( n<=db->lookaside.szTrue ) return p; in sqlite3DbRealloc()
715 return dbReallocFinish(db, p, n); in sqlite3DbRealloc()
717 static SQLITE_NOINLINE void *dbReallocFinish(sqlite3 *db, void *p, u64 n){ in dbReallocFinish() argument
719 assert( db!=0 ); in dbReallocFinish()
721 if( db->mallocFailed==0 ){ in dbReallocFinish()
722 if( isLookaside(db, p) ){ in dbReallocFinish()
723 pNew = sqlite3DbMallocRawNN(db, n); in dbReallocFinish()
725 memcpy(pNew, p, lookasideMallocSize(db, p)); in dbReallocFinish()
726 sqlite3DbFree(db, p); in dbReallocFinish()
734 sqlite3OomFault(db); in dbReallocFinish()
737 (db->lookaside.bDisable==0 ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP)); in dbReallocFinish()
747 void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, u64 n){ in sqlite3DbReallocOrFree() argument
749 pNew = sqlite3DbRealloc(db, p, n); in sqlite3DbReallocOrFree()
751 sqlite3DbFree(db, p); in sqlite3DbReallocOrFree()
763 char *sqlite3DbStrDup(sqlite3 *db, const char *z){ in sqlite3DbStrDup() argument
770 zNew = sqlite3DbMallocRaw(db, n); in sqlite3DbStrDup()
776 char *sqlite3DbStrNDup(sqlite3 *db, const char *z, u64 n){ in sqlite3DbStrNDup() argument
778 assert( db!=0 ); in sqlite3DbStrNDup()
781 zNew = z ? sqlite3DbMallocRawNN(db, n+1) : 0; in sqlite3DbStrNDup()
794 char *sqlite3DbSpanDup(sqlite3 *db, const char *zStart, const char *zEnd){ in sqlite3DbSpanDup() argument
799 return sqlite3DbStrNDup(db, zStart, n); in sqlite3DbSpanDup()
805 void sqlite3SetString(char **pz, sqlite3 *db, const char *zNew){ in sqlite3SetString() argument
806 char *z = sqlite3DbStrDup(db, zNew); in sqlite3SetString()
807 sqlite3DbFree(db, *pz); in sqlite3SetString()
824 void *sqlite3OomFault(sqlite3 *db){ in sqlite3OomFault() argument
825 if( db->mallocFailed==0 && db->bBenignMalloc==0 ){ in sqlite3OomFault()
826 db->mallocFailed = 1; in sqlite3OomFault()
827 if( db->nVdbeExec>0 ){ in sqlite3OomFault()
828 AtomicStore(&db->u1.isInterrupted, 1); in sqlite3OomFault()
831 if( db->pParse ){ in sqlite3OomFault()
833 sqlite3ErrorMsg(db->pParse, "out of memory"); in sqlite3OomFault()
834 db->pParse->rc = SQLITE_NOMEM_BKPT; in sqlite3OomFault()
835 for(pParse=db->pParse->pOuterParse; pParse; pParse = pParse->pOuterParse){ in sqlite3OomFault()
851 void sqlite3OomClear(sqlite3 *db){ in sqlite3OomClear() argument
852 if( db->mallocFailed && db->nVdbeExec==0 ){ in sqlite3OomClear()
853 db->mallocFailed = 0; in sqlite3OomClear()
854 AtomicStore(&db->u1.isInterrupted, 0); in sqlite3OomClear()
855 assert( db->lookaside.bDisable>0 ); in sqlite3OomClear()
863 static SQLITE_NOINLINE int apiHandleError(sqlite3 *db, int rc){ in apiHandleError() argument
864 if( db->mallocFailed || rc==SQLITE_IOERR_NOMEM ){ in apiHandleError()
865 sqlite3OomClear(db); in apiHandleError()
866 sqlite3Error(db, SQLITE_NOMEM); in apiHandleError()
869 return rc & db->errMask; in apiHandleError()
884 int sqlite3ApiExit(sqlite3* db, int rc){ in sqlite3ApiExit() argument
889 assert( db!=0 ); in sqlite3ApiExit()
890 assert( sqlite3_mutex_held(db->mutex) ); in sqlite3ApiExit()
891 if( db->mallocFailed || rc ){ in sqlite3ApiExit()
892 return apiHandleError(db, rc); in sqlite3ApiExit()
894 return rc & db->errMask; in sqlite3ApiExit()