/ Hex Artifact Content
Login

Artifact ed5c36588992e63ce5dccdfeb3c8071b8fb34e17:


0000: 2f 2a 0a 2a 2a 20 32 30 30 31 20 53 65 70 74 65  /*.** 2001 Septe
0010: 6d 62 65 72 20 31 35 0a 2a 2a 0a 2a 2a 20 54 68  mber 15.**.** Th
0020: 65 20 61 75 74 68 6f 72 20 64 69 73 63 6c 61 69  e author disclai
0030: 6d 73 20 63 6f 70 79 72 69 67 68 74 20 74 6f 20  ms copyright to 
0040: 74 68 69 73 20 73 6f 75 72 63 65 20 63 6f 64 65  this source code
0050: 2e 20 20 49 6e 20 70 6c 61 63 65 20 6f 66 0a 2a  .  In place of.*
0060: 2a 20 61 20 6c 65 67 61 6c 20 6e 6f 74 69 63 65  * a legal notice
0070: 2c 20 68 65 72 65 20 69 73 20 61 20 62 6c 65 73  , here is a bles
0080: 73 69 6e 67 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 4d  sing:.**.**    M
0090: 61 79 20 79 6f 75 20 64 6f 20 67 6f 6f 64 20 61  ay you do good a
00a0: 6e 64 20 6e 6f 74 20 65 76 69 6c 2e 0a 2a 2a 20  nd not evil..** 
00b0: 20 20 20 4d 61 79 20 79 6f 75 20 66 69 6e 64 20     May you find 
00c0: 66 6f 72 67 69 76 65 6e 65 73 73 20 66 6f 72 20  forgiveness for 
00d0: 79 6f 75 72 73 65 6c 66 20 61 6e 64 20 66 6f 72  yourself and for
00e0: 67 69 76 65 20 6f 74 68 65 72 73 2e 0a 2a 2a 20  give others..** 
00f0: 20 20 20 4d 61 79 20 79 6f 75 20 73 68 61 72 65     May you share
0100: 20 66 72 65 65 6c 79 2c 20 6e 65 76 65 72 20 74   freely, never t
0110: 61 6b 69 6e 67 20 6d 6f 72 65 20 74 68 61 6e 20  aking more than 
0120: 79 6f 75 20 67 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a  you give..**.***
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 2a 2a 2a 2a 2a 0a 2a 2a 0a 2a 2a 20 4d 65 6d  ******.**.** Mem
0180: 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e 20 66  ory allocation f
0190: 75 6e 63 74 69 6f 6e 73 20 75 73 65 64 20 74 68  unctions used th
01a0: 72 6f 75 67 68 6f 75 74 20 73 71 6c 69 74 65 2e  roughout sqlite.
01b0: 0a 2a 2a 0a 2a 2a 20 24 49 64 3a 20 6d 61 6c 6c  .**.** $Id: mall
01c0: 6f 63 2e 63 2c 76 20 31 2e 31 36 20 32 30 30 38  oc.c,v 1.16 2008
01d0: 2f 30 36 2f 31 34 20 31 36 3a 35 36 3a 32 32 20  /06/14 16:56:22 
01e0: 64 72 68 20 45 78 70 20 24 0a 2a 2f 0a 23 69 6e  drh Exp $.*/.#in
01f0: 63 6c 75 64 65 20 22 73 71 6c 69 74 65 49 6e 74  clude "sqliteInt
0200: 2e 68 22 0a 23 69 6e 63 6c 75 64 65 20 3c 73 74  .h".#include <st
0210: 64 61 72 67 2e 68 3e 0a 23 69 6e 63 6c 75 64 65  darg.h>.#include
0220: 20 3c 63 74 79 70 65 2e 68 3e 0a 0a 2f 2a 0a 2a   <ctype.h>../*.*
0230: 2a 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 72  * This routine r
0240: 75 6e 73 20 77 68 65 6e 20 74 68 65 20 6d 65 6d  uns when the mem
0250: 6f 72 79 20 61 6c 6c 6f 63 61 74 6f 72 20 73 65  ory allocator se
0260: 65 73 20 74 68 61 74 20 74 68 65 0a 2a 2a 20 74  es that the.** t
0270: 6f 74 61 6c 20 6d 65 6d 6f 72 79 20 61 6c 6c 6f  otal memory allo
0280: 63 61 74 69 6f 6e 20 69 73 20 61 62 6f 75 74 20  cation is about 
0290: 74 6f 20 65 78 63 65 65 64 20 74 68 65 20 73 6f  to exceed the so
02a0: 66 74 20 68 65 61 70 0a 2a 2a 20 6c 69 6d 69 74  ft heap.** limit
02b0: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
02c0: 20 73 6f 66 74 48 65 61 70 4c 69 6d 69 74 45 6e   softHeapLimitEn
02d0: 66 6f 72 63 65 72 28 0a 20 20 76 6f 69 64 20 2a  forcer(.  void *
02e0: 4e 6f 74 55 73 65 64 2c 20 0a 20 20 73 71 6c 69  NotUsed, .  sqli
02f0: 74 65 33 5f 69 6e 74 36 34 20 69 6e 55 73 65 2c  te3_int64 inUse,
0300: 0a 20 20 69 6e 74 20 61 6c 6c 6f 63 53 69 7a 65  .  int allocSize
0310: 0a 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 72 65  .){.  sqlite3_re
0320: 6c 65 61 73 65 5f 6d 65 6d 6f 72 79 28 61 6c 6c  lease_memory(all
0330: 6f 63 53 69 7a 65 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  ocSize);.}../*.*
0340: 2a 20 53 65 74 20 74 68 65 20 73 6f 66 74 20 68  * Set the soft h
0350: 65 61 70 2d 73 69 7a 65 20 6c 69 6d 69 74 20 66  eap-size limit f
0360: 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
0370: 68 72 65 61 64 2e 20 50 61 73 73 69 6e 67 20 61  hread. Passing a
0380: 0a 2a 2a 20 7a 65 72 6f 20 6f 72 20 6e 65 67 61  .** zero or nega
0390: 74 69 76 65 20 76 61 6c 75 65 20 69 6e 64 69 63  tive value indic
03a0: 61 74 65 73 20 6e 6f 20 6c 69 6d 69 74 2e 0a 2a  ates no limit..*
03b0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 73  /.void sqlite3_s
03c0: 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 28 69  oft_heap_limit(i
03d0: 6e 74 20 6e 29 7b 0a 20 20 73 71 6c 69 74 65 33  nt n){.  sqlite3
03e0: 5f 75 69 6e 74 36 34 20 69 4c 69 6d 69 74 3b 0a  _uint64 iLimit;.
03f0: 20 20 69 6e 74 20 6f 76 65 72 61 67 65 3b 0a 20    int overage;. 
0400: 20 69 66 28 20 6e 3c 30 20 29 7b 0a 20 20 20 20   if( n<0 ){.    
0410: 69 4c 69 6d 69 74 20 3d 20 30 3b 0a 20 20 7d 65  iLimit = 0;.  }e
0420: 6c 73 65 7b 0a 20 20 20 20 69 4c 69 6d 69 74 20  lse{.    iLimit 
0430: 3d 20 6e 3b 0a 20 20 7d 0a 20 20 69 66 28 20 69  = n;.  }.  if( i
0440: 4c 69 6d 69 74 3e 30 20 29 7b 0a 20 20 20 20 73  Limit>0 ){.    s
0450: 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 61 6c  qlite3_memory_al
0460: 61 72 6d 28 73 6f 66 74 48 65 61 70 4c 69 6d 69  arm(softHeapLimi
0470: 74 45 6e 66 6f 72 63 65 72 2c 20 30 2c 20 69 4c  tEnforcer, 0, iL
0480: 69 6d 69 74 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a  imit);.  }else{.
0490: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f      sqlite3_memo
04a0: 72 79 5f 61 6c 61 72 6d 28 30 2c 20 30 2c 20 30  ry_alarm(0, 0, 0
04b0: 29 3b 0a 20 20 7d 0a 20 20 6f 76 65 72 61 67 65  );.  }.  overage
04c0: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72   = sqlite3_memor
04d0: 79 5f 75 73 65 64 28 29 20 2d 20 6e 3b 0a 20 20  y_used() - n;.  
04e0: 69 66 28 20 6f 76 65 72 61 67 65 3e 30 20 29 7b  if( overage>0 ){
04f0: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65 6c  .    sqlite3_rel
0500: 65 61 73 65 5f 6d 65 6d 6f 72 79 28 6f 76 65 72  ease_memory(over
0510: 61 67 65 29 3b 0a 20 20 7d 0a 7d 0a 0a 2f 2a 0a  age);.  }.}../*.
0520: 2a 2a 20 52 65 6c 65 61 73 65 20 6d 65 6d 6f 72  ** Release memor
0530: 79 20 68 65 6c 64 20 62 79 20 53 51 4c 69 74 65  y held by SQLite
0540: 20 69 6e 73 74 61 6e 63 65 73 20 63 72 65 61 74   instances creat
0550: 65 64 20 62 79 20 74 68 65 20 63 75 72 72 65 6e  ed by the curren
0560: 74 20 74 68 72 65 61 64 2e 0a 2a 2f 0a 69 6e 74  t thread..*/.int
0570: 20 73 71 6c 69 74 65 33 5f 72 65 6c 65 61 73 65   sqlite3_release
0580: 5f 6d 65 6d 6f 72 79 28 69 6e 74 20 6e 29 7b 0a  _memory(int n){.
0590: 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e  #ifdef SQLITE_EN
05a0: 41 42 4c 45 5f 4d 45 4d 4f 52 59 5f 4d 41 4e 41  ABLE_MEMORY_MANA
05b0: 47 45 4d 45 4e 54 0a 20 20 69 6e 74 20 6e 52 65  GEMENT.  int nRe
05c0: 74 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 52  t = sqlite3VdbeR
05d0: 65 6c 65 61 73 65 4d 65 6d 6f 72 79 28 6e 29 3b  eleaseMemory(n);
05e0: 0a 20 20 6e 52 65 74 20 2b 3d 20 73 71 6c 69 74  .  nRet += sqlit
05f0: 65 33 50 61 67 65 72 52 65 6c 65 61 73 65 4d 65  e3PagerReleaseMe
0600: 6d 6f 72 79 28 6e 2d 6e 52 65 74 29 3b 0a 20 20  mory(n-nRet);.  
0610: 72 65 74 75 72 6e 20 6e 52 65 74 3b 0a 23 65 6c  return nRet;.#el
0620: 73 65 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  se.  return SQLI
0630: 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 7d 0a  TE_OK;.#endif.}.
0640: 0a 2f 2a 0a 2a 2a 20 53 74 61 74 65 20 69 6e 66  ./*.** State inf
0650: 6f 72 6d 61 74 69 6f 6e 20 6c 6f 63 61 6c 20 74  ormation local t
0660: 6f 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  o the memory all
0670: 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65  ocation subsyste
0680: 6d 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 73 74 72  m..*/.static str
0690: 75 63 74 20 7b 0a 20 20 73 71 6c 69 74 65 33 5f  uct {.  sqlite3_
06a0: 6d 75 74 65 78 20 2a 6d 75 74 65 78 3b 20 20 20  mutex *mutex;   
06b0: 20 20 20 20 20 20 2f 2a 20 4d 75 74 65 78 20 74        /* Mutex t
06c0: 6f 20 73 65 72 69 61 6c 69 7a 65 20 61 63 63 65  o serialize acce
06d0: 73 73 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ss */..  /*.  **
06e0: 20 54 68 65 20 61 6c 61 72 6d 20 63 61 6c 6c 62   The alarm callb
06f0: 61 63 6b 20 61 6e 64 20 69 74 73 20 61 72 67 75  ack and its argu
0700: 6d 65 6e 74 73 2e 20 20 54 68 65 20 6d 65 6d 30  ments.  The mem0
0710: 2e 6d 75 74 65 78 20 6c 6f 63 6b 20 77 69 6c 6c  .mutex lock will
0720: 0a 20 20 2a 2a 20 62 65 20 68 65 6c 64 20 77 68  .  ** be held wh
0730: 69 6c 65 20 74 68 65 20 63 61 6c 6c 62 61 63 6b  ile the callback
0740: 20 69 73 20 72 75 6e 6e 69 6e 67 2e 20 20 52 65   is running.  Re
0750: 63 75 72 73 69 76 65 20 63 61 6c 6c 73 20 69 6e  cursive calls in
0760: 74 6f 0a 20 20 2a 2a 20 74 68 65 20 6d 65 6d 6f  to.  ** the memo
0770: 72 79 20 73 75 62 73 79 73 74 65 6d 20 61 72 65  ry subsystem are
0780: 20 61 6c 6c 6f 77 65 64 2c 20 62 75 74 20 6e 6f   allowed, but no
0790: 20 6e 65 77 20 63 61 6c 6c 62 61 63 6b 73 20 77   new callbacks w
07a0: 69 6c 6c 20 62 65 0a 20 20 2a 2a 20 69 73 73 75  ill be.  ** issu
07b0: 65 64 2e 20 20 54 68 65 20 61 6c 61 72 6d 42 75  ed.  The alarmBu
07c0: 73 79 20 76 61 72 69 61 62 6c 65 20 69 73 20 73  sy variable is s
07d0: 65 74 20 74 6f 20 70 72 65 76 65 6e 74 20 72 65  et to prevent re
07e0: 63 75 72 73 69 76 65 0a 20 20 2a 2a 20 63 61 6c  cursive.  ** cal
07f0: 6c 62 61 63 6b 73 2e 0a 20 20 2a 2f 0a 20 20 73  lbacks..  */.  s
0800: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 61 6c 61  qlite3_int64 ala
0810: 72 6d 54 68 72 65 73 68 6f 6c 64 3b 0a 20 20 76  rmThreshold;.  v
0820: 6f 69 64 20 28 2a 61 6c 61 72 6d 43 61 6c 6c 62  oid (*alarmCallb
0830: 61 63 6b 29 28 76 6f 69 64 2a 2c 20 73 71 6c 69  ack)(void*, sqli
0840: 74 65 33 5f 69 6e 74 36 34 2c 69 6e 74 29 3b 0a  te3_int64,int);.
0850: 20 20 76 6f 69 64 20 2a 61 6c 61 72 6d 41 72 67    void *alarmArg
0860: 3b 0a 20 20 69 6e 74 20 61 6c 61 72 6d 42 75 73  ;.  int alarmBus
0870: 79 3b 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 50 65  y;..  /*.  ** Pe
0880: 72 66 6f 72 6d 61 6e 63 65 20 73 74 61 74 69 73  rformance statis
0890: 74 69 63 73 0a 20 20 2a 2f 0a 20 20 73 71 6c 69  tics.  */.  sqli
08a0: 74 65 33 5f 69 6e 74 36 34 20 6e 6f 77 55 73 65  te3_int64 nowUse
08b0: 64 3b 20 20 2f 2a 20 4d 61 69 6e 20 6d 65 6d 6f  d;  /* Main memo
08c0: 72 79 20 63 75 72 72 65 6e 74 6c 79 20 69 6e 20  ry currently in 
08d0: 75 73 65 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33  use */.  sqlite3
08e0: 5f 69 6e 74 36 34 20 6d 78 55 73 65 64 3b 20 20  _int64 mxUsed;  
08f0: 20 2f 2a 20 48 69 67 68 77 61 74 65 72 20 6d 61   /* Highwater ma
0900: 72 6b 20 66 6f 72 20 6e 6f 77 55 73 65 64 20 2a  rk for nowUsed *
0910: 2f 0a 20 20 69 6e 74 20 6d 78 52 65 71 3b 20 20  /.  int mxReq;  
0920: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 6d              /* m
0930: 61 78 69 6d 75 6d 20 72 65 71 75 65 73 74 20 73  aximum request s
0940: 69 7a 65 20 66 6f 72 20 6d 61 69 6e 20 6f 72 20  ize for main or 
0950: 70 61 67 65 2d 63 61 63 68 65 20 6d 65 6d 20 2a  page-cache mem *
0960: 2f 0a 7d 20 6d 65 6d 30 3b 0a 0a 2f 2a 0a 2a 2a  /.} mem0;../*.**
0970: 20 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20   Initialize the 
0980: 6d 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f  memory allocatio
0990: 6e 20 73 75 62 73 79 73 74 65 6d 2e 0a 2a 2f 0a  n subsystem..*/.
09a0: 69 6e 74 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f  int sqlite3Mallo
09b0: 63 49 6e 69 74 28 76 6f 69 64 29 7b 0a 20 20 69  cInit(void){.  i
09c0: 66 28 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  f( sqlite3Config
09d0: 2e 6d 2e 78 4d 61 6c 6c 6f 63 3d 3d 30 20 29 7b  .m.xMalloc==0 ){
09e0: 0a 20 20 20 20 73 71 6c 69 74 65 33 4d 65 6d 53  .    sqlite3MemS
09f0: 65 74 44 65 66 61 75 6c 74 28 29 3b 0a 20 20 7d  etDefault();.  }
0a00: 0a 20 20 6d 65 6d 73 65 74 28 26 6d 65 6d 30 2c  .  memset(&mem0,
0a10: 20 30 2c 20 73 69 7a 65 6f 66 28 6d 65 6d 30 29   0, sizeof(mem0)
0a20: 29 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  );.  if( sqlite3
0a30: 43 6f 6e 66 69 67 2e 62 4d 65 6d 73 74 61 74 20  Config.bMemstat 
0a40: 26 26 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  && sqlite3Config
0a50: 2e 62 43 6f 72 65 4d 75 74 65 78 20 29 7b 0a 20  .bCoreMutex ){. 
0a60: 20 20 20 6d 65 6d 30 2e 6d 75 74 65 78 20 3d 20     mem0.mutex = 
0a70: 73 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 61 6c  sqlite3_mutex_al
0a80: 6c 6f 63 28 53 51 4c 49 54 45 5f 4d 55 54 45 58  loc(SQLITE_MUTEX
0a90: 5f 53 54 41 54 49 43 5f 4d 45 4d 29 3b 0a 20 20  _STATIC_MEM);.  
0aa0: 7d 0a 20 20 72 65 74 75 72 6e 20 73 71 6c 69 74  }.  return sqlit
0ab0: 65 33 43 6f 6e 66 69 67 2e 6d 2e 78 49 6e 69 74  e3Config.m.xInit
0ac0: 28 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6d  (sqlite3Config.m
0ad0: 2e 70 41 70 70 44 61 74 61 29 3b 0a 7d 0a 0a 2f  .pAppData);.}../
0ae0: 2a 0a 2a 2a 20 44 65 69 6e 69 74 69 61 6c 69 7a  *.** Deinitializ
0af0: 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 61 6c 6c  e the memory all
0b00: 6f 63 61 74 69 6f 6e 20 73 75 62 73 79 73 74 65  ocation subsyste
0b10: 6d 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69 74  m..*/.void sqlit
0b20: 65 33 4d 61 6c 6c 6f 63 45 6e 64 28 76 6f 69 64  e3MallocEnd(void
0b30: 29 7b 0a 20 20 20 73 71 6c 69 74 65 33 43 6f 6e  ){.   sqlite3Con
0b40: 66 69 67 2e 6d 2e 78 53 68 75 74 64 6f 77 6e 28  fig.m.xShutdown(
0b50: 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6d 2e  sqlite3Config.m.
0b60: 70 41 70 70 44 61 74 61 29 3b 0a 7d 0a 0a 2f 2a  pAppData);.}../*
0b70: 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 61  .** Return the a
0b80: 6d 6f 75 6e 74 20 6f 66 20 6d 65 6d 6f 72 79 20  mount of memory 
0b90: 63 75 72 72 65 6e 74 6c 79 20 63 68 65 63 6b 65  currently checke
0ba0: 64 20 6f 75 74 2e 0a 2a 2f 0a 73 71 6c 69 74 65  d out..*/.sqlite
0bb0: 33 5f 69 6e 74 36 34 20 73 71 6c 69 74 65 33 5f  3_int64 sqlite3_
0bc0: 6d 65 6d 6f 72 79 5f 75 73 65 64 28 76 6f 69 64  memory_used(void
0bd0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  ){.  sqlite3_int
0be0: 36 34 20 6e 3b 0a 20 20 73 71 6c 69 74 65 33 5f  64 n;.  sqlite3_
0bf0: 6d 75 74 65 78 5f 65 6e 74 65 72 28 6d 65 6d 30  mutex_enter(mem0
0c00: 2e 6d 75 74 65 78 29 3b 0a 20 20 6e 20 3d 20 6d  .mutex);.  n = m
0c10: 65 6d 30 2e 6e 6f 77 55 73 65 64 3b 0a 20 20 73  em0.nowUsed;.  s
0c20: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
0c30: 76 65 28 6d 65 6d 30 2e 6d 75 74 65 78 29 3b 20  ve(mem0.mutex); 
0c40: 20 0a 20 20 72 65 74 75 72 6e 20 6e 3b 0a 7d 0a   .  return n;.}.
0c50: 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e 20 74 68  ./*.** Return th
0c60: 65 20 6d 61 78 69 6d 75 6d 20 61 6d 6f 75 6e 74  e maximum amount
0c70: 20 6f 66 20 6d 65 6d 6f 72 79 20 74 68 61 74 20   of memory that 
0c80: 68 61 73 20 65 76 65 72 20 62 65 65 6e 0a 2a 2a  has ever been.**
0c90: 20 63 68 65 63 6b 65 64 20 6f 75 74 20 73 69 6e   checked out sin
0ca0: 63 65 20 65 69 74 68 65 72 20 74 68 65 20 62 65  ce either the be
0cb0: 67 69 6e 6e 69 6e 67 20 6f 66 20 74 68 69 73 20  ginning of this 
0cc0: 70 72 6f 63 65 73 73 0a 2a 2a 20 6f 72 20 73 69  process.** or si
0cd0: 6e 63 65 20 74 68 65 20 6d 6f 73 74 20 72 65 63  nce the most rec
0ce0: 65 6e 74 20 72 65 73 65 74 2e 0a 2a 2f 0a 73 71  ent reset..*/.sq
0cf0: 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 71 6c 69  lite3_int64 sqli
0d00: 74 65 33 5f 6d 65 6d 6f 72 79 5f 68 69 67 68 77  te3_memory_highw
0d10: 61 74 65 72 28 69 6e 74 20 72 65 73 65 74 46 6c  ater(int resetFl
0d20: 61 67 29 7b 0a 20 20 73 71 6c 69 74 65 33 5f 69  ag){.  sqlite3_i
0d30: 6e 74 36 34 20 6e 3b 0a 20 20 73 71 6c 69 74 65  nt64 n;.  sqlite
0d40: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 6d 65  3_mutex_enter(me
0d50: 6d 30 2e 6d 75 74 65 78 29 3b 0a 20 20 6e 20 3d  m0.mutex);.  n =
0d60: 20 6d 65 6d 30 2e 6d 78 55 73 65 64 3b 0a 20 20   mem0.mxUsed;.  
0d70: 69 66 28 20 72 65 73 65 74 46 6c 61 67 20 29 7b  if( resetFlag ){
0d80: 0a 20 20 20 20 6d 65 6d 30 2e 6d 78 55 73 65 64  .    mem0.mxUsed
0d90: 20 3d 20 6d 65 6d 30 2e 6e 6f 77 55 73 65 64 3b   = mem0.nowUsed;
0da0: 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33 5f 6d  .  }.  sqlite3_m
0db0: 75 74 65 78 5f 6c 65 61 76 65 28 6d 65 6d 30 2e  utex_leave(mem0.
0dc0: 6d 75 74 65 78 29 3b 20 20 0a 20 20 72 65 74 75  mutex);  .  retu
0dd0: 72 6e 20 6e 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43  rn n;.}../*.** C
0de0: 68 61 6e 67 65 20 74 68 65 20 61 6c 61 72 6d 20  hange the alarm 
0df0: 63 61 6c 6c 62 61 63 6b 0a 2a 2f 0a 69 6e 74 20  callback.*/.int 
0e00: 73 71 6c 69 74 65 33 5f 6d 65 6d 6f 72 79 5f 61  sqlite3_memory_a
0e10: 6c 61 72 6d 28 0a 20 20 76 6f 69 64 28 2a 78 43  larm(.  void(*xC
0e20: 61 6c 6c 62 61 63 6b 29 28 76 6f 69 64 20 2a 70  allback)(void *p
0e30: 41 72 67 2c 20 73 71 6c 69 74 65 33 5f 69 6e 74  Arg, sqlite3_int
0e40: 36 34 20 75 73 65 64 2c 69 6e 74 20 4e 29 2c 0a  64 used,int N),.
0e50: 20 20 76 6f 69 64 20 2a 70 41 72 67 2c 0a 20 20    void *pArg,.  
0e60: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 69 54  sqlite3_int64 iT
0e70: 68 72 65 73 68 6f 6c 64 0a 29 7b 0a 20 20 73 71  hreshold.){.  sq
0e80: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
0e90: 72 28 6d 65 6d 30 2e 6d 75 74 65 78 29 3b 0a 20  r(mem0.mutex);. 
0ea0: 20 6d 65 6d 30 2e 61 6c 61 72 6d 43 61 6c 6c 62   mem0.alarmCallb
0eb0: 61 63 6b 20 3d 20 78 43 61 6c 6c 62 61 63 6b 3b  ack = xCallback;
0ec0: 0a 20 20 6d 65 6d 30 2e 61 6c 61 72 6d 41 72 67  .  mem0.alarmArg
0ed0: 20 3d 20 70 41 72 67 3b 0a 20 20 6d 65 6d 30 2e   = pArg;.  mem0.
0ee0: 61 6c 61 72 6d 54 68 72 65 73 68 6f 6c 64 20 3d  alarmThreshold =
0ef0: 20 69 54 68 72 65 73 68 6f 6c 64 3b 0a 20 20 73   iThreshold;.  s
0f00: 71 6c 69 74 65 33 5f 6d 75 74 65 78 5f 6c 65 61  qlite3_mutex_lea
0f10: 76 65 28 6d 65 6d 30 2e 6d 75 74 65 78 29 3b 0a  ve(mem0.mutex);.
0f20: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
0f30: 4f 4b 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 72 69  OK;.}../*.** Tri
0f40: 67 67 65 72 20 74 68 65 20 61 6c 61 72 6d 20 0a  gger the alarm .
0f50: 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73  */.static void s
0f60: 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 41 6c 61 72  qlite3MallocAlar
0f70: 6d 28 69 6e 74 20 6e 42 79 74 65 29 7b 0a 20 20  m(int nByte){.  
0f80: 76 6f 69 64 20 28 2a 78 43 61 6c 6c 62 61 63 6b  void (*xCallback
0f90: 29 28 76 6f 69 64 2a 2c 73 71 6c 69 74 65 33 5f  )(void*,sqlite3_
0fa0: 69 6e 74 36 34 2c 69 6e 74 29 3b 0a 20 20 73 71  int64,int);.  sq
0fb0: 6c 69 74 65 33 5f 69 6e 74 36 34 20 6e 6f 77 55  lite3_int64 nowU
0fc0: 73 65 64 3b 0a 20 20 76 6f 69 64 20 2a 70 41 72  sed;.  void *pAr
0fd0: 67 3b 0a 20 20 69 66 28 20 6d 65 6d 30 2e 61 6c  g;.  if( mem0.al
0fe0: 61 72 6d 43 61 6c 6c 62 61 63 6b 3d 3d 30 20 7c  armCallback==0 |
0ff0: 7c 20 6d 65 6d 30 2e 61 6c 61 72 6d 42 75 73 79  | mem0.alarmBusy
1000: 20 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 6d 65    ) return;.  me
1010: 6d 30 2e 61 6c 61 72 6d 42 75 73 79 20 3d 20 31  m0.alarmBusy = 1
1020: 3b 0a 20 20 78 43 61 6c 6c 62 61 63 6b 20 3d 20  ;.  xCallback = 
1030: 6d 65 6d 30 2e 61 6c 61 72 6d 43 61 6c 6c 62 61  mem0.alarmCallba
1040: 63 6b 3b 0a 20 20 6e 6f 77 55 73 65 64 20 3d 20  ck;.  nowUsed = 
1050: 6d 65 6d 30 2e 6e 6f 77 55 73 65 64 3b 0a 20 20  mem0.nowUsed;.  
1060: 70 41 72 67 20 3d 20 6d 65 6d 30 2e 61 6c 61 72  pArg = mem0.alar
1070: 6d 41 72 67 3b 0a 20 20 73 71 6c 69 74 65 33 5f  mArg;.  sqlite3_
1080: 6d 75 74 65 78 5f 6c 65 61 76 65 28 6d 65 6d 30  mutex_leave(mem0
1090: 2e 6d 75 74 65 78 29 3b 0a 20 20 78 43 61 6c 6c  .mutex);.  xCall
10a0: 62 61 63 6b 28 70 41 72 67 2c 20 6e 6f 77 55 73  back(pArg, nowUs
10b0: 65 64 2c 20 6e 42 79 74 65 29 3b 0a 20 20 73 71  ed, nByte);.  sq
10c0: 6c 69 74 65 33 5f 6d 75 74 65 78 5f 65 6e 74 65  lite3_mutex_ente
10d0: 72 28 6d 65 6d 30 2e 6d 75 74 65 78 29 3b 0a 20  r(mem0.mutex);. 
10e0: 20 6d 65 6d 30 2e 61 6c 61 72 6d 42 75 73 79 20   mem0.alarmBusy 
10f0: 3d 20 30 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 41  = 0;.}.../*.** A
1100: 6c 6c 6f 63 61 74 65 20 6d 65 6d 6f 72 79 2e 20  llocate memory. 
1110: 20 54 68 69 73 20 72 6f 75 74 69 6e 65 20 69 73   This routine is
1120: 20 6c 69 6b 65 20 73 71 6c 69 74 65 33 5f 6d 61   like sqlite3_ma
1130: 6c 6c 6f 63 28 29 20 65 78 63 65 70 74 20 74 68  lloc() except th
1140: 61 74 20 69 74 0a 2a 2a 20 61 73 73 75 6d 65 73  at it.** assumes
1150: 20 74 68 65 20 6d 65 6d 6f 72 79 20 73 75 62 73   the memory subs
1160: 79 73 74 65 6d 20 68 61 73 20 61 6c 72 65 61 64  ystem has alread
1170: 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  y been initializ
1180: 65 64 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c  ed..*/.void *sql
1190: 69 74 65 33 4d 61 6c 6c 6f 63 28 69 6e 74 20 6e  ite3Malloc(int n
11a0: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 3b 0a 20 20  ){.  void *p;.  
11b0: 69 6e 74 20 6e 46 75 6c 6c 3b 0a 20 20 69 66 28  int nFull;.  if(
11c0: 20 6e 3c 3d 30 20 29 7b 0a 20 20 20 20 72 65 74   n<=0 ){.    ret
11d0: 75 72 6e 20 30 3b 0a 20 20 7d 65 6c 73 65 20 69  urn 0;.  }else i
11e0: 66 28 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67  f( sqlite3Config
11f0: 2e 62 4d 65 6d 73 74 61 74 20 29 7b 0a 20 20 20  .bMemstat ){.   
1200: 20 6e 46 75 6c 6c 20 3d 20 73 71 6c 69 74 65 33   nFull = sqlite3
1210: 43 6f 6e 66 69 67 2e 6d 2e 78 52 6f 75 6e 64 75  Config.m.xRoundu
1220: 70 28 6e 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  p(n);.    sqlite
1230: 33 5f 6d 75 74 65 78 5f 65 6e 74 65 72 28 6d 65  3_mutex_enter(me
1240: 6d 30 2e 6d 75 74 65 78 29 3b 0a 20 20 20 20 69  m0.mutex);.    i
1250: 66 28 20 6e 3e 6d 65 6d 30 2e 6d 78 52 65 71 20  f( n>mem0.mxReq 
1260: 29 20 6d 65 6d 30 2e 6d 78 52 65 71 20 3d 20 6e  ) mem0.mxReq = n
1270: 3b 0a 20 20 20 20 69 66 28 20 6d 65 6d 30 2e 61  ;.    if( mem0.a
1280: 6c 61 72 6d 43 61 6c 6c 62 61 63 6b 21 3d 30 20  larmCallback!=0 
1290: 26 26 20 6d 65 6d 30 2e 6e 6f 77 55 73 65 64 2b  && mem0.nowUsed+
12a0: 6e 46 75 6c 6c 3e 3d 6d 65 6d 30 2e 61 6c 61 72  nFull>=mem0.alar
12b0: 6d 54 68 72 65 73 68 6f 6c 64 20 29 7b 0a 20 20  mThreshold ){.  
12c0: 20 20 20 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f      sqlite3Mallo
12d0: 63 41 6c 61 72 6d 28 6e 46 75 6c 6c 29 3b 0a 20  cAlarm(nFull);. 
12e0: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 73 71 6c     }.    if( sql
12f0: 69 74 65 33 46 61 75 6c 74 53 74 65 70 28 53 51  ite3FaultStep(SQ
1300: 4c 49 54 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54  LITE_FAULTINJECT
1310: 4f 52 5f 4d 41 4c 4c 4f 43 29 20 29 7b 0a 20 20  OR_MALLOC) ){.  
1320: 20 20 20 20 70 20 3d 20 30 3b 0a 20 20 20 20 7d      p = 0;.    }
1330: 65 6c 73 65 7b 0a 20 20 20 20 20 20 70 20 3d 20  else{.      p = 
1340: 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e 6d 2e  sqlite3Config.m.
1350: 78 4d 61 6c 6c 6f 63 28 6e 46 75 6c 6c 29 3b 0a  xMalloc(nFull);.
1360: 20 20 20 20 20 20 69 66 28 20 70 3d 3d 30 20 29        if( p==0 )
1370: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
1380: 33 4d 61 6c 6c 6f 63 41 6c 61 72 6d 28 6e 46 75  3MallocAlarm(nFu
1390: 6c 6c 29 3b 0a 20 20 20 20 20 20 20 20 70 20 3d  ll);.        p =
13a0: 20 6d 61 6c 6c 6f 63 28 6e 46 75 6c 6c 29 3b 0a   malloc(nFull);.
13b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
13c0: 20 20 69 66 28 20 70 20 29 7b 0a 20 20 20 20 20    if( p ){.     
13d0: 20 6d 65 6d 30 2e 6e 6f 77 55 73 65 64 20 2b 3d   mem0.nowUsed +=
13e0: 20 6e 46 75 6c 6c 3b 0a 20 20 20 20 20 20 69 66   nFull;.      if
13f0: 28 20 6d 65 6d 30 2e 6e 6f 77 55 73 65 64 3e 6d  ( mem0.nowUsed>m
1400: 65 6d 30 2e 6d 78 55 73 65 64 20 29 7b 0a 20 20  em0.mxUsed ){.  
1410: 20 20 20 20 20 20 6d 65 6d 30 2e 6d 78 55 73 65        mem0.mxUse
1420: 64 20 3d 20 6d 65 6d 30 2e 6e 6f 77 55 73 65 64  d = mem0.nowUsed
1430: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
1440: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
1450: 78 5f 6c 65 61 76 65 28 6d 65 6d 30 2e 6d 75 74  x_leave(mem0.mut
1460: 65 78 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ex);.  }else{.  
1470: 20 20 70 20 3d 20 73 71 6c 69 74 65 33 43 6f 6e    p = sqlite3Con
1480: 66 69 67 2e 6d 2e 78 4d 61 6c 6c 6f 63 28 6e 29  fig.m.xMalloc(n)
1490: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70  ;.  }.  return p
14a0: 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 69 73 20  ;.}../*.** This 
14b0: 76 65 72 73 69 6f 6e 20 6f 66 20 74 68 65 20 6d  version of the m
14c0: 65 6d 6f 72 79 20 61 6c 6c 6f 63 61 74 69 6f 6e  emory allocation
14d0: 20 69 73 20 66 6f 72 20 75 73 65 20 62 79 20 74   is for use by t
14e0: 68 65 20 61 70 70 6c 69 63 61 74 69 6f 6e 2e 0a  he application..
14f0: 2a 2a 20 46 69 72 73 74 20 6d 61 6b 65 20 73 75  ** First make su
1500: 72 65 20 74 68 65 20 6d 65 6d 6f 72 79 20 73 75  re the memory su
1510: 62 73 79 73 74 65 6d 20 69 73 20 69 6e 69 74 69  bsystem is initi
1520: 61 6c 69 7a 65 64 2c 20 74 68 65 6e 20 64 6f 20  alized, then do 
1530: 74 68 65 0a 2a 2a 20 61 6c 6c 6f 63 61 74 69 6f  the.** allocatio
1540: 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  n..*/.void *sqli
1550: 74 65 33 5f 6d 61 6c 6c 6f 63 28 69 6e 74 20 6e  te3_malloc(int n
1560: 29 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ){.#ifndef SQLIT
1570: 45 5f 4f 4d 49 54 5f 41 55 54 4f 49 4e 49 54 0a  E_OMIT_AUTOINIT.
1580: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 69 6e    if( sqlite3_in
1590: 69 74 69 61 6c 69 7a 65 28 29 20 29 20 72 65 74  itialize() ) ret
15a0: 75 72 6e 20 30 3b 0a 23 65 6e 64 69 66 0a 20 20  urn 0;.#endif.  
15b0: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4d 61  return sqlite3Ma
15c0: 6c 6c 6f 63 28 6e 29 3b 0a 7d 0a 0a 2f 2a 0a 2a  lloc(n);.}../*.*
15d0: 2a 20 52 65 74 75 72 6e 20 74 68 65 20 73 69 7a  * Return the siz
15e0: 65 20 6f 66 20 61 20 6d 65 6d 6f 72 79 20 61 6c  e of a memory al
15f0: 6c 6f 63 61 74 69 6f 6e 20 70 72 65 76 69 6f 75  location previou
1600: 73 6c 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f  sly obtained fro
1610: 6d 0a 2a 2a 20 73 71 6c 69 74 65 33 4d 61 6c 6c  m.** sqlite3Mall
1620: 6f 63 28 29 20 6f 72 20 73 71 6c 69 74 65 33 5f  oc() or sqlite3_
1630: 6d 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 69 6e 74  malloc()..*/.int
1640: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 53 69   sqlite3MallocSi
1650: 7a 65 28 76 6f 69 64 20 2a 70 29 7b 0a 20 20 72  ze(void *p){.  r
1660: 65 74 75 72 6e 20 73 71 6c 69 74 65 33 43 6f 6e  eturn sqlite3Con
1670: 66 69 67 2e 6d 2e 78 53 69 7a 65 28 70 29 3b 0a  fig.m.xSize(p);.
1680: 7d 0a 0a 2f 2a 0a 2a 2a 20 46 72 65 65 20 6d 65  }../*.** Free me
1690: 6d 6f 72 79 20 70 72 65 76 69 6f 75 73 6c 79 20  mory previously 
16a0: 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 20 73 71  obtained from sq
16b0: 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 29 2e 0a 2a  lite3Malloc()..*
16c0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 5f 66  /.void sqlite3_f
16d0: 72 65 65 28 76 6f 69 64 20 2a 70 29 7b 0a 20 20  ree(void *p){.  
16e0: 69 66 28 20 70 3d 3d 30 20 29 20 72 65 74 75 72  if( p==0 ) retur
16f0: 6e 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  n;.  if( sqlite3
1700: 43 6f 6e 66 69 67 2e 62 4d 65 6d 73 74 61 74 20  Config.bMemstat 
1710: 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d  ){.    sqlite3_m
1720: 75 74 65 78 5f 65 6e 74 65 72 28 6d 65 6d 30 2e  utex_enter(mem0.
1730: 6d 75 74 65 78 29 3b 0a 20 20 20 20 6d 65 6d 30  mutex);.    mem0
1740: 2e 6e 6f 77 55 73 65 64 20 2d 3d 20 73 71 6c 69  .nowUsed -= sqli
1750: 74 65 33 4d 61 6c 6c 6f 63 53 69 7a 65 28 70 29  te3MallocSize(p)
1760: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6e  ;.    sqlite3Con
1770: 66 69 67 2e 6d 2e 78 46 72 65 65 28 70 29 3b 0a  fig.m.xFree(p);.
1780: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
1790: 78 5f 6c 65 61 76 65 28 6d 65 6d 30 2e 6d 75 74  x_leave(mem0.mut
17a0: 65 78 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ex);.  }else{.  
17b0: 20 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e    sqlite3Config.
17c0: 6d 2e 78 46 72 65 65 28 70 29 3b 0a 20 20 7d 0a  m.xFree(p);.  }.
17d0: 7d 0a 0a 2f 2a 0a 2a 2a 20 43 68 61 6e 67 65 20  }../*.** Change 
17e0: 74 68 65 20 73 69 7a 65 20 6f 66 20 61 6e 20 65  the size of an e
17f0: 78 69 73 74 69 6e 67 20 6d 65 6d 6f 72 79 20 61  xisting memory a
1800: 6c 6c 6f 63 61 74 69 6f 6e 0a 2a 2f 0a 76 6f 69  llocation.*/.voi
1810: 64 20 2a 73 71 6c 69 74 65 33 52 65 61 6c 6c 6f  d *sqlite3Reallo
1820: 63 28 76 6f 69 64 20 2a 70 4f 6c 64 2c 20 69 6e  c(void *pOld, in
1830: 74 20 6e 42 79 74 65 73 29 7b 0a 20 20 69 6e 74  t nBytes){.  int
1840: 20 6e 4f 6c 64 2c 20 6e 4e 65 77 3b 0a 20 20 76   nOld, nNew;.  v
1850: 6f 69 64 20 2a 70 4e 65 77 3b 0a 20 20 69 66 28  oid *pNew;.  if(
1860: 20 70 4f 6c 64 3d 3d 30 20 29 7b 0a 20 20 20 20   pOld==0 ){.    
1870: 72 65 74 75 72 6e 20 73 71 6c 69 74 65 33 4d 61  return sqlite3Ma
1880: 6c 6c 6f 63 28 6e 42 79 74 65 73 29 3b 0a 20 20  lloc(nBytes);.  
1890: 7d 0a 20 20 69 66 28 20 6e 42 79 74 65 73 3c 3d  }.  if( nBytes<=
18a0: 30 20 29 7b 0a 20 20 20 20 73 71 6c 69 74 65 33  0 ){.    sqlite3
18b0: 5f 66 72 65 65 28 70 4f 6c 64 29 3b 0a 20 20 20  _free(pOld);.   
18c0: 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d 0a 20   return 0;.  }. 
18d0: 20 6e 4f 6c 64 20 3d 20 73 71 6c 69 74 65 33 4d   nOld = sqlite3M
18e0: 61 6c 6c 6f 63 53 69 7a 65 28 70 4f 6c 64 29 3b  allocSize(pOld);
18f0: 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 43 6f  .  if( sqlite3Co
1900: 6e 66 69 67 2e 62 4d 65 6d 73 74 61 74 20 29 7b  nfig.bMemstat ){
1910: 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74  .    sqlite3_mut
1920: 65 78 5f 65 6e 74 65 72 28 6d 65 6d 30 2e 6d 75  ex_enter(mem0.mu
1930: 74 65 78 29 3b 0a 20 20 20 20 69 66 28 20 6e 42  tex);.    if( nB
1940: 79 74 65 73 3e 6d 65 6d 30 2e 6d 78 52 65 71 20  ytes>mem0.mxReq 
1950: 29 20 6d 65 6d 30 2e 6d 78 52 65 71 20 3d 20 6e  ) mem0.mxReq = n
1960: 42 79 74 65 73 3b 0a 20 20 20 20 6e 4e 65 77 20  Bytes;.    nNew 
1970: 3d 20 73 71 6c 69 74 65 33 43 6f 6e 66 69 67 2e  = sqlite3Config.
1980: 6d 2e 78 52 6f 75 6e 64 75 70 28 6e 42 79 74 65  m.xRoundup(nByte
1990: 73 29 3b 0a 20 20 20 20 69 66 28 20 6e 4f 6c 64  s);.    if( nOld
19a0: 3d 3d 6e 4e 65 77 20 29 7b 0a 20 20 20 20 20 20  ==nNew ){.      
19b0: 70 4e 65 77 20 3d 20 70 4f 6c 64 3b 0a 20 20 20  pNew = pOld;.   
19c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
19d0: 28 20 6d 65 6d 30 2e 6e 6f 77 55 73 65 64 2b 6e  ( mem0.nowUsed+n
19e0: 4e 65 77 2d 6e 4f 6c 64 3e 3d 6d 65 6d 30 2e 61  New-nOld>=mem0.a
19f0: 6c 61 72 6d 54 68 72 65 73 68 6f 6c 64 20 29 7b  larmThreshold ){
1a00: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
1a10: 4d 61 6c 6c 6f 63 41 6c 61 72 6d 28 6e 4e 65 77  MallocAlarm(nNew
1a20: 2d 6e 4f 6c 64 29 3b 0a 20 20 20 20 20 20 7d 0a  -nOld);.      }.
1a30: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
1a40: 33 46 61 75 6c 74 53 74 65 70 28 53 51 4c 49 54  3FaultStep(SQLIT
1a50: 45 5f 46 41 55 4c 54 49 4e 4a 45 43 54 4f 52 5f  E_FAULTINJECTOR_
1a60: 4d 41 4c 4c 4f 43 29 20 29 7b 0a 20 20 20 20 20  MALLOC) ){.     
1a70: 20 20 20 70 4e 65 77 20 3d 20 30 3b 0a 20 20 20     pNew = 0;.   
1a80: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
1a90: 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    pNew = sqlite3
1aa0: 43 6f 6e 66 69 67 2e 6d 2e 78 52 65 61 6c 6c 6f  Config.m.xReallo
1ab0: 63 28 70 4f 6c 64 2c 20 6e 4e 65 77 29 3b 0a 20  c(pOld, nNew);. 
1ac0: 20 20 20 20 20 20 20 69 66 28 20 70 4e 65 77 3d         if( pNew=
1ad0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
1ae0: 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 41 6c 61  sqlite3MallocAla
1af0: 72 6d 28 6e 42 79 74 65 73 29 3b 0a 20 20 20 20  rm(nBytes);.    
1b00: 20 20 20 20 20 20 70 4e 65 77 20 3d 20 73 71 6c        pNew = sql
1b10: 69 74 65 33 43 6f 6e 66 69 67 2e 6d 2e 78 52 65  ite3Config.m.xRe
1b20: 61 6c 6c 6f 63 28 70 4f 6c 64 2c 20 6e 4e 65 77  alloc(pOld, nNew
1b30: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
1b40: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
1b50: 4e 65 77 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  New ){.        m
1b60: 65 6d 30 2e 6e 6f 77 55 73 65 64 20 2b 3d 20 6e  em0.nowUsed += n
1b70: 4e 65 77 2d 6e 4f 6c 64 3b 0a 20 20 20 20 20 20  New-nOld;.      
1b80: 20 20 69 66 28 20 6d 65 6d 30 2e 6e 6f 77 55 73    if( mem0.nowUs
1b90: 65 64 3e 6d 65 6d 30 2e 6d 78 55 73 65 64 20 29  ed>mem0.mxUsed )
1ba0: 7b 0a 20 20 20 20 20 20 20 20 20 20 6d 65 6d 30  {.          mem0
1bb0: 2e 6d 78 55 73 65 64 20 3d 20 6d 65 6d 30 2e 6e  .mxUsed = mem0.n
1bc0: 6f 77 55 73 65 64 3b 0a 20 20 20 20 20 20 20 20  owUsed;.        
1bd0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
1be0: 20 20 20 20 73 71 6c 69 74 65 33 5f 6d 75 74 65      sqlite3_mute
1bf0: 78 5f 6c 65 61 76 65 28 6d 65 6d 30 2e 6d 75 74  x_leave(mem0.mut
1c00: 65 78 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20  ex);.  }else{.  
1c10: 20 20 70 4e 65 77 20 3d 20 73 71 6c 69 74 65 33    pNew = sqlite3
1c20: 43 6f 6e 66 69 67 2e 6d 2e 78 52 65 61 6c 6c 6f  Config.m.xReallo
1c30: 63 28 70 4f 6c 64 2c 20 6e 42 79 74 65 73 29 3b  c(pOld, nBytes);
1c40: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 70 4e  .  }.  return pN
1c50: 65 77 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 54 68 65  ew;.}../*.** The
1c60: 20 70 75 62 6c 69 63 20 69 6e 74 65 72 66 61 63   public interfac
1c70: 65 20 74 6f 20 73 71 6c 69 74 65 33 52 65 61 6c  e to sqlite3Real
1c80: 6c 6f 63 2e 20 20 4d 61 6b 65 20 73 75 72 65 20  loc.  Make sure 
1c90: 74 68 61 74 20 74 68 65 20 6d 65 6d 6f 72 79 0a  that the memory.
1ca0: 2a 2a 20 73 75 62 73 79 73 74 65 6d 20 69 73 20  ** subsystem is 
1cb0: 69 6e 69 74 69 61 6c 69 7a 65 64 20 70 72 69 6f  initialized prio
1cc0: 72 20 74 6f 20 69 6e 76 6f 6b 69 6e 67 20 73 71  r to invoking sq
1cd0: 6c 69 74 65 52 65 61 6c 6c 6f 63 2e 0a 2a 2f 0a  liteRealloc..*/.
1ce0: 76 6f 69 64 20 2a 73 71 6c 69 74 65 33 5f 72 65  void *sqlite3_re
1cf0: 61 6c 6c 6f 63 28 76 6f 69 64 20 2a 70 4f 6c 64  alloc(void *pOld
1d00: 2c 20 69 6e 74 20 6e 29 7b 0a 23 69 66 6e 64 65  , int n){.#ifnde
1d10: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
1d20: 54 4f 49 4e 49 54 0a 20 20 69 66 28 20 73 71 6c  TOINIT.  if( sql
1d30: 69 74 65 33 5f 69 6e 69 74 69 61 6c 69 7a 65 28  ite3_initialize(
1d40: 29 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 23 65  ) ) return 0;.#e
1d50: 6e 64 69 66 0a 20 20 72 65 74 75 72 6e 20 73 71  ndif.  return sq
1d60: 6c 69 74 65 33 52 65 61 6c 6c 6f 63 28 70 4f 6c  lite3Realloc(pOl
1d70: 64 2c 20 6e 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  d, n);.}.../*.**
1d80: 20 41 6c 6c 6f 63 61 74 65 20 61 6e 64 20 7a 65   Allocate and ze
1d90: 72 6f 20 6d 65 6d 6f 72 79 2e 0a 2a 2f 20 0a 76  ro memory..*/ .v
1da0: 6f 69 64 20 2a 73 71 6c 69 74 65 33 4d 61 6c 6c  oid *sqlite3Mall
1db0: 6f 63 5a 65 72 6f 28 69 6e 74 20 6e 29 7b 0a 20  ocZero(int n){. 
1dc0: 20 76 6f 69 64 20 2a 70 20 3d 20 73 71 6c 69 74   void *p = sqlit
1dd0: 65 33 4d 61 6c 6c 6f 63 28 6e 29 3b 0a 20 20 69  e3Malloc(n);.  i
1de0: 66 28 20 70 20 29 7b 0a 20 20 20 20 6d 65 6d 73  f( p ){.    mems
1df0: 65 74 28 70 2c 20 30 2c 20 6e 29 3b 0a 20 20 7d  et(p, 0, n);.  }
1e00: 0a 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a  .  return p;.}..
1e10: 2f 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61  /*.** Allocate a
1e20: 6e 64 20 7a 65 72 6f 20 6d 65 6d 6f 72 79 2e 20  nd zero memory. 
1e30: 20 49 66 20 74 68 65 20 61 6c 6c 6f 63 61 74 69   If the allocati
1e40: 6f 6e 20 66 61 69 6c 73 2c 20 6d 61 6b 65 0a 2a  on fails, make.*
1e50: 2a 20 74 68 65 20 6d 61 6c 6c 6f 63 46 61 69 6c  * the mallocFail
1e60: 65 64 20 66 6c 61 67 20 69 6e 20 74 68 65 20 63  ed flag in the c
1e70: 6f 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65  onnection pointe
1e80: 72 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69  r..*/.void *sqli
1e90: 74 65 33 44 62 4d 61 6c 6c 6f 63 5a 65 72 6f 28  te3DbMallocZero(
1ea0: 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74  sqlite3 *db, int
1eb0: 20 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70 20 3d   n){.  void *p =
1ec0: 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63   sqlite3DbMalloc
1ed0: 52 61 77 28 64 62 2c 20 6e 29 3b 0a 20 20 69 66  Raw(db, n);.  if
1ee0: 28 20 70 20 29 7b 0a 20 20 20 20 6d 65 6d 73 65  ( p ){.    memse
1ef0: 74 28 70 2c 20 30 2c 20 6e 29 3b 0a 20 20 7d 0a  t(p, 0, n);.  }.
1f00: 20 20 72 65 74 75 72 6e 20 70 3b 0a 7d 0a 0a 2f    return p;.}../
1f10: 2a 0a 2a 2a 20 41 6c 6c 6f 63 61 74 65 20 61 6e  *.** Allocate an
1f20: 64 20 7a 65 72 6f 20 6d 65 6d 6f 72 79 2e 20 20  d zero memory.  
1f30: 49 66 20 74 68 65 20 61 6c 6c 6f 63 61 74 69 6f  If the allocatio
1f40: 6e 20 66 61 69 6c 73 2c 20 6d 61 6b 65 0a 2a 2a  n fails, make.**
1f50: 20 74 68 65 20 6d 61 6c 6c 6f 63 46 61 69 6c 65   the mallocFaile
1f60: 64 20 66 6c 61 67 20 69 6e 20 74 68 65 20 63 6f  d flag in the co
1f70: 6e 6e 65 63 74 69 6f 6e 20 70 6f 69 6e 74 65 72  nnection pointer
1f80: 2e 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74  ..*/.void *sqlit
1f90: 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28 73 71  e3DbMallocRaw(sq
1fa0: 6c 69 74 65 33 20 2a 64 62 2c 20 69 6e 74 20 6e  lite3 *db, int n
1fb0: 29 7b 0a 20 20 76 6f 69 64 20 2a 70 20 3d 20 30  ){.  void *p = 0
1fc0: 3b 0a 20 20 69 66 28 20 21 64 62 20 7c 7c 20 64  ;.  if( !db || d
1fd0: 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 3d  b->mallocFailed=
1fe0: 3d 30 20 29 7b 0a 20 20 20 20 70 20 3d 20 73 71  =0 ){.    p = sq
1ff0: 6c 69 74 65 33 4d 61 6c 6c 6f 63 28 6e 29 3b 0a  lite3Malloc(n);.
2000: 20 20 20 20 69 66 28 20 21 70 20 26 26 20 64 62      if( !p && db
2010: 20 29 7b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 61   ){.      db->ma
2020: 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
2030: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
2040: 72 6e 20 70 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 52  rn p;.}../*.** R
2050: 65 73 69 7a 65 20 74 68 65 20 62 6c 6f 63 6b 20  esize the block 
2060: 6f 66 20 6d 65 6d 6f 72 79 20 70 6f 69 6e 74 65  of memory pointe
2070: 64 20 74 6f 20 62 79 20 70 20 74 6f 20 6e 20 62  d to by p to n b
2080: 79 74 65 73 2e 20 49 66 20 74 68 65 0a 2a 2a 20  ytes. If the.** 
2090: 72 65 73 69 7a 65 20 66 61 69 6c 73 2c 20 73 65  resize fails, se
20a0: 74 20 74 68 65 20 6d 61 6c 6c 6f 63 46 61 69 6c  t the mallocFail
20b0: 65 64 20 66 6c 61 67 20 69 6e 74 68 65 20 63 6f  ed flag inthe co
20c0: 6e 6e 65 63 74 69 6f 6e 20 6f 62 6a 65 63 74 2e  nnection object.
20d0: 0a 2a 2f 0a 76 6f 69 64 20 2a 73 71 6c 69 74 65  .*/.void *sqlite
20e0: 33 44 62 52 65 61 6c 6c 6f 63 28 73 71 6c 69 74  3DbRealloc(sqlit
20f0: 65 33 20 2a 64 62 2c 20 76 6f 69 64 20 2a 70 2c  e3 *db, void *p,
2100: 20 69 6e 74 20 6e 29 7b 0a 20 20 76 6f 69 64 20   int n){.  void 
2110: 2a 70 4e 65 77 20 3d 20 30 3b 0a 20 20 69 66 28  *pNew = 0;.  if(
2120: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
2130: 64 3d 3d 30 20 29 7b 0a 20 20 20 20 70 4e 65 77  d==0 ){.    pNew
2140: 20 3d 20 73 71 6c 69 74 65 33 5f 72 65 61 6c 6c   = sqlite3_reall
2150: 6f 63 28 70 2c 20 6e 29 3b 0a 20 20 20 20 69 66  oc(p, n);.    if
2160: 28 20 21 70 4e 65 77 20 29 7b 0a 20 20 20 20 20  ( !pNew ){.     
2170: 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65   db->mallocFaile
2180: 64 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 7d  d = 1;.    }.  }
2190: 0a 20 20 72 65 74 75 72 6e 20 70 4e 65 77 3b 0a  .  return pNew;.
21a0: 7d 0a 0a 2f 2a 0a 2a 2a 20 41 74 74 65 6d 70 74  }../*.** Attempt
21b0: 20 74 6f 20 72 65 61 6c 6c 6f 63 61 74 65 20 70   to reallocate p
21c0: 2e 20 20 49 66 20 74 68 65 20 72 65 61 6c 6c 6f  .  If the reallo
21d0: 63 61 74 69 6f 6e 20 66 61 69 6c 73 2c 20 74 68  cation fails, th
21e0: 65 6e 20 66 72 65 65 20 70 0a 2a 2a 20 61 6e 64  en free p.** and
21f0: 20 73 65 74 20 74 68 65 20 6d 61 6c 6c 6f 63 46   set the mallocF
2200: 61 69 6c 65 64 20 66 6c 61 67 20 69 6e 20 74 68  ailed flag in th
2210: 65 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  e database conne
2220: 63 74 69 6f 6e 2e 0a 2a 2f 0a 76 6f 69 64 20 2a  ction..*/.void *
2230: 73 71 6c 69 74 65 33 44 62 52 65 61 6c 6c 6f 63  sqlite3DbRealloc
2240: 4f 72 46 72 65 65 28 73 71 6c 69 74 65 33 20 2a  OrFree(sqlite3 *
2250: 64 62 2c 20 76 6f 69 64 20 2a 70 2c 20 69 6e 74  db, void *p, int
2260: 20 6e 29 7b 0a 20 20 76 6f 69 64 20 2a 70 4e 65   n){.  void *pNe
2270: 77 3b 0a 20 20 70 4e 65 77 20 3d 20 73 71 6c 69  w;.  pNew = sqli
2280: 74 65 33 44 62 52 65 61 6c 6c 6f 63 28 64 62 2c  te3DbRealloc(db,
2290: 20 70 2c 20 6e 29 3b 0a 20 20 69 66 28 20 21 70   p, n);.  if( !p
22a0: 4e 65 77 20 29 7b 0a 20 20 20 20 73 71 6c 69 74  New ){.    sqlit
22b0: 65 33 5f 66 72 65 65 28 70 29 3b 0a 20 20 7d 0a  e3_free(p);.  }.
22c0: 20 20 72 65 74 75 72 6e 20 70 4e 65 77 3b 0a 7d    return pNew;.}
22d0: 0a 0a 2f 2a 0a 2a 2a 20 4d 61 6b 65 20 61 20 63  ../*.** Make a c
22e0: 6f 70 79 20 6f 66 20 61 20 73 74 72 69 6e 67 20  opy of a string 
22f0: 69 6e 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69 6e  in memory obtain
2300: 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d 61  ed from sqliteMa
2310: 6c 6c 6f 63 28 29 2e 20 54 68 65 73 65 20 0a 2a  lloc(). These .*
2320: 2a 20 66 75 6e 63 74 69 6f 6e 73 20 63 61 6c 6c  * functions call
2330: 20 73 71 6c 69 74 65 33 4d 61 6c 6c 6f 63 52 61   sqlite3MallocRa
2340: 77 28 29 20 64 69 72 65 63 74 6c 79 20 69 6e 73  w() directly ins
2350: 74 65 61 64 20 6f 66 20 73 71 6c 69 74 65 4d 61  tead of sqliteMa
2360: 6c 6c 6f 63 28 29 2e 20 54 68 69 73 0a 2a 2a 20  lloc(). This.** 
2370: 69 73 20 62 65 63 61 75 73 65 20 77 68 65 6e 20  is because when 
2380: 6d 65 6d 6f 72 79 20 64 65 62 75 67 67 69 6e 67  memory debugging
2390: 20 69 73 20 74 75 72 6e 65 64 20 6f 6e 2c 20 74   is turned on, t
23a0: 68 65 73 65 20 74 77 6f 20 66 75 6e 63 74 69 6f  hese two functio
23b0: 6e 73 20 61 72 65 20 0a 2a 2a 20 63 61 6c 6c 65  ns are .** calle
23c0: 64 20 76 69 61 20 6d 61 63 72 6f 73 20 74 68 61  d via macros tha
23d0: 74 20 72 65 63 6f 72 64 20 74 68 65 20 63 75 72  t record the cur
23e0: 72 65 6e 74 20 66 69 6c 65 20 61 6e 64 20 6c 69  rent file and li
23f0: 6e 65 20 6e 75 6d 62 65 72 20 69 6e 20 74 68 65  ne number in the
2400: 0a 2a 2a 20 54 68 72 65 61 64 44 61 74 61 20 73  .** ThreadData s
2410: 74 72 75 63 74 75 72 65 2e 0a 2a 2f 0a 63 68 61  tructure..*/.cha
2420: 72 20 2a 73 71 6c 69 74 65 33 53 74 72 44 75 70  r *sqlite3StrDup
2430: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
2440: 0a 20 20 63 68 61 72 20 2a 7a 4e 65 77 3b 0a 20  .  char *zNew;. 
2450: 20 69 6e 74 20 6e 3b 0a 20 20 69 66 28 20 7a 3d   int n;.  if( z=
2460: 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b 0a 20  =0 ) return 0;. 
2470: 20 6e 20 3d 20 73 74 72 6c 65 6e 28 7a 29 2b 31   n = strlen(z)+1
2480: 3b 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74  ;.  zNew = sqlit
2490: 65 33 5f 6d 61 6c 6c 6f 63 28 6e 29 3b 0a 20 20  e3_malloc(n);.  
24a0: 69 66 28 20 7a 4e 65 77 20 29 20 6d 65 6d 63 70  if( zNew ) memcp
24b0: 79 28 7a 4e 65 77 2c 20 7a 2c 20 6e 29 3b 0a 20  y(zNew, z, n);. 
24c0: 20 72 65 74 75 72 6e 20 7a 4e 65 77 3b 0a 7d 0a   return zNew;.}.
24d0: 63 68 61 72 20 2a 73 71 6c 69 74 65 33 53 74 72  char *sqlite3Str
24e0: 4e 44 75 70 28 63 6f 6e 73 74 20 63 68 61 72 20  NDup(const char 
24f0: 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20 63 68  *z, int n){.  ch
2500: 61 72 20 2a 7a 4e 65 77 3b 0a 20 20 69 66 28 20  ar *zNew;.  if( 
2510: 7a 3d 3d 30 20 29 20 72 65 74 75 72 6e 20 30 3b  z==0 ) return 0;
2520: 0a 20 20 7a 4e 65 77 20 3d 20 73 71 6c 69 74 65  .  zNew = sqlite
2530: 33 5f 6d 61 6c 6c 6f 63 28 6e 2b 31 29 3b 0a 20  3_malloc(n+1);. 
2540: 20 69 66 28 20 7a 4e 65 77 20 29 7b 0a 20 20 20   if( zNew ){.   
2550: 20 6d 65 6d 63 70 79 28 7a 4e 65 77 2c 20 7a 2c   memcpy(zNew, z,
2560: 20 6e 29 3b 0a 20 20 20 20 7a 4e 65 77 5b 6e 5d   n);.    zNew[n]
2570: 20 3d 20 30 3b 0a 20 20 7d 0a 20 20 72 65 74 75   = 0;.  }.  retu
2580: 72 6e 20 7a 4e 65 77 3b 0a 7d 0a 0a 63 68 61 72  rn zNew;.}..char
2590: 20 2a 73 71 6c 69 74 65 33 44 62 53 74 72 44 75   *sqlite3DbStrDu
25a0: 70 28 73 71 6c 69 74 65 33 20 2a 64 62 2c 20 63  p(sqlite3 *db, c
25b0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20  onst char *z){. 
25c0: 20 63 68 61 72 20 2a 7a 4e 65 77 20 3d 20 73 71   char *zNew = sq
25d0: 6c 69 74 65 33 53 74 72 44 75 70 28 7a 29 3b 0a  lite3StrDup(z);.
25e0: 20 20 69 66 28 20 7a 20 26 26 20 21 7a 4e 65 77    if( z && !zNew
25f0: 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d 61 6c 6c   ){.    db->mall
2600: 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20  ocFailed = 1;.  
2610: 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 65 77 3b  }.  return zNew;
2620: 0a 7d 0a 63 68 61 72 20 2a 73 71 6c 69 74 65 33  .}.char *sqlite3
2630: 44 62 53 74 72 4e 44 75 70 28 73 71 6c 69 74 65  DbStrNDup(sqlite
2640: 33 20 2a 64 62 2c 20 63 6f 6e 73 74 20 63 68 61  3 *db, const cha
2650: 72 20 2a 7a 2c 20 69 6e 74 20 6e 29 7b 0a 20 20  r *z, int n){.  
2660: 63 68 61 72 20 2a 7a 4e 65 77 20 3d 20 73 71 6c  char *zNew = sql
2670: 69 74 65 33 53 74 72 4e 44 75 70 28 7a 2c 20 6e  ite3StrNDup(z, n
2680: 29 3b 0a 20 20 69 66 28 20 7a 20 26 26 20 21 7a  );.  if( z && !z
2690: 4e 65 77 20 29 7b 0a 20 20 20 20 64 62 2d 3e 6d  New ){.    db->m
26a0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
26b0: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e  .  }.  return zN
26c0: 65 77 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 43 72 65  ew;.}../*.** Cre
26d0: 61 74 65 20 61 20 73 74 72 69 6e 67 20 66 72 6f  ate a string fro
26e0: 6d 20 74 68 65 20 32 6e 64 20 61 6e 64 20 73 75  m the 2nd and su
26f0: 62 73 65 71 75 65 6e 74 20 61 72 67 75 6d 65 6e  bsequent argumen
2700: 74 73 20 28 75 70 20 74 6f 20 74 68 65 0a 2a 2a  ts (up to the.**
2710: 20 66 69 72 73 74 20 4e 55 4c 4c 20 61 72 67 75   first NULL argu
2720: 6d 65 6e 74 29 2c 20 73 74 6f 72 65 20 74 68 65  ment), store the
2730: 20 73 74 72 69 6e 67 20 69 6e 20 6d 65 6d 6f 72   string in memor
2740: 79 20 6f 62 74 61 69 6e 65 64 20 66 72 6f 6d 0a  y obtained from.
2750: 2a 2a 20 73 71 6c 69 74 65 4d 61 6c 6c 6f 63 28  ** sqliteMalloc(
2760: 29 20 61 6e 64 20 6d 61 6b 65 20 74 68 65 20 70  ) and make the p
2770: 6f 69 6e 74 65 72 20 69 6e 64 69 63 61 74 65 64  ointer indicated
2780: 20 62 79 20 74 68 65 20 31 73 74 20 61 72 67 75   by the 1st argu
2790: 6d 65 6e 74 0a 2a 2a 20 70 6f 69 6e 74 20 74 6f  ment.** point to
27a0: 20 74 68 61 74 20 73 74 72 69 6e 67 2e 20 20 54   that string.  T
27b0: 68 65 20 31 73 74 20 61 72 67 75 6d 65 6e 74 20  he 1st argument 
27c0: 6d 75 73 74 20 65 69 74 68 65 72 20 62 65 20 4e  must either be N
27d0: 55 4c 4c 20 6f 72 20 0a 2a 2a 20 70 6f 69 6e 74  ULL or .** point
27e0: 20 74 6f 20 6d 65 6d 6f 72 79 20 6f 62 74 61 69   to memory obtai
27f0: 6e 65 64 20 66 72 6f 6d 20 73 71 6c 69 74 65 4d  ned from sqliteM
2800: 61 6c 6c 6f 63 28 29 2e 0a 2a 2f 0a 76 6f 69 64  alloc()..*/.void
2810: 20 73 71 6c 69 74 65 33 53 65 74 53 74 72 69 6e   sqlite3SetStrin
2820: 67 28 63 68 61 72 20 2a 2a 70 7a 2c 20 2e 2e 2e  g(char **pz, ...
2830: 29 7b 0a 20 20 76 61 5f 6c 69 73 74 20 61 70 3b  ){.  va_list ap;
2840: 0a 20 20 69 6e 74 20 6e 42 79 74 65 3b 0a 20 20  .  int nByte;.  
2850: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 3b 0a 20  const char *z;. 
2860: 20 63 68 61 72 20 2a 7a 52 65 73 75 6c 74 3b 0a   char *zResult;.
2870: 0a 20 20 61 73 73 65 72 74 28 20 70 7a 21 3d 30  .  assert( pz!=0
2880: 20 29 3b 0a 20 20 6e 42 79 74 65 20 3d 20 31 3b   );.  nByte = 1;
2890: 0a 20 20 76 61 5f 73 74 61 72 74 28 61 70 2c 20  .  va_start(ap, 
28a0: 70 7a 29 3b 0a 20 20 77 68 69 6c 65 28 20 28 7a  pz);.  while( (z
28b0: 20 3d 20 76 61 5f 61 72 67 28 61 70 2c 20 63 6f   = va_arg(ap, co
28c0: 6e 73 74 20 63 68 61 72 2a 29 29 21 3d 30 20 29  nst char*))!=0 )
28d0: 7b 0a 20 20 20 20 6e 42 79 74 65 20 2b 3d 20 73  {.    nByte += s
28e0: 74 72 6c 65 6e 28 7a 29 3b 0a 20 20 7d 0a 20 20  trlen(z);.  }.  
28f0: 76 61 5f 65 6e 64 28 61 70 29 3b 0a 20 20 73 71  va_end(ap);.  sq
2900: 6c 69 74 65 33 5f 66 72 65 65 28 2a 70 7a 29 3b  lite3_free(*pz);
2910: 0a 20 20 2a 70 7a 20 3d 20 7a 52 65 73 75 6c 74  .  *pz = zResult
2920: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 61 6c 6c 6f   = sqlite3_mallo
2930: 63 28 6e 42 79 74 65 29 3b 0a 20 20 69 66 28 20  c(nByte);.  if( 
2940: 7a 52 65 73 75 6c 74 3d 3d 30 20 29 7b 0a 20 20  zResult==0 ){.  
2950: 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 20 20    return;.  }.  
2960: 2a 7a 52 65 73 75 6c 74 20 3d 20 30 3b 0a 20 20  *zResult = 0;.  
2970: 76 61 5f 73 74 61 72 74 28 61 70 2c 20 70 7a 29  va_start(ap, pz)
2980: 3b 0a 20 20 77 68 69 6c 65 28 20 28 7a 20 3d 20  ;.  while( (z = 
2990: 76 61 5f 61 72 67 28 61 70 2c 20 63 6f 6e 73 74  va_arg(ap, const
29a0: 20 63 68 61 72 2a 29 29 21 3d 30 20 29 7b 0a 20   char*))!=0 ){. 
29b0: 20 20 20 69 6e 74 20 6e 20 3d 20 73 74 72 6c 65     int n = strle
29c0: 6e 28 7a 29 3b 0a 20 20 20 20 6d 65 6d 63 70 79  n(z);.    memcpy
29d0: 28 7a 52 65 73 75 6c 74 2c 20 7a 2c 20 6e 29 3b  (zResult, z, n);
29e0: 0a 20 20 20 20 7a 52 65 73 75 6c 74 20 2b 3d 20  .    zResult += 
29f0: 6e 3b 0a 20 20 7d 0a 20 20 7a 52 65 73 75 6c 74  n;.  }.  zResult
2a00: 5b 30 5d 20 3d 20 30 3b 0a 20 20 76 61 5f 65 6e  [0] = 0;.  va_en
2a10: 64 28 61 70 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a  d(ap);.}.../*.**
2a20: 20 54 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 6d   This function m
2a30: 75 73 74 20 62 65 20 63 61 6c 6c 65 64 20 62 65  ust be called be
2a40: 66 6f 72 65 20 65 78 69 74 69 6e 67 20 61 6e 79  fore exiting any
2a50: 20 41 50 49 20 66 75 6e 63 74 69 6f 6e 20 28 69   API function (i
2a60: 2e 65 2e 20 0a 2a 2a 20 72 65 74 75 72 6e 69 6e  .e. .** returnin
2a70: 67 20 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65  g control to the
2a80: 20 75 73 65 72 29 20 74 68 61 74 20 68 61 73 20   user) that has 
2a90: 63 61 6c 6c 65 64 20 73 71 6c 69 74 65 33 5f 6d  called sqlite3_m
2aa0: 61 6c 6c 6f 63 20 6f 72 0a 2a 2a 20 73 71 6c 69  alloc or.** sqli
2ab0: 74 65 33 5f 72 65 61 6c 6c 6f 63 2e 0a 2a 2a 0a  te3_realloc..**.
2ac0: 2a 2a 20 54 68 65 20 72 65 74 75 72 6e 65 64 20  ** The returned 
2ad0: 76 61 6c 75 65 20 69 73 20 6e 6f 72 6d 61 6c 6c  value is normall
2ae0: 79 20 61 20 63 6f 70 79 20 6f 66 20 74 68 65 20  y a copy of the 
2af0: 73 65 63 6f 6e 64 20 61 72 67 75 6d 65 6e 74 20  second argument 
2b00: 74 6f 20 74 68 69 73 0a 2a 2a 20 66 75 6e 63 74  to this.** funct
2b10: 69 6f 6e 2e 20 48 6f 77 65 76 65 72 2c 20 69 66  ion. However, if
2b20: 20 61 20 6d 61 6c 6c 6f 63 28 29 20 66 61 69 6c   a malloc() fail
2b30: 75 72 65 20 68 61 73 20 6f 63 63 75 72 65 64 20  ure has occured 
2b40: 73 69 6e 63 65 20 74 68 65 20 70 72 65 76 69 6f  since the previo
2b50: 75 73 0a 2a 2a 20 69 6e 76 6f 63 61 74 69 6f 6e  us.** invocation
2b60: 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 20 69 73   SQLITE_NOMEM is
2b70: 20 72 65 74 75 72 6e 65 64 20 69 6e 73 74 65 61   returned instea
2b80: 64 2e 20 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65  d. .**.** If the
2b90: 20 66 69 72 73 74 20 61 72 67 75 6d 65 6e 74 2c   first argument,
2ba0: 20 64 62 2c 20 69 73 20 6e 6f 74 20 4e 55 4c 4c   db, is not NULL
2bb0: 20 61 6e 64 20 61 20 6d 61 6c 6c 6f 63 28 29 20   and a malloc() 
2bc0: 65 72 72 6f 72 20 68 61 73 20 6f 63 63 75 72 65  error has occure
2bd0: 64 2c 0a 2a 2a 20 74 68 65 6e 20 74 68 65 20 63  d,.** then the c
2be0: 6f 6e 6e 65 63 74 69 6f 6e 20 65 72 72 6f 72 2d  onnection error-
2bf0: 63 6f 64 65 20 28 74 68 65 20 76 61 6c 75 65 20  code (the value 
2c00: 72 65 74 75 72 6e 65 64 20 62 79 20 73 71 6c 69  returned by sqli
2c10: 74 65 33 5f 65 72 72 63 6f 64 65 28 29 29 0a 2a  te3_errcode()).*
2c20: 2a 20 69 73 20 73 65 74 20 74 6f 20 53 51 4c 49  * is set to SQLI
2c30: 54 45 5f 4e 4f 4d 45 4d 2e 0a 2a 2f 0a 69 6e 74  TE_NOMEM..*/.int
2c40: 20 73 71 6c 69 74 65 33 41 70 69 45 78 69 74 28   sqlite3ApiExit(
2c50: 73 71 6c 69 74 65 33 2a 20 64 62 2c 20 69 6e 74  sqlite3* db, int
2c60: 20 72 63 29 7b 0a 20 20 2f 2a 20 49 66 20 74 68   rc){.  /* If th
2c70: 65 20 64 62 20 68 61 6e 64 6c 65 20 69 73 20 6e  e db handle is n
2c80: 6f 74 20 4e 55 4c 4c 2c 20 74 68 65 6e 20 77 65  ot NULL, then we
2c90: 20 6d 75 73 74 20 68 6f 6c 64 20 74 68 65 20 63   must hold the c
2ca0: 6f 6e 6e 65 63 74 69 6f 6e 20 68 61 6e 64 6c 65  onnection handle
2cb0: 0a 20 20 2a 2a 20 6d 75 74 65 78 20 68 65 72 65  .  ** mutex here
2cc0: 2e 20 4f 74 68 65 72 77 69 73 65 20 74 68 65 20  . Otherwise the 
2cd0: 72 65 61 64 20 28 61 6e 64 20 70 6f 73 73 69 62  read (and possib
2ce0: 6c 65 20 77 72 69 74 65 29 20 6f 66 20 64 62 2d  le write) of db-
2cf0: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 0a 20  >mallocFailed . 
2d00: 20 2a 2a 20 69 73 20 75 6e 73 61 66 65 2c 20 61   ** is unsafe, a
2d10: 73 20 69 73 20 74 68 65 20 63 61 6c 6c 20 74 6f  s is the call to
2d20: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 28 29 2e   sqlite3Error().
2d30: 0a 20 20 2a 2f 0a 20 20 61 73 73 65 72 74 28 20  .  */.  assert( 
2d40: 21 64 62 20 7c 7c 20 73 71 6c 69 74 65 33 5f 6d  !db || sqlite3_m
2d50: 75 74 65 78 5f 68 65 6c 64 28 64 62 2d 3e 6d 75  utex_held(db->mu
2d60: 74 65 78 29 20 29 3b 0a 20 20 69 66 28 20 64 62  tex) );.  if( db
2d70: 20 26 26 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61   && db->mallocFa
2d80: 69 6c 65 64 20 29 7b 0a 20 20 20 20 73 71 6c 69  iled ){.    sqli
2d90: 74 65 33 45 72 72 6f 72 28 64 62 2c 20 53 51 4c  te3Error(db, SQL
2da0: 49 54 45 5f 4e 4f 4d 45 4d 2c 20 30 29 3b 0a 20  ITE_NOMEM, 0);. 
2db0: 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69     db->mallocFai
2dc0: 6c 65 64 20 3d 20 30 3b 0a 20 20 20 20 72 63 20  led = 0;.    rc 
2dd0: 3d 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3b 0a  = SQLITE_NOMEM;.
2de0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 72 63 20    }.  return rc 
2df0: 26 20 28 64 62 20 3f 20 64 62 2d 3e 65 72 72 4d  & (db ? db->errM
2e00: 61 73 6b 20 3a 20 30 78 66 66 29 3b 0a 7d 0a     ask : 0xff);.}.