persistentstorage/sql/SQLite/malloc.c
changeset 0 08ec8eefde2f
equal deleted inserted replaced
-1:000000000000 0:08ec8eefde2f
       
     1 /*
       
     2 ** 2001 September 15
       
     3 **
       
     4 ** The author disclaims copyright to this source code.  In place of
       
     5 ** a legal notice, here is a blessing:
       
     6 **
       
     7 **    May you do good and not evil.
       
     8 **    May you find forgiveness for yourself and forgive others.
       
     9 **    May you share freely, never taking more than you give.
       
    10 **
       
    11 *************************************************************************
       
    12 **
       
    13 ** Memory allocation functions used throughout sqlite.
       
    14 **
       
    15 ** $Id: malloc.c,v 1.34 2008/08/05 17:53:23 drh Exp $
       
    16 */
       
    17 #include "sqliteInt.h"
       
    18 #include <stdarg.h>
       
    19 #include <ctype.h>
       
    20 
       
    21 /*
       
    22 ** This routine runs when the memory allocator sees that the
       
    23 ** total memory allocation is about to exceed the soft heap
       
    24 ** limit.
       
    25 */
       
    26 static void softHeapLimitEnforcer(
       
    27   void *NotUsed, 
       
    28   sqlite3_int64 inUse,
       
    29   int allocSize
       
    30 ){
       
    31   sqlite3_release_memory(allocSize);
       
    32 }
       
    33 
       
    34 /*
       
    35 ** Set the soft heap-size limit for the library. Passing a zero or 
       
    36 ** negative value indicates no limit.
       
    37 */
       
    38 void sqlite3_soft_heap_limit(int n){
       
    39   sqlite3_uint64 iLimit;
       
    40   int overage;
       
    41   if( n<0 ){
       
    42     iLimit = 0;
       
    43   }else{
       
    44     iLimit = n;
       
    45   }
       
    46   sqlite3_initialize();
       
    47   if( iLimit>0 ){
       
    48     sqlite3_memory_alarm(softHeapLimitEnforcer, 0, iLimit);
       
    49   }else{
       
    50     sqlite3_memory_alarm(0, 0, 0);
       
    51   }
       
    52   overage = sqlite3_memory_used() - n;
       
    53   if( overage>0 ){
       
    54     sqlite3_release_memory(overage);
       
    55   }
       
    56 }
       
    57 
       
    58 /*
       
    59 ** Attempt to release up to n bytes of non-essential memory currently
       
    60 ** held by SQLite. An example of non-essential memory is memory used to
       
    61 ** cache database pages that are not currently in use.
       
    62 */
       
    63 int sqlite3_release_memory(int n){
       
    64 #ifdef SQLITE_ENABLE_MEMORY_MANAGEMENT
       
    65   int nRet = sqlite3VdbeReleaseMemory(n);
       
    66   nRet += sqlite3PagerReleaseMemory(n-nRet);
       
    67   return nRet;
       
    68 #else
       
    69   return SQLITE_OK;
       
    70 #endif
       
    71 }
       
    72 
       
    73 /*
       
    74 ** State information local to the memory allocation subsystem.
       
    75 */
       
    76 static struct {
       
    77   sqlite3_mutex *mutex;         /* Mutex to serialize access */
       
    78 
       
    79   /*
       
    80   ** The alarm callback and its arguments.  The mem0.mutex lock will
       
    81   ** be held while the callback is running.  Recursive calls into
       
    82   ** the memory subsystem are allowed, but no new callbacks will be
       
    83   ** issued.  The alarmBusy variable is set to prevent recursive
       
    84   ** callbacks.
       
    85   */
       
    86   sqlite3_int64 alarmThreshold;
       
    87   void (*alarmCallback)(void*, sqlite3_int64,int);
       
    88   void *alarmArg;
       
    89   int alarmBusy;
       
    90 
       
    91   /*
       
    92   ** Pointers to the end of sqlite3Config.pScratch and
       
    93   ** sqlite3Config.pPage to a block of memory that records
       
    94   ** which pages are available.
       
    95   */
       
    96   u32 *aScratchFree;
       
    97   u32 *aPageFree;
       
    98 
       
    99   /* Number of free pages for scratch and page-cache memory */
       
   100   u32 nScratchFree;
       
   101   u32 nPageFree;
       
   102 } mem0;
       
   103 
       
   104 /*
       
   105 ** Initialize the memory allocation subsystem.
       
   106 */
       
   107 int sqlite3MallocInit(void){
       
   108   if( sqlite3Config.m.xMalloc==0 ){
       
   109     sqlite3MemSetDefault();
       
   110   }
       
   111   memset(&mem0, 0, sizeof(mem0));
       
   112   if( sqlite3Config.bCoreMutex ){
       
   113     mem0.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM);
       
   114   }
       
   115   if( sqlite3Config.pScratch && sqlite3Config.szScratch>=100
       
   116       && sqlite3Config.nScratch>=0 ){
       
   117     int i;
       
   118     sqlite3Config.szScratch -= 4;
       
   119     mem0.aScratchFree = (u32*)&((char*)sqlite3Config.pScratch)
       
   120                   [sqlite3Config.szScratch*sqlite3Config.nScratch];
       
   121     for(i=0; i<sqlite3Config.nScratch; i++){ mem0.aScratchFree[i] = i; }
       
   122     mem0.nScratchFree = sqlite3Config.nScratch;
       
   123   }else{
       
   124     sqlite3Config.pScratch = 0;
       
   125     sqlite3Config.szScratch = 0;
       
   126   }
       
   127   if( sqlite3Config.pPage && sqlite3Config.szPage>=512
       
   128       && sqlite3Config.nPage>=1 ){
       
   129     int i;
       
   130     int overhead;
       
   131     int sz = sqlite3Config.szPage;
       
   132     int n = sqlite3Config.nPage;
       
   133     overhead = (4*n + sz - 1)/sz;
       
   134     sqlite3Config.nPage -= overhead;
       
   135     mem0.aPageFree = (u32*)&((char*)sqlite3Config.pPage)
       
   136                   [sqlite3Config.szPage*sqlite3Config.nPage];
       
   137     for(i=0; i<sqlite3Config.nPage; i++){ mem0.aPageFree[i] = i; }
       
   138     mem0.nPageFree = sqlite3Config.nPage;
       
   139   }else{
       
   140     sqlite3Config.pPage = 0;
       
   141     sqlite3Config.szPage = 0;
       
   142   }
       
   143   return sqlite3Config.m.xInit(sqlite3Config.m.pAppData);
       
   144 }
       
   145 
       
   146 /*
       
   147 ** Deinitialize the memory allocation subsystem.
       
   148 */
       
   149 void sqlite3MallocEnd(void){
       
   150   sqlite3Config.m.xShutdown(sqlite3Config.m.pAppData);
       
   151   memset(&mem0, 0, sizeof(mem0));
       
   152 }
       
   153 
       
   154 /*
       
   155 ** Return the amount of memory currently checked out.
       
   156 */
       
   157 sqlite3_int64 sqlite3_memory_used(void){
       
   158   int n, mx;
       
   159   sqlite3_int64 res;
       
   160   sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, 0);
       
   161   res = (sqlite3_int64)n;  /* Work around bug in Borland C. Ticket #3216 */
       
   162   return res;
       
   163 }
       
   164 
       
   165 /*
       
   166 ** Return the maximum amount of memory that has ever been
       
   167 ** checked out since either the beginning of this process
       
   168 ** or since the most recent reset.
       
   169 */
       
   170 sqlite3_int64 sqlite3_memory_highwater(int resetFlag){
       
   171   int n, mx;
       
   172   sqlite3_int64 res;
       
   173   sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, resetFlag);
       
   174   res = (sqlite3_int64)mx;  /* Work around bug in Borland C. Ticket #3216 */
       
   175   return res;
       
   176 }
       
   177 
       
   178 /*
       
   179 ** Change the alarm callback
       
   180 */
       
   181 int sqlite3_memory_alarm(
       
   182   void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
       
   183   void *pArg,
       
   184   sqlite3_int64 iThreshold
       
   185 ){
       
   186   sqlite3_mutex_enter(mem0.mutex);
       
   187   mem0.alarmCallback = xCallback;
       
   188   mem0.alarmArg = pArg;
       
   189   mem0.alarmThreshold = iThreshold;
       
   190   sqlite3_mutex_leave(mem0.mutex);
       
   191   return SQLITE_OK;
       
   192 }
       
   193 
       
   194 /*
       
   195 ** Trigger the alarm 
       
   196 */
       
   197 static void sqlite3MallocAlarm(int nByte){
       
   198   void (*xCallback)(void*,sqlite3_int64,int);
       
   199   sqlite3_int64 nowUsed;
       
   200   void *pArg;
       
   201   if( mem0.alarmCallback==0 || mem0.alarmBusy  ) return;
       
   202   mem0.alarmBusy = 1;
       
   203   xCallback = mem0.alarmCallback;
       
   204   nowUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
       
   205   pArg = mem0.alarmArg;
       
   206   sqlite3_mutex_leave(mem0.mutex);
       
   207   xCallback(pArg, nowUsed, nByte);
       
   208   sqlite3_mutex_enter(mem0.mutex);
       
   209   mem0.alarmBusy = 0;
       
   210 }
       
   211 
       
   212 /*
       
   213 ** Do a memory allocation with statistics and alarms.  Assume the
       
   214 ** lock is already held.
       
   215 */
       
   216 static int mallocWithAlarm(int n, void **pp){
       
   217   int nFull;
       
   218   void *p;
       
   219   assert( sqlite3_mutex_held(mem0.mutex) );
       
   220   nFull = sqlite3Config.m.xRoundup(n);
       
   221   sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, n);
       
   222   if( mem0.alarmCallback!=0 ){
       
   223     int nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
       
   224     if( nUsed+nFull >= mem0.alarmThreshold ){
       
   225       sqlite3MallocAlarm(nFull);
       
   226     }
       
   227   }
       
   228   p = sqlite3Config.m.xMalloc(nFull);
       
   229   if( p==0 && mem0.alarmCallback ){
       
   230     sqlite3MallocAlarm(nFull);
       
   231     p = sqlite3Config.m.xMalloc(nFull);
       
   232   }
       
   233   if( p ){
       
   234     nFull = sqlite3MallocSize(p);
       
   235     sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nFull);
       
   236   }
       
   237   *pp = p;
       
   238   return nFull;
       
   239 }
       
   240 
       
   241 /*
       
   242 ** Allocate memory.  This routine is like sqlite3_malloc() except that it
       
   243 ** assumes the memory subsystem has already been initialized.
       
   244 */
       
   245 void *sqlite3Malloc(int n){
       
   246   void *p;
       
   247   if( n<=0 ){
       
   248     p = 0;
       
   249   }else if( sqlite3Config.bMemstat ){
       
   250     sqlite3_mutex_enter(mem0.mutex);
       
   251     mallocWithAlarm(n, &p);
       
   252     sqlite3_mutex_leave(mem0.mutex);
       
   253   }else{
       
   254     p = sqlite3Config.m.xMalloc(n);
       
   255   }
       
   256   return p;
       
   257 }
       
   258 
       
   259 /*
       
   260 ** This version of the memory allocation is for use by the application.
       
   261 ** First make sure the memory subsystem is initialized, then do the
       
   262 ** allocation.
       
   263 */
       
   264 void *sqlite3_malloc(int n){
       
   265 #ifndef SQLITE_OMIT_AUTOINIT
       
   266   if( sqlite3_initialize() ) return 0;
       
   267 #endif
       
   268   return sqlite3Malloc(n);
       
   269 }
       
   270 
       
   271 /*
       
   272 ** Each thread may only have a single outstanding allocation from
       
   273 ** xScratchMalloc().  We verify this constraint in the single-threaded
       
   274 ** case by setting scratchAllocOut to 1 when an allocation
       
   275 ** is outstanding clearing it when the allocation is freed.
       
   276 */
       
   277 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
       
   278 static int scratchAllocOut = 0;
       
   279 #endif
       
   280 
       
   281 
       
   282 /*
       
   283 ** Allocate memory that is to be used and released right away.
       
   284 ** This routine is similar to alloca() in that it is not intended
       
   285 ** for situations where the memory might be held long-term.  This
       
   286 ** routine is intended to get memory to old large transient data
       
   287 ** structures that would not normally fit on the stack of an
       
   288 ** embedded processor.
       
   289 */
       
   290 void *sqlite3ScratchMalloc(int n){
       
   291   void *p;
       
   292   assert( n>0 );
       
   293 
       
   294 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
       
   295   /* Verify that no more than one scratch allocation per thread
       
   296   ** is outstanding at one time.  (This is only checked in the
       
   297   ** single-threaded case since checking in the multi-threaded case
       
   298   ** would be much more complicated.) */
       
   299   assert( scratchAllocOut==0 );
       
   300 #endif
       
   301 
       
   302   if( sqlite3Config.szScratch<n ){
       
   303     goto scratch_overflow;
       
   304   }else{  
       
   305     sqlite3_mutex_enter(mem0.mutex);
       
   306     if( mem0.nScratchFree==0 ){
       
   307       sqlite3_mutex_leave(mem0.mutex);
       
   308       goto scratch_overflow;
       
   309     }else{
       
   310       int i;
       
   311       i = mem0.aScratchFree[--mem0.nScratchFree];
       
   312       sqlite3_mutex_leave(mem0.mutex);
       
   313       i *= sqlite3Config.szScratch;
       
   314       sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1);
       
   315       sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
       
   316       p = (void*)&((char*)sqlite3Config.pScratch)[i];
       
   317     }
       
   318   }
       
   319 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
       
   320   scratchAllocOut = p!=0;
       
   321 #endif
       
   322 
       
   323   return p;
       
   324 
       
   325 scratch_overflow:
       
   326   if( sqlite3Config.bMemstat ){
       
   327     sqlite3_mutex_enter(mem0.mutex);
       
   328     sqlite3StatusSet(SQLITE_STATUS_SCRATCH_SIZE, n);
       
   329     n = mallocWithAlarm(n, &p);
       
   330     if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n);
       
   331     sqlite3_mutex_leave(mem0.mutex);
       
   332   }else{
       
   333     p = sqlite3Config.m.xMalloc(n);
       
   334   }
       
   335 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
       
   336   scratchAllocOut = p!=0;
       
   337 #endif
       
   338   return p;    
       
   339 }
       
   340 void sqlite3ScratchFree(void *p){
       
   341   if( p ){
       
   342 
       
   343 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
       
   344     /* Verify that no more than one scratch allocation per thread
       
   345     ** is outstanding at one time.  (This is only checked in the
       
   346     ** single-threaded case since checking in the multi-threaded case
       
   347     ** would be much more complicated.) */
       
   348     assert( scratchAllocOut==1 );
       
   349     scratchAllocOut = 0;
       
   350 #endif
       
   351 
       
   352     if( sqlite3Config.pScratch==0
       
   353            || p<sqlite3Config.pScratch
       
   354            || p>=(void*)mem0.aScratchFree ){
       
   355       if( sqlite3Config.bMemstat ){
       
   356         int iSize = sqlite3MallocSize(p);
       
   357         sqlite3_mutex_enter(mem0.mutex);
       
   358         sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, -iSize);
       
   359         sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -iSize);
       
   360         sqlite3Config.m.xFree(p);
       
   361         sqlite3_mutex_leave(mem0.mutex);
       
   362       }else{
       
   363         sqlite3Config.m.xFree(p);
       
   364       }
       
   365     }else{
       
   366       int i;
       
   367       i = (u8 *)p - (u8 *)sqlite3Config.pScratch;
       
   368       i /= sqlite3Config.szScratch;
       
   369       assert( i>=0 && i<sqlite3Config.nScratch );
       
   370       sqlite3_mutex_enter(mem0.mutex);
       
   371       assert( mem0.nScratchFree<sqlite3Config.nScratch );
       
   372       mem0.aScratchFree[mem0.nScratchFree++] = i;
       
   373       sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, -1);
       
   374       sqlite3_mutex_leave(mem0.mutex);
       
   375     }
       
   376   }
       
   377 }
       
   378 
       
   379 /*
       
   380 ** Allocate memory to be used by the page cache.  Make use of the
       
   381 ** memory buffer provided by SQLITE_CONFIG_PAGECACHE if there is one
       
   382 ** and that memory is of the right size and is not completely
       
   383 ** consumed.  Otherwise, failover to sqlite3Malloc().
       
   384 */
       
   385 void *sqlite3PageMalloc(int n){
       
   386   void *p;
       
   387   assert( n>0 );
       
   388   assert( (n & (n-1))==0 );
       
   389   assert( n>=512 && n<=32768 );
       
   390 
       
   391   if( sqlite3Config.szPage<n ){
       
   392     goto page_overflow;
       
   393   }else{  
       
   394     sqlite3_mutex_enter(mem0.mutex);
       
   395     if( mem0.nPageFree==0 ){
       
   396       sqlite3_mutex_leave(mem0.mutex);
       
   397       goto page_overflow;
       
   398     }else{
       
   399       int i;
       
   400       i = mem0.aPageFree[--mem0.nPageFree];
       
   401       sqlite3_mutex_leave(mem0.mutex);
       
   402       i *= sqlite3Config.szPage;
       
   403       sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, n);
       
   404       sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, 1);
       
   405       p = (void*)&((char*)sqlite3Config.pPage)[i];
       
   406     }
       
   407   }
       
   408   return p;
       
   409 
       
   410 page_overflow:
       
   411   if( sqlite3Config.bMemstat ){
       
   412     sqlite3_mutex_enter(mem0.mutex);
       
   413     sqlite3StatusSet(SQLITE_STATUS_PAGECACHE_SIZE, n);
       
   414     n = mallocWithAlarm(n, &p);
       
   415     if( p ) sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, n);
       
   416     sqlite3_mutex_leave(mem0.mutex);
       
   417   }else{
       
   418     p = sqlite3Config.m.xMalloc(n);
       
   419   }
       
   420   return p;    
       
   421 }
       
   422 void sqlite3PageFree(void *p){
       
   423   if( p ){
       
   424     if( sqlite3Config.pPage==0
       
   425            || p<sqlite3Config.pPage
       
   426            || p>=(void*)mem0.aPageFree ){
       
   427       /* In this case, the page allocation was obtained from a regular 
       
   428       ** call to sqlite3_mem_methods.xMalloc() (a page-cache-memory 
       
   429       ** "overflow"). Free the block with sqlite3_mem_methods.xFree().
       
   430       */
       
   431       if( sqlite3Config.bMemstat ){
       
   432         int iSize = sqlite3MallocSize(p);
       
   433         sqlite3_mutex_enter(mem0.mutex);
       
   434         sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, -iSize);
       
   435         sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -iSize);
       
   436         sqlite3Config.m.xFree(p);
       
   437         sqlite3_mutex_leave(mem0.mutex);
       
   438       }else{
       
   439         sqlite3Config.m.xFree(p);
       
   440       }
       
   441     }else{
       
   442       /* The page allocation was allocated from the sqlite3Config.pPage
       
   443       ** buffer. In this case all that is add the index of the page in
       
   444       ** the sqlite3Config.pPage array to the set of free indexes stored
       
   445       ** in the mem0.aPageFree[] array.
       
   446       */
       
   447       int i;
       
   448       i = (u8 *)p - (u8 *)sqlite3Config.pPage;
       
   449       i /= sqlite3Config.szPage;
       
   450       assert( i>=0 && i<sqlite3Config.nPage );
       
   451       sqlite3_mutex_enter(mem0.mutex);
       
   452       assert( mem0.nPageFree<sqlite3Config.nPage );
       
   453       mem0.aPageFree[mem0.nPageFree++] = i;
       
   454       sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, -1);
       
   455       sqlite3_mutex_leave(mem0.mutex);
       
   456 #if !defined(NDEBUG) && 0
       
   457       /* Assert that a duplicate was not just inserted into aPageFree[]. */
       
   458       for(i=0; i<mem0.nPageFree-1; i++){
       
   459         assert( mem0.aPageFree[i]!=mem0.aPageFree[mem0.nPageFree-1] );
       
   460       }
       
   461 #endif
       
   462     }
       
   463   }
       
   464 }
       
   465 
       
   466 /*
       
   467 ** TRUE if p is a lookaside memory allocation from db
       
   468 */
       
   469 static int isLookaside(sqlite3 *db, void *p){
       
   470   return db && p && p>=db->lookaside.pStart && p<db->lookaside.pEnd;
       
   471 }
       
   472 
       
   473 /*
       
   474 ** Return the size of a memory allocation previously obtained from
       
   475 ** sqlite3Malloc() or sqlite3_malloc().
       
   476 */
       
   477 int sqlite3MallocSize(void *p){
       
   478   return sqlite3Config.m.xSize(p);
       
   479 }
       
   480 int sqlite3DbMallocSize(sqlite3 *db, void *p){
       
   481   if( isLookaside(db, p) ){
       
   482     return db->lookaside.sz;
       
   483   }else{
       
   484     return sqlite3Config.m.xSize(p);
       
   485   }
       
   486 }
       
   487 
       
   488 /*
       
   489 ** Free memory previously obtained from sqlite3Malloc().
       
   490 */
       
   491 void sqlite3_free(void *p){
       
   492   if( p==0 ) return;
       
   493   if( sqlite3Config.bMemstat ){
       
   494     sqlite3_mutex_enter(mem0.mutex);
       
   495     sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -sqlite3MallocSize(p));
       
   496     sqlite3Config.m.xFree(p);
       
   497     sqlite3_mutex_leave(mem0.mutex);
       
   498   }else{
       
   499     sqlite3Config.m.xFree(p);
       
   500   }
       
   501 }
       
   502 
       
   503 /*
       
   504 ** Free memory that might be associated with a particular database
       
   505 ** connection.
       
   506 */
       
   507 void sqlite3DbFree(sqlite3 *db, void *p){
       
   508   if( isLookaside(db, p) ){
       
   509     LookasideSlot *pBuf = (LookasideSlot*)p;
       
   510     pBuf->pNext = db->lookaside.pFree;
       
   511     db->lookaside.pFree = pBuf;
       
   512     db->lookaside.nOut--;
       
   513   }else{
       
   514     sqlite3_free(p);
       
   515   }
       
   516 }
       
   517 
       
   518 /*
       
   519 ** Change the size of an existing memory allocation
       
   520 */
       
   521 void *sqlite3Realloc(void *pOld, int nBytes){
       
   522   int nOld, nNew;
       
   523   void *pNew;
       
   524   if( pOld==0 ){
       
   525     return sqlite3Malloc(nBytes);
       
   526   }
       
   527   if( nBytes<=0 ){
       
   528     sqlite3_free(pOld);
       
   529     return 0;
       
   530   }
       
   531   nOld = sqlite3MallocSize(pOld);
       
   532   if( sqlite3Config.bMemstat ){
       
   533     sqlite3_mutex_enter(mem0.mutex);
       
   534     sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, nBytes);
       
   535     nNew = sqlite3Config.m.xRoundup(nBytes);
       
   536     if( nOld==nNew ){
       
   537       pNew = pOld;
       
   538     }else{
       
   539       if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED)+nNew-nOld >= 
       
   540             mem0.alarmThreshold ){
       
   541         sqlite3MallocAlarm(nNew-nOld);
       
   542       }
       
   543       pNew = sqlite3Config.m.xRealloc(pOld, nNew);
       
   544       if( pNew==0 && mem0.alarmCallback ){
       
   545         sqlite3MallocAlarm(nBytes);
       
   546         pNew = sqlite3Config.m.xRealloc(pOld, nNew);
       
   547       }
       
   548       if( pNew ){
       
   549         nNew = sqlite3MallocSize(pNew);
       
   550         sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nNew-nOld);
       
   551       }
       
   552     }
       
   553     sqlite3_mutex_leave(mem0.mutex);
       
   554   }else{
       
   555     pNew = sqlite3Config.m.xRealloc(pOld, nBytes);
       
   556   }
       
   557   return pNew;
       
   558 }
       
   559 
       
   560 /*
       
   561 ** The public interface to sqlite3Realloc.  Make sure that the memory
       
   562 ** subsystem is initialized prior to invoking sqliteRealloc.
       
   563 */
       
   564 void *sqlite3_realloc(void *pOld, int n){
       
   565 #ifndef SQLITE_OMIT_AUTOINIT
       
   566   if( sqlite3_initialize() ) return 0;
       
   567 #endif
       
   568   return sqlite3Realloc(pOld, n);
       
   569 }
       
   570 
       
   571 
       
   572 /*
       
   573 ** Allocate and zero memory.
       
   574 */ 
       
   575 void *sqlite3MallocZero(int n){
       
   576   void *p = sqlite3Malloc(n);
       
   577   if( p ){
       
   578     memset(p, 0, n);
       
   579   }
       
   580   return p;
       
   581 }
       
   582 
       
   583 /*
       
   584 ** Allocate and zero memory.  If the allocation fails, make
       
   585 ** the mallocFailed flag in the connection pointer.
       
   586 */
       
   587 void *sqlite3DbMallocZero(sqlite3 *db, int n){
       
   588   void *p = sqlite3DbMallocRaw(db, n);
       
   589   if( p ){
       
   590     memset(p, 0, n);
       
   591   }
       
   592   return p;
       
   593 }
       
   594 
       
   595 /*
       
   596 ** Allocate and zero memory.  If the allocation fails, make
       
   597 ** the mallocFailed flag in the connection pointer.
       
   598 */
       
   599 void *sqlite3DbMallocRaw(sqlite3 *db, int n){
       
   600   void *p;
       
   601   if( db ){
       
   602     LookasideSlot *pBuf;
       
   603     if( db->mallocFailed ){
       
   604       return 0;
       
   605     }
       
   606     if( db->lookaside.bEnabled && n<=db->lookaside.sz
       
   607          && (pBuf = db->lookaside.pFree)!=0 ){
       
   608       db->lookaside.pFree = pBuf->pNext;
       
   609       db->lookaside.nOut++;
       
   610       if( db->lookaside.nOut>db->lookaside.mxOut ){
       
   611         db->lookaside.mxOut = db->lookaside.nOut;
       
   612       }
       
   613       return (void*)pBuf;
       
   614     }
       
   615   }
       
   616   p = sqlite3Malloc(n);
       
   617   if( !p && db ){
       
   618     db->mallocFailed = 1;
       
   619   }
       
   620   return p;
       
   621 }
       
   622 
       
   623 /*
       
   624 ** Resize the block of memory pointed to by p to n bytes. If the
       
   625 ** resize fails, set the mallocFailed flag in the connection object.
       
   626 */
       
   627 void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
       
   628   void *pNew = 0;
       
   629   if( db->mallocFailed==0 ){
       
   630     if( p==0 ){
       
   631       return sqlite3DbMallocRaw(db, n);
       
   632     }
       
   633     if( isLookaside(db, p) ){
       
   634       if( n<=db->lookaside.sz ){
       
   635         return p;
       
   636       }
       
   637       pNew = sqlite3DbMallocRaw(db, n);
       
   638       if( pNew ){
       
   639         memcpy(pNew, p, db->lookaside.sz);
       
   640         sqlite3DbFree(db, p);
       
   641       }
       
   642     }else{
       
   643       pNew = sqlite3_realloc(p, n);
       
   644       if( !pNew ){
       
   645         db->mallocFailed = 1;
       
   646       }
       
   647     }
       
   648   }
       
   649   return pNew;
       
   650 }
       
   651 
       
   652 /*
       
   653 ** Attempt to reallocate p.  If the reallocation fails, then free p
       
   654 ** and set the mallocFailed flag in the database connection.
       
   655 */
       
   656 void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, int n){
       
   657   void *pNew;
       
   658   pNew = sqlite3DbRealloc(db, p, n);
       
   659   if( !pNew ){
       
   660     sqlite3DbFree(db, p);
       
   661   }
       
   662   return pNew;
       
   663 }
       
   664 
       
   665 /*
       
   666 ** Make a copy of a string in memory obtained from sqliteMalloc(). These 
       
   667 ** functions call sqlite3MallocRaw() directly instead of sqliteMalloc(). This
       
   668 ** is because when memory debugging is turned on, these two functions are 
       
   669 ** called via macros that record the current file and line number in the
       
   670 ** ThreadData structure.
       
   671 */
       
   672 char *sqlite3DbStrDup(sqlite3 *db, const char *z){
       
   673   char *zNew;
       
   674   size_t n;
       
   675   if( z==0 ){
       
   676     return 0;
       
   677   }
       
   678   n = strlen(z)+1;
       
   679   assert( (n&0x7fffffff)==n );
       
   680   zNew = sqlite3DbMallocRaw(db, (int)n);
       
   681   if( zNew ){
       
   682     memcpy(zNew, z, n);
       
   683   }
       
   684   return zNew;
       
   685 }
       
   686 char *sqlite3DbStrNDup(sqlite3 *db, const char *z, int n){
       
   687   char *zNew;
       
   688   if( z==0 ){
       
   689     return 0;
       
   690   }
       
   691   assert( (n&0x7fffffff)==n );
       
   692   zNew = sqlite3DbMallocRaw(db, n+1);
       
   693   if( zNew ){
       
   694     memcpy(zNew, z, n);
       
   695     zNew[n] = 0;
       
   696   }
       
   697   return zNew;
       
   698 }
       
   699 
       
   700 /*
       
   701 ** Create a string from the zFromat argument and the va_list that follows.
       
   702 ** Store the string in memory obtained from sqliteMalloc() and make *pz
       
   703 ** point to that string.
       
   704 */
       
   705 void sqlite3SetString(char **pz, sqlite3 *db, const char *zFormat, ...){
       
   706   va_list ap;
       
   707   char *z;
       
   708 
       
   709   va_start(ap, zFormat);
       
   710   z = sqlite3VMPrintf(db, zFormat, ap);
       
   711   va_end(ap);
       
   712   sqlite3DbFree(db, *pz);
       
   713   *pz = z;
       
   714 }
       
   715 
       
   716 
       
   717 /*
       
   718 ** This function must be called before exiting any API function (i.e. 
       
   719 ** returning control to the user) that has called sqlite3_malloc or
       
   720 ** sqlite3_realloc.
       
   721 **
       
   722 ** The returned value is normally a copy of the second argument to this
       
   723 ** function. However, if a malloc() failure has occured since the previous
       
   724 ** invocation SQLITE_NOMEM is returned instead. 
       
   725 **
       
   726 ** If the first argument, db, is not NULL and a malloc() error has occured,
       
   727 ** then the connection error-code (the value returned by sqlite3_errcode())
       
   728 ** is set to SQLITE_NOMEM.
       
   729 */
       
   730 int sqlite3ApiExit(sqlite3* db, int rc){
       
   731   /* If the db handle is not NULL, then we must hold the connection handle
       
   732   ** mutex here. Otherwise the read (and possible write) of db->mallocFailed 
       
   733   ** is unsafe, as is the call to sqlite3Error().
       
   734   */
       
   735   assert( !db || sqlite3_mutex_held(db->mutex) );
       
   736   if( db && db->mallocFailed ){
       
   737     sqlite3Error(db, SQLITE_NOMEM, 0);
       
   738     db->mallocFailed = 0;
       
   739     rc = SQLITE_NOMEM;
       
   740   }
       
   741   return rc & (db ? db->errMask : 0xff);
       
   742 }