From bb77b753c52297b5f0f5a177fb3ee2ccbbd7a85d Mon Sep 17 00:00:00 2001 From: drh Date: Thu, 9 Apr 2009 01:23:49 +0000 Subject: [PATCH] Enhance sqlite3_shutdown() so that it automatically invokes sqlite3_reset_auto_extension(). This is a harmless no-op if applications are already calling sqlite3_reset_auto_extension() prior to sqlite3_shutdown(). And it prevents possible memory corruption if they do not. So it works either way. Most of the changes are to the test cases. (CVS 6475) FossilOrigin-Name: 0c41f7cff4f6ffb9321f6f6b6ef3e431b750d41a --- manifest | 26 ++++++++++++------------- manifest.uuid | 2 +- src/main.c | 3 ++- test/lookaside.test | 4 +++- test/malloc.test | 4 +++- test/permutations.test | 43 ++++++++++++++++++++++++++---------------- test/speed1.test | 4 +++- test/speed1p.test | 4 +++- test/tester.tcl | 3 ++- test/tkt2565.test | 4 +++- 10 files changed, 60 insertions(+), 37 deletions(-) diff --git a/manifest b/manifest index 225a076175..a67a789ec8 100644 --- a/manifest +++ b/manifest @@ -1,5 +1,5 @@ -C Simplify\sthe\simplementation\sof\sthe\scolumnName()\sfunction\sin\svdbeapi.c.\nThis\sis\sa\scode\scleanup\sonly\s-\sno\sbehavior\schanges.\s(CVS\s6474) -D 2009-04-08T23:05:29 +C Enhance\ssqlite3_shutdown()\sso\sthat\sit\sautomatically\sinvokes\nsqlite3_reset_auto_extension().\s\sThis\sis\sa\sharmless\sno-op\sif\sapplications\nare\salready\scalling\ssqlite3_reset_auto_extension()\sprior\sto\ssqlite3_shutdown().\nAnd\sit\sprevents\spossible\smemory\scorruption\sif\sthey\sdo\snot.\s\sSo\sit\sworks\neither\sway.\s\sMost\sof\sthe\schanges\sare\sto\sthe\stest\scases.\s(CVS\s6475) +D 2009-04-09T01:23:49 F Makefile.arm-wince-mingw32ce-gcc fcd5e9cd67fe88836360bb4f9ef4cb7f8e2fb5a0 F Makefile.in 583e87706abc3026960ed759aff6371faf84c211 F Makefile.linux-gcc d53183f4aa6a9192d249731c90dbdffbd2c68654 @@ -122,7 +122,7 @@ F src/insert.c 71286d081a919a27ef22eaeccbe2718f93dc6aa9 F src/journal.c e00df0c0da8413ab6e1bb7d7cab5665d4a9000d0 F src/legacy.c 2ad5b52df322d0f132f66817095e0e79c8942611 F src/loadext.c 3f96631089fc4f3871a67f02f2e4fc7ea4d51edc -F src/main.c 5e36e465932ad2b80c38b85dc82d2f2bf6e0f8ae +F src/main.c 96636e2ae86e1c36c61189b7760d89f01d35f1e2 F src/malloc.c a1f0f8ae110abb8eb546e259ab0eaea7e0f9b588 F src/mem0.c f2f84062d1f35814d6535c9f9e33de3bfb3b132c F src/mem1.c e6d5c23941288df8191b8a98c28e3f57771e2270 @@ -436,10 +436,10 @@ F test/lock3.test f271375930711ae044080f4fe6d6eda930870d00 F test/lock4.test 991b57669a868bbfd39fe0c0df0d493985829105 F test/lock5.test 6b1f78f09ad1522843dad571b76b321e6f439bf7 F test/lock6.test 862aa71e97b288d6b3f92ba3313f51bd0b003776 -F test/lookaside.test b3e928efeb9a31147bb72350462831e104ec2c1e +F test/lookaside.test 1dd350dc6dff015c47c07fcc5a727a72fc5bae02 F test/main.test 187a9a1b5248ed74a83838c581c15ec6023b555b F test/make-where7.tcl 40bb740b37eead343eaf57b74ab72d2a5a304745 -F test/malloc.test 7388109bccc42888ad4e2cb01b2169eb98d4d283 +F test/malloc.test cd2b9f515ba98beb5e335acdd94c3ad7a6f7fc4a F test/malloc3.test 4bc57f850b212f706f3e1b37c4eced1d5a727cd1 F test/malloc4.test 957337613002b7058a85116493a262f679f3a261 F test/malloc5.test 20d1a0884b03edf811bfd7005faade028367e7c8 @@ -491,7 +491,7 @@ F test/pageropt.test 3ee6578891baaca967f0bd349e4abfa736229e1a F test/pagesize.test 0d9ff3fedfce6e5ffe8fa7aca9b6d3433a2e843b F test/pcache.test 70ad1d65cf73f6a0a7501e0236312eb214d93a55 F test/pcache2.test 46efd980a89f737847b99327bda19e08fe11e402 -F test/permutations.test 7129bc5d215dfe1da527b784b95b041a5a2be397 +F test/permutations.test 4c25ae10e504c13dabe87ec6c67c6c4a062e5395 F test/pragma.test a35b0be36542477183168cdb8b743f5c0d883c4d F test/pragma2.test 5364893491b9231dd170e3459bfc2e2342658b47 F test/printf.test 47e9e5bbec8509023479d54ceb71c9d05a95308a @@ -539,9 +539,9 @@ F test/sidedelete.test f0ad71abe6233e3b153100f3b8d679b19a488329 F test/soak.test d9d0a5e5c0157115c9a17f526f12691fe146768d F test/softheap1.test 73ebd6e020d2954d965da2072baba5922fc8fb6a F test/sort.test 0e4456e729e5a92a625907c63dcdedfbe72c5dc5 -F test/speed1.test c74564fea46e094d6b518bf464c355991905eea2 +F test/speed1.test f2974a91d79f58507ada01864c0e323093065452 F test/speed1p.explain d841e650a04728b39e6740296b852dccdca9b2cb -F test/speed1p.test 7f046639ffd70e6b1deb38684ef2208a43b45df3 +F test/speed1p.test c4a469f29f135f4d76c55b1f2a52f36e209466cc F test/speed2.test 53177056baf6556dcbdcf032bbdfc41c1aa74ded F test/speed3.test e312d7e442a5047d730569fdae2ba99bc94e1a13 F test/speed4.test abc0ad3399dcf9703abed2fff8705e4f8e416715 @@ -558,7 +558,7 @@ F test/tclsqlite.test 8b1150d0486c4848c70d96422513a91c5342be0e F test/tempdb.test b88ac8a19823cf771d742bf61eef93ef337c06b1 F test/temptable.test 5d8ca46be28cc06c887c5a77df650843b7edbae1 F test/temptrigger.test 8fc2ce469590465f85b8cc4176e0fe4595b3bf62 -F test/tester.tcl 9bdc35fac11b0a75cae3f91e527098ba879dbfc2 +F test/tester.tcl b22f925f3c6eea6283e29a81a7379091ca89ab40 F test/thread001.test a3e6a7254d1cb057836cb3145b60c10bf5b7e60f F test/thread002.test afd20095e6e845b405df4f2c920cb93301ca69db F test/thread003.test b824d4f52b870ae39fc5bae4d8070eca73085dca @@ -593,7 +593,7 @@ F test/tkt2339.test 73bd17818924cd2ac442e5fd9916b58565739450 F test/tkt2391.test ab7a11be7402da8b51a5be603425367aa0684567 F test/tkt2409.test 464d55beb32e3b12ce2b4bbf9857d063c4c34297 F test/tkt2450.test 77ed94863f2049c1420288ddfea2d41e5e0971d6 -F test/tkt2565.test de9673c9e3affbf9574c0727556c5140cb9c53a4 +F test/tkt2565.test 8be666e927cb207aae88188f31c331870878b650 F test/tkt2640.test 28134f5d1e05658ef182520cf0b680fa3de5211b F test/tkt2643.test 3f3ebb743da00d4fed4fcf6daed92a0e18e57813 F test/tkt2686.test 08f0f584461bc4990376936daa0a9bd3e6e81671 @@ -716,7 +716,7 @@ F tool/speedtest16.c c8a9c793df96db7e4933f0852abb7a03d48f2e81 F tool/speedtest2.tcl ee2149167303ba8e95af97873c575c3e0fab58ff F tool/speedtest8.c 2902c46588c40b55661e471d7a86e4dd71a18224 F tool/speedtest8inst1.c 293327bc76823f473684d589a8160bde1f52c14e -P f322be3833c4a938ee7d9e4bcfd5decaca57db0b -R e80187c69eb5fab0addc01c50974cf7a +P 0628f5864f8cc035b41bbe644bd8ec8fb43c70ce +R 0cf963266eec9b2fca0ecf33410b18cd U drh -Z 3cf051c8edaf2e9ebf6aff384812ac24 +Z c7192b6903fa3facf78f58d5b0aaedc3 diff --git a/manifest.uuid b/manifest.uuid index b29f92a01a..dda76da0dd 100644 --- a/manifest.uuid +++ b/manifest.uuid @@ -1 +1 @@ -0628f5864f8cc035b41bbe644bd8ec8fb43c70ce \ No newline at end of file +0c41f7cff4f6ffb9321f6f6b6ef3e431b750d41a \ No newline at end of file diff --git a/src/main.c b/src/main.c index 57a1a86c22..e9447e3eb9 100644 --- a/src/main.c +++ b/src/main.c @@ -14,7 +14,7 @@ ** other files are for internal use by SQLite and should not be ** accessed by users of the library. ** -** $Id: main.c,v 1.535 2009/04/02 17:22:42 drh Exp $ +** $Id: main.c,v 1.536 2009/04/09 01:23:49 drh Exp $ */ #include "sqliteInt.h" @@ -219,6 +219,7 @@ int sqlite3_shutdown(void){ if( sqlite3GlobalConfig.isInit ){ sqlite3_os_end(); } + sqlite3_reset_auto_extension(); sqlite3MallocEnd(); sqlite3MutexEnd(); sqlite3GlobalConfig.isInit = 0; diff --git a/test/lookaside.test b/test/lookaside.test index 9584b5df41..3c445604e4 100644 --- a/test/lookaside.test +++ b/test/lookaside.test @@ -11,7 +11,7 @@ # # Tests for the lookaside memory allocator. # -# $Id: lookaside.test,v 1.9 2009/03/24 15:08:10 drh Exp $ +# $Id: lookaside.test,v 1.10 2009/04/09 01:23:49 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -26,6 +26,7 @@ sqlite3_shutdown sqlite3_config_pagecache 0 0 sqlite3_config_scratch 0 0 sqlite3_initialize +autoinstall_test_functions sqlite3 db test.db # Make sure sqlite3_db_config() and sqlite3_db_status are working. @@ -104,5 +105,6 @@ do_test lookaside-4.1 { catch sqlite3_config_error } {0} sqlite3_initialize +autoinstall_test_functions finish_test diff --git a/test/malloc.test b/test/malloc.test index 0ce93ba790..650b7145dd 100644 --- a/test/malloc.test +++ b/test/malloc.test @@ -16,7 +16,7 @@ # to see what happens in the library if a malloc were to really fail # due to an out-of-memory situation. # -# $Id: malloc.test,v 1.77 2009/03/19 18:51:07 danielk1977 Exp $ +# $Id: malloc.test,v 1.78 2009/04/09 01:23:49 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -194,6 +194,7 @@ ifcapable vacuum { } } +autoinstall_test_functions do_malloc_test 7 -sqlprep { CREATE TABLE t1(a, b); INSERT INTO t1 VALUES(1, 2); @@ -659,6 +660,7 @@ do_malloc_test 27 -tclprep { error "out of memory" } } +autoinstall_test_functions # Test that malloc failures that occur while processing INDEXED BY # clauses are handled correctly. diff --git a/test/permutations.test b/test/permutations.test index 6553e12862..b3c416f430 100644 --- a/test/permutations.test +++ b/test/permutations.test @@ -9,7 +9,7 @@ # #*********************************************************************** # -# $Id: permutations.test,v 1.46 2009/04/01 23:09:44 drh Exp $ +# $Id: permutations.test,v 1.47 2009/04/09 01:23:49 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -179,12 +179,14 @@ run_tests "memsubsys1" -description { sqlite3_config_pagecache 4096 24 sqlite3_config_scratch 25000 1 sqlite3_initialize + autoinstall_test_functions } -shutdown { catch {db close} sqlite3_shutdown sqlite3_config_pagecache 0 0 sqlite3_config_scratch 0 0 sqlite3_initialize + autoinstall_test_functions } # Run some tests using pre-allocated page and scratch blocks. This time @@ -205,12 +207,14 @@ run_tests "memsubsys2" -description { sqlite3_config_pagecache 512 5 sqlite3_config_scratch 1000 1 sqlite3_initialize + autoinstall_test_functions } -shutdown { catch {db close} sqlite3_shutdown sqlite3_config_pagecache 0 0 sqlite3_config_scratch 0 0 sqlite3_initialize + autoinstall_test_functions } # Run all tests with the lookaside allocator disabled. @@ -222,11 +226,13 @@ run_tests "nolookaside" -description { sqlite3_shutdown sqlite3_config_lookaside 0 0 sqlite3_initialize + autoinstall_test_functions } -shutdown { catch {db close} sqlite3_shutdown sqlite3_config_lookaside 100 500 sqlite3_initialize + autoinstall_test_functions } # Run some tests in SQLITE_CONFIG_SINGLETHREAD mode. @@ -237,6 +243,8 @@ run_tests "singlethread" -description { catch {db close} sqlite3_shutdown catch {sqlite3_config singlethread} + sqlite3_initialize + autoinstall_test_functions } -include { delete.test delete2.test insert.test rollback.test select1.test select2.test trans.test update.test vacuum.test types.test @@ -245,6 +253,8 @@ run_tests "singlethread" -description { catch {db close} sqlite3_shutdown catch {sqlite3_config serialized} + sqlite3_initialize + autoinstall_test_functions } run_tests "nomutex" -description { @@ -274,6 +284,8 @@ run_tests "multithread" -description { catch {db close} sqlite3_shutdown catch {sqlite3_config multithread} + sqlite3_initialize + autoinstall_test_functions } -include { delete.test delete2.test insert.test rollback.test select1.test select2.test trans.test update.test vacuum.test types.test @@ -282,6 +294,8 @@ run_tests "multithread" -description { catch {db close} sqlite3_shutdown catch {sqlite3_config serialized} + sqlite3_initialize + autoinstall_test_functions } # Run some tests in SQLITE_OPEN_FULLMUTEX mode. @@ -480,12 +494,12 @@ ifcapable mem3 { autoinstall_test_functions } -shutdown { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_heap 0 0 sqlite3_config_lookaside 100 500 install_malloc_faultsim 1 sqlite3_initialize + autoinstall_test_functions } } @@ -501,7 +515,6 @@ ifcapable mem5 { collate5.test limit.test zeroblob.test } -initialize { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_heap 25000000 64 sqlite3_config_lookaside 0 0 @@ -510,12 +523,12 @@ ifcapable mem5 { autoinstall_test_functions } -shutdown { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_heap 0 0 sqlite3_config_lookaside 100 500 install_malloc_faultsim 1 sqlite3_initialize + autoinstall_test_functions } run_tests "memsys5-2" -description { @@ -524,7 +537,6 @@ ifcapable mem5 { select1.test } -initialize { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_heap 40000000 16 sqlite3_config_lookaside 0 0 @@ -533,12 +545,12 @@ ifcapable mem5 { autoinstall_test_functions } -shutdown { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_heap 0 0 sqlite3_config_lookaside 100 500 install_malloc_faultsim 1 sqlite3_initialize + autoinstall_test_functions } } @@ -551,10 +563,14 @@ ifcapable threadsafe { sqlite3_shutdown install_mutex_counters 1 set ::disable_mutex_try 1 + sqlite3_initialize + autoinstall_test_functions } -shutdown { catch {db close} sqlite3_shutdown install_mutex_counters 0 + sqlite3_initialize + autoinstall_test_functions } } @@ -615,87 +631,82 @@ run_tests "pcache0" -description { Alternative pcache implementation without random discard } -initialize { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_alt_pcache 1 0 1 sqlite3_initialize autoinstall_test_functions } -shutdown { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_alt_pcache 0 0 0 sqlite3_config_lookaside 100 500 install_malloc_faultsim 1 sqlite3_initialize + autoinstall_test_functions } -include ${perm-alt-pcache-testset} run_tests "pcache10" -description { Alternative pcache implementation without 10% random discard } -initialize { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_alt_pcache 1 50 1 sqlite3_initialize autoinstall_test_functions } -shutdown { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_alt_pcache 0 0 0 sqlite3_initialize + autoinstall_test_functions } -include ${perm-alt-pcache-testset} run_tests "pcache50" -description { Alternative pcache implementation without 50% random discard } -initialize { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_alt_pcache 1 50 1 sqlite3_initialize autoinstall_test_functions } -shutdown { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_alt_pcache 0 0 0 sqlite3_initialize + autoinstall_test_functions } -include ${perm-alt-pcache-testset} run_tests "pcache90" -description { Alternative pcache implementation without 90% random discard } -initialize { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_alt_pcache 1 50 1 sqlite3_initialize autoinstall_test_functions } -shutdown { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_alt_pcache 0 0 0 sqlite3_initialize + autoinstall_test_functions } -include ${perm-alt-pcache-testset} run_tests "pcache100" -description { Alternative pcache implementation that always discards when unpinning } -initialize { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_alt_pcache 1 100 1 sqlite3_initialize autoinstall_test_functions } -shutdown { catch {db close} - sqlite3_reset_auto_extension sqlite3_shutdown sqlite3_config_alt_pcache 0 0 0 sqlite3_initialize + autoinstall_test_functions } -include ${perm-alt-pcache-testset} run_tests "journaltest" -description { diff --git a/test/speed1.test b/test/speed1.test index 9264fd61d6..86d13ba4ae 100644 --- a/test/speed1.test +++ b/test/speed1.test @@ -11,7 +11,7 @@ # This file implements regression tests for SQLite library. The # focus of this script is measuring executing speed. # -# $Id: speed1.test,v 1.10 2008/10/15 11:43:55 danielk1977 Exp $ +# $Id: speed1.test,v 1.11 2009/04/09 01:23:49 drh Exp $ # sqlite3_shutdown @@ -293,4 +293,6 @@ speed_trial_summary speed1 db close sqlite3_shutdown eval sqlite3_config_lookaside $old_lookaside +sqlite3_initialize +autoinstall_test_functions finish_test diff --git a/test/speed1p.test b/test/speed1p.test index 721bfca63f..915f165354 100644 --- a/test/speed1p.test +++ b/test/speed1p.test @@ -13,7 +13,7 @@ # # This is a copy of speed1.test modified to user prepared statements. # -# $Id: speed1p.test,v 1.6 2008/10/15 11:43:55 danielk1977 Exp $ +# $Id: speed1p.test,v 1.7 2009/04/09 01:23:49 drh Exp $ # sqlite3_shutdown @@ -341,4 +341,6 @@ speed_trial_summary speed1 db close sqlite3_shutdown eval sqlite3_config_lookaside $old_lookaside +sqlite3_initialize +autoinstall_test_functions finish_test diff --git a/test/tester.tcl b/test/tester.tcl index 27d613481a..d8047a5f86 100644 --- a/test/tester.tcl +++ b/test/tester.tcl @@ -11,7 +11,7 @@ # This file implements some common TCL routines used for regression # testing the SQLite library # -# $Id: tester.tcl,v 1.142 2009/04/06 17:50:03 danielk1977 Exp $ +# $Id: tester.tcl,v 1.143 2009/04/09 01:23:49 drh Exp $ # # What for user input before continuing. This gives an opportunity @@ -132,6 +132,7 @@ if {![info exists nTest]} { sqlite3_shutdown install_malloc_faultsim 1 sqlite3_initialize + autoinstall_test_functions if {[info exists tester_do_binarylog]} { sqlite3_instvfs binarylog -default binarylog ostrace.bin sqlite3_instvfs marker binarylog "$argv0 $argv" diff --git a/test/tkt2565.test b/test/tkt2565.test index dbf67e9187..8df0419c65 100644 --- a/test/tkt2565.test +++ b/test/tkt2565.test @@ -15,7 +15,7 @@ # that contain headers with nRec==0 that are followed by additional # valid headers. # -# $Id: tkt2565.test,v 1.1 2009/01/08 15:24:02 drh Exp $ +# $Id: tkt2565.test,v 1.2 2009/04/09 01:23:49 drh Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl @@ -86,5 +86,7 @@ do_test tkt2565-1.X { # sqlite3_shutdown sqlite3_config_alt_pcache 0 +sqlite3_initialize +autoinstall_test_functions finish_test