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