Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Arrange for ThreadData to be automatically deallocated even if SQLITE_MEMDEBUG is defined. Fix for #1623. (CVS 2965) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
9e2e40845d30cc150abe23ee318a721b |
User & Date: | danielk1977 2006-01-17 16:10:14.000 |
Context
2006-01-18
| ||
04:26 | Handle malloc() failures that occur inside create_collation() calls. (CVS 2966) (check-in: 95c5903f36 user: danielk1977 tags: trunk) | |
2006-01-17
| ||
16:10 | Arrange for ThreadData to be automatically deallocated even if SQLITE_MEMDEBUG is defined. Fix for #1623. (CVS 2965) (check-in: 9e2e40845d user: danielk1977 tags: trunk) | |
15:36 | Fix compilation errors when building SQLITE_DEBUG defined but without SQLITE_MEMDEBUG. (CVS 2964) (check-in: 62dd242778 user: danielk1977 tags: trunk) | |
Changes
Changes to src/os_unix.c.
︙ | ︙ | |||
1765 1766 1767 1768 1769 1770 1771 | if( pTsd ){ *pTsd = zeroData; pthread_setspecific(key, pTsd); TSD_COUNTER(+1); } } }else if( pTsd!=0 && allocateFlag<0 | | | | 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796 1797 | if( pTsd ){ *pTsd = zeroData; pthread_setspecific(key, pTsd); TSD_COUNTER(+1); } } }else if( pTsd!=0 && allocateFlag<0 && memcmp(pTsd, &zeroData, THREADDATASIZE)==0 ){ sqlite3OsFree(pTsd); pthread_setspecific(key, 0); TSD_COUNTER(-1); pTsd = 0; } return pTsd; #else static ThreadData *pTsd = 0; if( allocateFlag>0 ){ if( pTsd==0 ){ pTsd = sqlite3OsMalloc( sizeof(zeroData) ); if( pTsd ){ *pTsd = zeroData; TSD_COUNTER(+1); } } }else if( pTsd!=0 && allocateFlag<0 && memcmp(pTsd, &zeroData, THREADDATASIZE)==0 ){ sqlite3OsFree(pTsd); TSD_COUNTER(-1); pTsd = 0; } return pTsd; #endif } |
︙ | ︙ |
Changes to src/os_win.c.
︙ | ︙ | |||
1203 1204 1205 1206 1207 1208 1209 | if( pTsd ){ *pTsd = zeroData; TlsSetValue(key, pTsd); TSD_COUNTER_INCR; } } }else if( pTsd!=0 && allocateFlag<0 | | | 1203 1204 1205 1206 1207 1208 1209 1210 1211 1212 1213 1214 1215 1216 1217 | if( pTsd ){ *pTsd = zeroData; TlsSetValue(key, pTsd); TSD_COUNTER_INCR; } } }else if( pTsd!=0 && allocateFlag<0 && memcmp(pTsd, &zeroData, THREADDATASIZE)==0 ){ sqlite3OsFree(pTsd); TlsSetValue(key, 0); TSD_COUNTER_DECR; pTsd = 0; } return pTsd; } |
︙ | ︙ |
Changes to src/sqliteInt.h.
1 2 3 4 5 6 7 8 9 10 11 12 13 | /* ** 2001 September 15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** Internal interface definitions for SQLite. ** | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | /* ** 2001 September 15 ** ** The author disclaims copyright to this source code. In place of ** a legal notice, here is a blessing: ** ** May you do good and not evil. ** May you find forgiveness for yourself and forgive others. ** May you share freely, never taking more than you give. ** ************************************************************************* ** Internal interface definitions for SQLite. ** ** @(#) $Id: sqliteInt.h,v 1.472 2006/01/17 16:10:14 danielk1977 Exp $ */ #ifndef _SQLITEINT_H_ #define _SQLITEINT_H_ /* ** Extra interface definitions for those who need them */ |
︙ | ︙ | |||
306 307 308 309 310 311 312 313 314 315 316 317 | #ifndef SQLITE_OMIT_SHARED_CACHE u8 useSharedData; /* True if shared pagers and schemas are enabled */ BtShared *pBtree; /* Linked list of all currently open BTrees */ #endif #ifdef SQLITE_MEMDEBUG int nMaxAlloc; /* High water mark of ThreadData.nAlloc */ int mallocDisallowed; /* assert() in sqlite3Malloc() if set */ int isFail; /* True if all malloc() calls should fail */ const char *zFile; /* Filename to associate debugging info with */ int iLine; /* Line number to associate debugging info with */ | > < > > > > > > > > > > > > > > > > | 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 | #ifndef SQLITE_OMIT_SHARED_CACHE u8 useSharedData; /* True if shared pagers and schemas are enabled */ BtShared *pBtree; /* Linked list of all currently open BTrees */ #endif #ifdef SQLITE_MEMDEBUG void *pFirst; /* Pointer to linked list of allocations */ int nMaxAlloc; /* High water mark of ThreadData.nAlloc */ int mallocDisallowed; /* assert() in sqlite3Malloc() if set */ int isFail; /* True if all malloc() calls should fail */ const char *zFile; /* Filename to associate debugging info with */ int iLine; /* Line number to associate debugging info with */ #endif }; /* ** The THREADDATASIZE macro is used by the system that automatically ** deallocates ThreadData structures. If the first THREADDATASIZE bytes ** of a ThreadData structure are all zero, then the structure is eligible ** for deallocation. ** ** Usually, THREADDATASIZE is set to the size of the structure. However ** if SQLITE_MEMDEBUG is defined, all variables declared after the ** ThreadData.pFirst variable are excluded. */ #ifdef SQLITE_MEMDEBUG #define THREADDATASIZE (int)(&(((ThreadData *)0)->nMaxAlloc)) #else #define THREADDATASIZE sizeof(ThreadData) #endif /* ** Name of the master database table. The master database table ** is a special table that holds the names and attributes of all ** user tables and indices. */ #define MASTER_NAME "sqlite_master" #define TEMP_MASTER_NAME "sqlite_temp_master" |
︙ | ︙ |
Changes to test/tester.tcl.
1 2 3 4 5 6 7 8 9 10 11 12 13 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements some common TCL routines used for regression # testing the SQLite library # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | # 2001 September 15 # # The author disclaims copyright to this source code. In place of # a legal notice, here is a blessing: # # May you do good and not evil. # May you find forgiveness for yourself and forgive others. # May you share freely, never taking more than you give. # #*********************************************************************** # This file implements some common TCL routines used for regression # testing the SQLite library # # $Id: tester.tcl,v 1.62 2006/01/17 16:10:14 danielk1977 Exp $ # Make sure tclsqlite3 was compiled correctly. Abort now with an # error message if not. # if {[sqlite3 -tcl-uses-utf]} { if {"\u1234"=="u1234"} { puts stderr "***** BUILD PROBLEM *****" |
︙ | ︙ | |||
146 147 148 149 150 151 152 | catch {db2 close} catch {db3 close} catch { pp_check_for_leaks } sqlite3 db {} | | | 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 | catch {db2 close} catch {db3 close} catch { pp_check_for_leaks } sqlite3 db {} # sqlite3_clear_tsd_memdebug db close if {$::sqlite3_tsd_count} { puts "Thread-specific data leak: $::sqlite3_tsd_count instances" incr nErr } else { puts "Thread-specific data deallocated properly" } |
︙ | ︙ |
Changes to www/capi3ref.tcl.
|
| | | 1 2 3 4 5 6 7 8 | set rcsid {$Id: capi3ref.tcl,v 1.30 2006/01/17 16:10:14 danielk1977 Exp $} source common.tcl header {C/C++ Interface For SQLite Version 3} puts { <h2>C/C++ Interface For SQLite Version 3</h2> } proc api {name prototype desc {notused x}} { |
︙ | ︙ | |||
1297 1298 1299 1300 1301 1302 1303 | } api {} { void sqlite3_soft_heap_limit(int N); } { This routine sets the soft heap limit for the current thread to N. If the total heap usage by SQLite in the current thread exceeds N, | | | > > > > | 1297 1298 1299 1300 1301 1302 1303 1304 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 | } api {} { void sqlite3_soft_heap_limit(int N); } { This routine sets the soft heap limit for the current thread to N. If the total heap usage by SQLite in the current thread exceeds N, then sqlite3_release_memory() is called to try to reduce the memory usage below the soft limit. Prior to shutting down a thread sqlite3_soft_heap_limit() must be set to zero (the default) or else the thread will leak memory. Alternatively, use the sqlite3_thread_cleanup() API. A negative or zero value for N means that there is no soft heap limit and sqlite3_release_memory() will only be called when memory is exhaused. The default value for the soft heap limit is zero. SQLite makes a best effort to honor the soft heap limit. But if it is unable to reduce memory usage below the soft limit, execution will |
︙ | ︙ |