Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Change to tcl test infrastructure so that --malloctrace=1 works when sizeof(int)!=sizeof(void*). |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | experimental |
Files: | files | file ages | folders |
SHA1: |
c3e771b3cf685f4237a2516ee7111849 |
User & Date: | dan 2010-08-09 14:47:50.000 |
Context
2010-08-09
| ||
16:12 | Fix a memory leak in test_journal.c causing tests to fail. (check-in: f229487ccc user: dan tags: experimental) | |
14:47 | Change to tcl test infrastructure so that --malloctrace=1 works when sizeof(int)!=sizeof(void*). (check-in: c3e771b3cf user: dan tags: experimental) | |
07:51 | Fix a problem causing the return code of an xSync call to be ignored in wal.c. (check-in: f1b2b5f9c3 user: dan tags: experimental) | |
Changes
Changes to src/test_malloc.c.
︙ | ︙ | |||
724 725 726 727 728 729 730 | extern int sqlite3MemdebugSettitle(const char*); sqlite3MemdebugSettitle(zTitle); } #endif return TCL_OK; } | | > > > | | | 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 | extern int sqlite3MemdebugSettitle(const char*); sqlite3MemdebugSettitle(zTitle); } #endif return TCL_OK; } #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; typedef struct MallocLog MallocLog; struct MallocLog { int nCall; int nByte; }; #ifdef SQLITE_MEMDEBUG static void test_memdebug_callback(int nByte, int nFrame, void **aFrame){ if( mallocLogEnabled ){ MallocLog *pLog; Tcl_HashEntry *pEntry; int isNew; int aKey[MALLOC_LOG_KEYINTS]; int nKey = sizeof(int)*MALLOC_LOG_KEYINTS; memset(aKey, 0, nKey); if( (sizeof(void*)*nFrame)<nKey ){ nKey = nFrame*sizeof(void*); } memcpy(aKey, aFrame, nKey); |
︙ | ︙ | |||
777 778 779 780 781 782 783 | pEntry; pEntry=Tcl_NextHashEntry(&search) ){ MallocLog *pLog = (MallocLog *)Tcl_GetHashValue(pEntry); Tcl_Free((char *)pLog); } Tcl_DeleteHashTable(&aMallocLog); | | | 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 | pEntry; pEntry=Tcl_NextHashEntry(&search) ){ MallocLog *pLog = (MallocLog *)Tcl_GetHashValue(pEntry); Tcl_Free((char *)pLog); } Tcl_DeleteHashTable(&aMallocLog); Tcl_InitHashTable(&aMallocLog, MALLOC_LOG_KEYINTS); } static int test_memdebug_log( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] |
︙ | ︙ | |||
800 801 802 803 804 805 806 | if( !isInit ){ #ifdef SQLITE_MEMDEBUG extern void sqlite3MemdebugBacktraceCallback( void (*xBacktrace)(int, int, void **)); sqlite3MemdebugBacktraceCallback(test_memdebug_callback); #endif | | | 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 | if( !isInit ){ #ifdef SQLITE_MEMDEBUG extern void sqlite3MemdebugBacktraceCallback( void (*xBacktrace)(int, int, void **)); sqlite3MemdebugBacktraceCallback(test_memdebug_callback); #endif Tcl_InitHashTable(&aMallocLog, MALLOC_LOG_KEYINTS); isInit = 1; } if( objc<2 ){ Tcl_WrongNumArgs(interp, 1, objv, "SUB-COMMAND ..."); } if( Tcl_GetIndexFromObj(interp, objv[1], MB_strs, "sub-command", 0, &iSub) ){ |
︙ | ︙ | |||
823 824 825 826 827 828 829 | mallocLogEnabled = 0; break; case MB_LOG_DUMP: { Tcl_HashSearch search; Tcl_HashEntry *pEntry; Tcl_Obj *pRet = Tcl_NewObj(); | | | | | 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 | mallocLogEnabled = 0; break; case MB_LOG_DUMP: { Tcl_HashSearch search; Tcl_HashEntry *pEntry; Tcl_Obj *pRet = Tcl_NewObj(); assert(sizeof(Tcl_WideInt)>=sizeof(void*)); for( pEntry=Tcl_FirstHashEntry(&aMallocLog, &search); pEntry; pEntry=Tcl_NextHashEntry(&search) ){ Tcl_Obj *apElem[MALLOC_LOG_FRAMES+2]; MallocLog *pLog = (MallocLog *)Tcl_GetHashValue(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_NewWideIntObj(aKey[ii]); } Tcl_ListObjAppendElement(interp, pRet, Tcl_NewListObj(MALLOC_LOG_FRAMES+2, apElem) ); } |
︙ | ︙ |