Index: third_party/sqlite/src/src/test_malloc.c |
diff --git a/third_party/sqlite/src/src/test_malloc.c b/third_party/sqlite/src/src/test_malloc.c |
index ff2ced3295af90dfed73e6e026fba1f9d240468f..c63ded7035bd121004972cfe967f1b25e1fb96cc 100644 |
--- a/third_party/sqlite/src/src/test_malloc.c |
+++ b/third_party/sqlite/src/src/test_malloc.c |
@@ -12,8 +12,6 @@ |
** |
** This file contains code used to implement test interfaces to the |
** memory allocation subsystem. |
-** |
-** $Id: test_malloc.c,v 1.55 2009/07/01 18:09:02 danielk1977 Exp $ |
*/ |
#include "sqliteInt.h" |
#include "tcl.h" |
@@ -730,7 +728,10 @@ static int test_memdebug_settitle( |
return TCL_OK; |
} |
-#define MALLOC_LOG_FRAMES 10 |
+#define MALLOC_LOG_FRAMES 10 |
+#define MALLOC_LOG_KEYINTS ( \ |
+ 10 * ((sizeof(int)>=sizeof(void*)) ? 1 : sizeof(void*)/sizeof(int)) \ |
+) |
static Tcl_HashTable aMallocLog; |
static int mallocLogEnabled = 0; |
@@ -747,8 +748,8 @@ static void test_memdebug_callback(int nByte, int nFrame, void **aFrame){ |
Tcl_HashEntry *pEntry; |
int isNew; |
- int aKey[MALLOC_LOG_FRAMES]; |
- int nKey = sizeof(int)*MALLOC_LOG_FRAMES; |
+ int aKey[MALLOC_LOG_KEYINTS]; |
+ int nKey = sizeof(int)*MALLOC_LOG_KEYINTS; |
memset(aKey, 0, nKey); |
if( (sizeof(void*)*nFrame)<nKey ){ |
@@ -783,7 +784,7 @@ static void test_memdebug_log_clear(void){ |
Tcl_Free((char *)pLog); |
} |
Tcl_DeleteHashTable(&aMallocLog); |
- Tcl_InitHashTable(&aMallocLog, MALLOC_LOG_FRAMES); |
+ Tcl_InitHashTable(&aMallocLog, MALLOC_LOG_KEYINTS); |
} |
static int test_memdebug_log( |
@@ -806,7 +807,7 @@ static int test_memdebug_log( |
void (*xBacktrace)(int, int, void **)); |
sqlite3MemdebugBacktraceCallback(test_memdebug_callback); |
#endif |
- Tcl_InitHashTable(&aMallocLog, MALLOC_LOG_FRAMES); |
+ Tcl_InitHashTable(&aMallocLog, MALLOC_LOG_KEYINTS); |
isInit = 1; |
} |
@@ -829,7 +830,7 @@ static int test_memdebug_log( |
Tcl_HashEntry *pEntry; |
Tcl_Obj *pRet = Tcl_NewObj(); |
- assert(sizeof(int)==sizeof(void*)); |
+ assert(sizeof(Tcl_WideInt)>=sizeof(void*)); |
for( |
pEntry=Tcl_FirstHashEntry(&aMallocLog, &search); |
@@ -838,13 +839,13 @@ static int test_memdebug_log( |
){ |
Tcl_Obj *apElem[MALLOC_LOG_FRAMES+2]; |
MallocLog *pLog = (MallocLog *)Tcl_GetHashValue(pEntry); |
- int *aKey = (int *)Tcl_GetHashKey(&aMallocLog, pEntry); |
+ Tcl_WideInt *aKey = (Tcl_WideInt *)Tcl_GetHashKey(&aMallocLog, pEntry); |
int ii; |
apElem[0] = Tcl_NewIntObj(pLog->nCall); |
apElem[1] = Tcl_NewIntObj(pLog->nByte); |
for(ii=0; ii<MALLOC_LOG_FRAMES; ii++){ |
- apElem[ii+2] = Tcl_NewIntObj(aKey[ii]); |
+ apElem[ii+2] = Tcl_NewWideIntObj(aKey[ii]); |
} |
Tcl_ListObjAppendElement(interp, pRet, |
@@ -1239,6 +1240,7 @@ static int test_status( |
{ "SQLITE_STATUS_SCRATCH_OVERFLOW", SQLITE_STATUS_SCRATCH_OVERFLOW }, |
{ "SQLITE_STATUS_SCRATCH_SIZE", SQLITE_STATUS_SCRATCH_SIZE }, |
{ "SQLITE_STATUS_PARSER_STACK", SQLITE_STATUS_PARSER_STACK }, |
+ { "SQLITE_STATUS_MALLOC_COUNT", SQLITE_STATUS_MALLOC_COUNT }, |
}; |
Tcl_Obj *pResult; |
if( objc!=3 ){ |
@@ -1288,7 +1290,13 @@ static int test_db_status( |
const char *zName; |
int op; |
} aOp[] = { |
- { "SQLITE_DBSTATUS_LOOKASIDE_USED", SQLITE_DBSTATUS_LOOKASIDE_USED }, |
+ { "LOOKASIDE_USED", SQLITE_DBSTATUS_LOOKASIDE_USED }, |
+ { "CACHE_USED", SQLITE_DBSTATUS_CACHE_USED }, |
+ { "SCHEMA_USED", SQLITE_DBSTATUS_SCHEMA_USED }, |
+ { "STMT_USED", SQLITE_DBSTATUS_STMT_USED }, |
+ { "LOOKASIDE_HIT", SQLITE_DBSTATUS_LOOKASIDE_HIT }, |
+ { "LOOKASIDE_MISS_SIZE", SQLITE_DBSTATUS_LOOKASIDE_MISS_SIZE }, |
+ { "LOOKASIDE_MISS_FULL", SQLITE_DBSTATUS_LOOKASIDE_MISS_FULL } |
}; |
Tcl_Obj *pResult; |
if( objc!=4 ){ |
@@ -1297,6 +1305,8 @@ static int test_db_status( |
} |
if( getDbPointer(interp, Tcl_GetString(objv[1]), &db) ) return TCL_ERROR; |
zOpName = Tcl_GetString(objv[2]); |
+ if( memcmp(zOpName, "SQLITE_", 7)==0 ) zOpName += 7; |
+ if( memcmp(zOpName, "DBSTATUS_", 9)==0 ) zOpName += 9; |
for(i=0; i<ArraySize(aOp); i++){ |
if( strcmp(aOp[i].zName, zOpName)==0 ){ |
op = aOp[i].op; |
@@ -1360,6 +1370,25 @@ static int test_install_memsys3( |
return TCL_OK; |
} |
+static int test_vfs_oom_test( |
+ void * clientData, |
+ Tcl_Interp *interp, |
+ int objc, |
+ Tcl_Obj *CONST objv[] |
+){ |
+ extern int sqlite3_memdebug_vfs_oom_test; |
+ if( objc>2 ){ |
+ Tcl_WrongNumArgs(interp, 1, objv, "?INTEGER?"); |
+ return TCL_ERROR; |
+ }else if( objc==2 ){ |
+ int iNew; |
+ if( Tcl_GetIntFromObj(interp, objv[1], &iNew) ) return TCL_ERROR; |
+ sqlite3_memdebug_vfs_oom_test = iNew; |
+ } |
+ Tcl_SetObjResult(interp, Tcl_NewIntObj(sqlite3_memdebug_vfs_oom_test)); |
+ return TCL_OK; |
+} |
+ |
/* |
** Register commands with the TCL interpreter. |
*/ |
@@ -1397,6 +1426,7 @@ int Sqlitetest_malloc_Init(Tcl_Interp *interp){ |
{ "sqlite3_dump_memsys3", test_dump_memsys3 ,3 }, |
{ "sqlite3_dump_memsys5", test_dump_memsys3 ,5 }, |
{ "sqlite3_install_memsys3", test_install_memsys3 ,0 }, |
+ { "sqlite3_memdebug_vfs_oom_test", test_vfs_oom_test ,0 }, |
}; |
int i; |
for(i=0; i<sizeof(aObjCmd)/sizeof(aObjCmd[0]); i++){ |