xref: /sqlite-3.40.0/src/malloc.c (revision 4249b3f5)
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.29 2008/07/18 18:56:17 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>=3000
116       && sqlite3Config.nScratch>0 ){
117     int i;
118     mem0.aScratchFree = (u32*)&((char*)sqlite3Config.pScratch)
119                   [sqlite3Config.szScratch*sqlite3Config.nScratch];
120     for(i=0; i<sqlite3Config.nScratch; i++){ mem0.aScratchFree[i] = i; }
121     mem0.nScratchFree = sqlite3Config.nScratch;
122   }else{
123     sqlite3Config.pScratch = 0;
124     sqlite3Config.szScratch = 0;
125   }
126   if( sqlite3Config.pPage && sqlite3Config.szPage>=512
127       && sqlite3Config.nPage>0 ){
128     int i;
129     mem0.aPageFree = (u32*)&((char*)sqlite3Config.pPage)
130                   [sqlite3Config.szPage*sqlite3Config.nPage];
131     for(i=0; i<sqlite3Config.nPage; i++){ mem0.aPageFree[i] = i; }
132     mem0.nPageFree = sqlite3Config.nPage;
133   }else{
134     sqlite3Config.pPage = 0;
135     sqlite3Config.szPage = 0;
136   }
137   return sqlite3Config.m.xInit(sqlite3Config.m.pAppData);
138 }
139 
140 /*
141 ** Deinitialize the memory allocation subsystem.
142 */
143 void sqlite3MallocEnd(void){
144   sqlite3Config.m.xShutdown(sqlite3Config.m.pAppData);
145   memset(&mem0, 0, sizeof(mem0));
146 }
147 
148 /*
149 ** Return the amount of memory currently checked out.
150 */
151 sqlite3_int64 sqlite3_memory_used(void){
152   int n, mx;
153   sqlite3_int64 res;
154   sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, 0);
155   res = (sqlite3_int64)n;  /* Work around bug in Borland C. Ticket #3216 */
156   return res;
157 }
158 
159 /*
160 ** Return the maximum amount of memory that has ever been
161 ** checked out since either the beginning of this process
162 ** or since the most recent reset.
163 */
164 sqlite3_int64 sqlite3_memory_highwater(int resetFlag){
165   int n, mx;
166   sqlite3_int64 res;
167   sqlite3_status(SQLITE_STATUS_MEMORY_USED, &n, &mx, resetFlag);
168   res = (sqlite3_int64)mx;  /* Work around bug in Borland C. Ticket #3216 */
169   return res;
170 }
171 
172 /*
173 ** Change the alarm callback
174 */
175 int sqlite3_memory_alarm(
176   void(*xCallback)(void *pArg, sqlite3_int64 used,int N),
177   void *pArg,
178   sqlite3_int64 iThreshold
179 ){
180   sqlite3_mutex_enter(mem0.mutex);
181   mem0.alarmCallback = xCallback;
182   mem0.alarmArg = pArg;
183   mem0.alarmThreshold = iThreshold;
184   sqlite3_mutex_leave(mem0.mutex);
185   return SQLITE_OK;
186 }
187 
188 /*
189 ** Trigger the alarm
190 */
191 static void sqlite3MallocAlarm(int nByte){
192   void (*xCallback)(void*,sqlite3_int64,int);
193   sqlite3_int64 nowUsed;
194   void *pArg;
195   if( mem0.alarmCallback==0 || mem0.alarmBusy  ) return;
196   mem0.alarmBusy = 1;
197   xCallback = mem0.alarmCallback;
198   nowUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
199   pArg = mem0.alarmArg;
200   sqlite3_mutex_leave(mem0.mutex);
201   xCallback(pArg, nowUsed, nByte);
202   sqlite3_mutex_enter(mem0.mutex);
203   mem0.alarmBusy = 0;
204 }
205 
206 /*
207 ** Do a memory allocation with statistics and alarms.  Assume the
208 ** lock is already held.
209 */
210 static int mallocWithAlarm(int n, void **pp){
211   int nFull;
212   void *p;
213   assert( sqlite3_mutex_held(mem0.mutex) );
214   nFull = sqlite3Config.m.xRoundup(n);
215   sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, n);
216   if( mem0.alarmCallback!=0 ){
217     int nUsed = sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED);
218     if( nUsed+nFull >= mem0.alarmThreshold ){
219       sqlite3MallocAlarm(nFull);
220     }
221   }
222   p = sqlite3Config.m.xMalloc(nFull);
223   if( p==0 && mem0.alarmCallback ){
224     sqlite3MallocAlarm(nFull);
225     p = sqlite3Config.m.xMalloc(nFull);
226   }
227   if( p ){
228     nFull = sqlite3MallocSize(p);
229     sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nFull);
230   }
231   *pp = p;
232   return nFull;
233 }
234 
235 /*
236 ** Allocate memory.  This routine is like sqlite3_malloc() except that it
237 ** assumes the memory subsystem has already been initialized.
238 */
239 void *sqlite3Malloc(int n){
240   void *p;
241   if( n<=0 ){
242     p = 0;
243   }else if( sqlite3Config.bMemstat ){
244     sqlite3_mutex_enter(mem0.mutex);
245     mallocWithAlarm(n, &p);
246     sqlite3_mutex_leave(mem0.mutex);
247   }else{
248     p = sqlite3Config.m.xMalloc(n);
249   }
250   return p;
251 }
252 
253 /*
254 ** This version of the memory allocation is for use by the application.
255 ** First make sure the memory subsystem is initialized, then do the
256 ** allocation.
257 */
258 void *sqlite3_malloc(int n){
259 #ifndef SQLITE_OMIT_AUTOINIT
260   if( sqlite3_initialize() ) return 0;
261 #endif
262   return sqlite3Malloc(n);
263 }
264 
265 /*
266 ** Each thread may only have a single outstanding allocation from
267 ** xScratchMalloc().  We verify this constraint in the single-threaded
268 ** case by setting scratchAllocOut to 1 when an allocation
269 ** is outstanding clearing it when the allocation is freed.
270 */
271 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
272 static int scratchAllocOut = 0;
273 #endif
274 
275 
276 /*
277 ** Allocate memory that is to be used and released right away.
278 ** This routine is similar to alloca() in that it is not intended
279 ** for situations where the memory might be held long-term.  This
280 ** routine is intended to get memory to old large transient data
281 ** structures that would not normally fit on the stack of an
282 ** embedded processor.
283 */
284 void *sqlite3ScratchMalloc(int n){
285   void *p;
286   assert( n>0 );
287 
288 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
289   /* Verify that no more than one scratch allocation per thread
290   ** is outstanding at one time.  (This is only checked in the
291   ** single-threaded case since checking in the multi-threaded case
292   ** would be much more complicated.) */
293   assert( scratchAllocOut==0 );
294 #endif
295 
296   if( sqlite3Config.szScratch<n ){
297     goto scratch_overflow;
298   }else{
299     sqlite3_mutex_enter(mem0.mutex);
300     if( mem0.nScratchFree==0 ){
301       sqlite3_mutex_leave(mem0.mutex);
302       goto scratch_overflow;
303     }else{
304       int i;
305       i = mem0.aScratchFree[--mem0.nScratchFree];
306       sqlite3_mutex_leave(mem0.mutex);
307       i *= sqlite3Config.szScratch;
308       sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, 1);
309       p = (void*)&((char*)sqlite3Config.pScratch)[i];
310     }
311   }
312 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
313   scratchAllocOut = p!=0;
314 #endif
315 
316   return p;
317 
318 scratch_overflow:
319   if( sqlite3Config.bMemstat ){
320     sqlite3_mutex_enter(mem0.mutex);
321     n = mallocWithAlarm(n, &p);
322     if( p ) sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, n);
323     sqlite3_mutex_leave(mem0.mutex);
324   }else{
325     p = sqlite3Config.m.xMalloc(n);
326   }
327 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
328   scratchAllocOut = p!=0;
329 #endif
330   return p;
331 }
332 void sqlite3ScratchFree(void *p){
333   if( p ){
334 
335 #if SQLITE_THREADSAFE==0 && !defined(NDEBUG)
336     /* Verify that no more than one scratch allocation per thread
337     ** is outstanding at one time.  (This is only checked in the
338     ** single-threaded case since checking in the multi-threaded case
339     ** would be much more complicated.) */
340     assert( scratchAllocOut==1 );
341     scratchAllocOut = 0;
342 #endif
343 
344     if( sqlite3Config.pScratch==0
345            || p<sqlite3Config.pScratch
346            || p>=(void*)mem0.aScratchFree ){
347       if( sqlite3Config.bMemstat ){
348         int iSize = sqlite3MallocSize(p);
349         sqlite3_mutex_enter(mem0.mutex);
350         sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_OVERFLOW, -iSize);
351         sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -iSize);
352         sqlite3Config.m.xFree(p);
353         sqlite3_mutex_leave(mem0.mutex);
354       }else{
355         sqlite3Config.m.xFree(p);
356       }
357     }else{
358       int i;
359       i = (u8 *)p - (u8 *)sqlite3Config.pScratch;
360       i /= sqlite3Config.szScratch;
361       assert( i>=0 && i<sqlite3Config.nScratch );
362       sqlite3_mutex_enter(mem0.mutex);
363       assert( mem0.nScratchFree<sqlite3Config.nScratch );
364       mem0.aScratchFree[mem0.nScratchFree++] = i;
365       sqlite3StatusAdd(SQLITE_STATUS_SCRATCH_USED, -1);
366       sqlite3_mutex_leave(mem0.mutex);
367     }
368   }
369 }
370 
371 /*
372 ** Allocate memory to be used by the page cache.  Make use of the
373 ** memory buffer provided by SQLITE_CONFIG_PAGECACHE if there is one
374 ** and that memory is of the right size and is not completely
375 ** consumed.  Otherwise, failover to sqlite3Malloc().
376 */
377 void *sqlite3PageMalloc(int n){
378   void *p;
379   assert( n>0 );
380   assert( (n & (n-1))==0 );
381   assert( n>=512 && n<=32768 );
382 
383   if( sqlite3Config.szPage<n ){
384     goto page_overflow;
385   }else{
386     sqlite3_mutex_enter(mem0.mutex);
387     if( mem0.nPageFree==0 ){
388       sqlite3_mutex_leave(mem0.mutex);
389       goto page_overflow;
390     }else{
391       int i;
392       i = mem0.aPageFree[--mem0.nPageFree];
393       sqlite3_mutex_leave(mem0.mutex);
394       i *= sqlite3Config.szPage;
395       sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, 1);
396       p = (void*)&((char*)sqlite3Config.pPage)[i];
397     }
398   }
399   return p;
400 
401 page_overflow:
402   if( sqlite3Config.bMemstat ){
403     sqlite3_mutex_enter(mem0.mutex);
404     n = mallocWithAlarm(n, &p);
405     if( p ) sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, n);
406     sqlite3_mutex_leave(mem0.mutex);
407   }else{
408     p = sqlite3Config.m.xMalloc(n);
409   }
410   return p;
411 }
412 void sqlite3PageFree(void *p){
413   if( p ){
414     if( sqlite3Config.pPage==0
415            || p<sqlite3Config.pPage
416            || p>=(void*)mem0.aPageFree ){
417       /* In this case, the page allocation was obtained from a regular
418       ** call to sqlite3_mem_methods.xMalloc() (a page-cache-memory
419       ** "overflow"). Free the block with sqlite3_mem_methods.xFree().
420       */
421       if( sqlite3Config.bMemstat ){
422         int iSize = sqlite3MallocSize(p);
423         sqlite3_mutex_enter(mem0.mutex);
424         sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_OVERFLOW, -iSize);
425         sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -iSize);
426         sqlite3Config.m.xFree(p);
427         sqlite3_mutex_leave(mem0.mutex);
428       }else{
429         sqlite3Config.m.xFree(p);
430       }
431     }else{
432       /* The page allocation was allocated from the sqlite3Config.pPage
433       ** buffer. In this case all that is add the index of the page in
434       ** the sqlite3Config.pPage array to the set of free indexes stored
435       ** in the mem0.aPageFree[] array.
436       */
437       int i;
438       i = (u8 *)p - (u8 *)sqlite3Config.pPage;
439       i /= sqlite3Config.szPage;
440       assert( i>=0 && i<sqlite3Config.nPage );
441       sqlite3_mutex_enter(mem0.mutex);
442       assert( mem0.nPageFree<sqlite3Config.nPage );
443       mem0.aPageFree[mem0.nPageFree++] = i;
444       sqlite3StatusAdd(SQLITE_STATUS_PAGECACHE_USED, -1);
445       sqlite3_mutex_leave(mem0.mutex);
446 #ifndef NDEBUG
447       /* Assert that a duplicate was not just inserted into aPageFree[]. */
448       for(i=0; i<mem0.nPageFree-1; i++){
449         assert( mem0.aPageFree[i]!=mem0.aPageFree[mem0.nPageFree-1] );
450       }
451 #endif
452     }
453   }
454 }
455 
456 /*
457 ** Return the size of a memory allocation previously obtained from
458 ** sqlite3Malloc() or sqlite3_malloc().
459 */
460 int sqlite3MallocSize(void *p){
461   return sqlite3Config.m.xSize(p);
462 }
463 
464 /*
465 ** Free memory previously obtained from sqlite3Malloc().
466 */
467 void sqlite3_free(void *p){
468   if( p==0 ) return;
469   if( sqlite3Config.bMemstat ){
470     sqlite3_mutex_enter(mem0.mutex);
471     sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, -sqlite3MallocSize(p));
472     sqlite3Config.m.xFree(p);
473     sqlite3_mutex_leave(mem0.mutex);
474   }else{
475     sqlite3Config.m.xFree(p);
476   }
477 }
478 
479 /*
480 ** Change the size of an existing memory allocation
481 */
482 void *sqlite3Realloc(void *pOld, int nBytes){
483   int nOld, nNew;
484   void *pNew;
485   if( pOld==0 ){
486     return sqlite3Malloc(nBytes);
487   }
488   if( nBytes<=0 ){
489     sqlite3_free(pOld);
490     return 0;
491   }
492   nOld = sqlite3MallocSize(pOld);
493   if( sqlite3Config.bMemstat ){
494     sqlite3_mutex_enter(mem0.mutex);
495     sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, nBytes);
496     nNew = sqlite3Config.m.xRoundup(nBytes);
497     if( nOld==nNew ){
498       pNew = pOld;
499     }else{
500       if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED)+nNew-nOld >=
501             mem0.alarmThreshold ){
502         sqlite3MallocAlarm(nNew-nOld);
503       }
504       pNew = sqlite3Config.m.xRealloc(pOld, nNew);
505       if( pNew==0 && mem0.alarmCallback ){
506         sqlite3MallocAlarm(nBytes);
507         pNew = sqlite3Config.m.xRealloc(pOld, nNew);
508       }
509       if( pNew ){
510         nNew = sqlite3MallocSize(pNew);
511         sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nNew-nOld);
512       }
513     }
514     sqlite3_mutex_leave(mem0.mutex);
515   }else{
516     pNew = sqlite3Config.m.xRealloc(pOld, nBytes);
517   }
518   return pNew;
519 }
520 
521 /*
522 ** The public interface to sqlite3Realloc.  Make sure that the memory
523 ** subsystem is initialized prior to invoking sqliteRealloc.
524 */
525 void *sqlite3_realloc(void *pOld, int n){
526 #ifndef SQLITE_OMIT_AUTOINIT
527   if( sqlite3_initialize() ) return 0;
528 #endif
529   return sqlite3Realloc(pOld, n);
530 }
531 
532 
533 /*
534 ** Allocate and zero memory.
535 */
536 void *sqlite3MallocZero(int n){
537   void *p = sqlite3Malloc(n);
538   if( p ){
539     memset(p, 0, n);
540   }
541   return p;
542 }
543 
544 /*
545 ** Allocate and zero memory.  If the allocation fails, make
546 ** the mallocFailed flag in the connection pointer.
547 */
548 void *sqlite3DbMallocZero(sqlite3 *db, int n){
549   void *p = sqlite3DbMallocRaw(db, n);
550   if( p ){
551     memset(p, 0, n);
552   }
553   return p;
554 }
555 
556 /*
557 ** Allocate and zero memory.  If the allocation fails, make
558 ** the mallocFailed flag in the connection pointer.
559 */
560 void *sqlite3DbMallocRaw(sqlite3 *db, int n){
561   void *p = 0;
562   if( !db || db->mallocFailed==0 ){
563     p = sqlite3Malloc(n);
564     if( !p && db ){
565       db->mallocFailed = 1;
566     }
567   }
568   return p;
569 }
570 
571 /*
572 ** Resize the block of memory pointed to by p to n bytes. If the
573 ** resize fails, set the mallocFailed flag inthe connection object.
574 */
575 void *sqlite3DbRealloc(sqlite3 *db, void *p, int n){
576   void *pNew = 0;
577   if( db->mallocFailed==0 ){
578     pNew = sqlite3_realloc(p, n);
579     if( !pNew ){
580       db->mallocFailed = 1;
581     }
582   }
583   return pNew;
584 }
585 
586 /*
587 ** Attempt to reallocate p.  If the reallocation fails, then free p
588 ** and set the mallocFailed flag in the database connection.
589 */
590 void *sqlite3DbReallocOrFree(sqlite3 *db, void *p, int n){
591   void *pNew;
592   pNew = sqlite3DbRealloc(db, p, n);
593   if( !pNew ){
594     sqlite3_free(p);
595   }
596   return pNew;
597 }
598 
599 /*
600 ** Make a copy of a string in memory obtained from sqliteMalloc(). These
601 ** functions call sqlite3MallocRaw() directly instead of sqliteMalloc(). This
602 ** is because when memory debugging is turned on, these two functions are
603 ** called via macros that record the current file and line number in the
604 ** ThreadData structure.
605 */
606 char *sqlite3StrDup(const char *z){
607   char *zNew;
608   int n;
609   if( z==0 ) return 0;
610   n = strlen(z)+1;
611   zNew = sqlite3Malloc(n);
612   if( zNew ) memcpy(zNew, z, n);
613   return zNew;
614 }
615 char *sqlite3StrNDup(const char *z, int n){
616   char *zNew;
617   if( z==0 ) return 0;
618   zNew = sqlite3Malloc(n+1);
619   if( zNew ){
620     memcpy(zNew, z, n);
621     zNew[n] = 0;
622   }
623   return zNew;
624 }
625 
626 char *sqlite3DbStrDup(sqlite3 *db, const char *z){
627   char *zNew = sqlite3StrDup(z);
628   if( z && !zNew ){
629     db->mallocFailed = 1;
630   }
631   return zNew;
632 }
633 char *sqlite3DbStrNDup(sqlite3 *db, const char *z, int n){
634   char *zNew = sqlite3StrNDup(z, n);
635   if( z && !zNew ){
636     db->mallocFailed = 1;
637   }
638   return zNew;
639 }
640 
641 /*
642 ** Create a string from the zFromat argument and the va_list that follows.
643 ** Store the string in memory obtained from sqliteMalloc() and make *pz
644 ** point to that string.
645 */
646 void sqlite3SetString(char **pz, sqlite3 *db, const char *zFormat, ...){
647   va_list ap;
648   char *z;
649 
650   va_start(ap, zFormat);
651   z = sqlite3VMPrintf(db, zFormat, ap);
652   va_end(ap);
653   sqlite3_free(*pz);
654   *pz = z;
655 }
656 
657 
658 /*
659 ** This function must be called before exiting any API function (i.e.
660 ** returning control to the user) that has called sqlite3_malloc or
661 ** sqlite3_realloc.
662 **
663 ** The returned value is normally a copy of the second argument to this
664 ** function. However, if a malloc() failure has occured since the previous
665 ** invocation SQLITE_NOMEM is returned instead.
666 **
667 ** If the first argument, db, is not NULL and a malloc() error has occured,
668 ** then the connection error-code (the value returned by sqlite3_errcode())
669 ** is set to SQLITE_NOMEM.
670 */
671 int sqlite3ApiExit(sqlite3* db, int rc){
672   /* If the db handle is not NULL, then we must hold the connection handle
673   ** mutex here. Otherwise the read (and possible write) of db->mallocFailed
674   ** is unsafe, as is the call to sqlite3Error().
675   */
676   assert( !db || sqlite3_mutex_held(db->mutex) );
677   if( db && db->mallocFailed ){
678     sqlite3Error(db, SQLITE_NOMEM, 0);
679     db->mallocFailed = 0;
680     rc = SQLITE_NOMEM;
681   }
682   return rc & (db ? db->errMask : 0xff);
683 }
684