aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authordrh <drh@noemail.net>2014-07-30 15:43:05 +0000
committerdrh <drh@noemail.net>2014-07-30 15:43:05 +0000
commita1a8298c2e89d45be0865b3bead1faf83b926705 (patch)
tree0b22bc8789767fef34fe4df339f42d49c67eee8c
parentac50232d0fb86ef6733ee697686aed3527ff693a (diff)
downloadsqlite-a1a8298c2e89d45be0865b3bead1faf83b926705.tar.gz
sqlite-a1a8298c2e89d45be0865b3bead1faf83b926705.zip
Add the "eForce" parameter to the sqlite3_multiplex_shutdown() entry point
in test_multiplex.c. Shutdown is forced if true. Shutdown is not done if there are pending database connections and eForce is false, but an error log entry is made instead. FossilOrigin-Name: c7303d0139f7e7f4fa7060b52942e6c6c6d4b622
-rw-r--r--manifest16
-rw-r--r--manifest.uuid2
-rw-r--r--src/test_multiplex.c21
-rw-r--r--src/test_multiplex.h2
-rw-r--r--test/multiplex.test10
5 files changed, 35 insertions, 16 deletions
diff --git a/manifest b/manifest
index 551a1332b..ac3ca4663 100644
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Ensure\sthat\sthe\scorrect\snumber\sof\scolumns\sin\sa\sUNIQUE\sindex\sare\schecked\sfor\nuniqueness,\sregardless\sof\swhether\sor\snot\sthe\soriginal\stable\shas\sa\sROWID\sor\nif\sthe\scolumns\sare\sNOT\sNULL,\setc.\s\sTicket\s[9a6daf340df99ba93c].
-D 2014-07-30T13:56:48.415
+C Add\sthe\s"eForce"\sparameter\sto\sthe\ssqlite3_multiplex_shutdown()\sentry\spoint\nin\stest_multiplex.c.\s\sShutdown\sis\sforced\sif\strue.\s\sShutdown\sis\snot\sdone\sif\nthere\sare\spending\sdatabase\sconnections\sand\seForce\sis\sfalse,\sbut\san\serror\slog\nentry\sis\smade\sinstead.
+D 2014-07-30T15:43:05.568
F Makefile.arm-wince-mingw32ce-gcc d6df77f1f48d690bd73162294bbba7f59507c72f
F Makefile.in 5eb79e334a5de69c87740edd56af6527dd219308
F Makefile.linux-gcc 91d710bdc4998cb015f39edf3cb314ec4f4d7e23
@@ -257,8 +257,8 @@ F src/test_intarray.h 2ece66438cfd177b78d1bfda7a4180cd3a10844d
F src/test_journal.c f5c0a05b7b3d5930db769b5ee6c3766dc2221a64
F src/test_loadext.c a5251f956ab6af21e138dc1f9c0399394a510cb4
F src/test_malloc.c 1ff5b1243d96124c9a180f3b89424820a1f337f3
-F src/test_multiplex.c 9f304bf04170c91c0318238d512df2da039eb1c8
-F src/test_multiplex.h 110a8c4d356e0aa464ca8730375608a9a0b61ae1
+F src/test_multiplex.c ca90057438b63bf0840ebb84d0ef050624519a76
+F src/test_multiplex.h c08e4e8f8651f0c5e0509b138ff4d5b43ed1f5d3
F src/test_mutex.c 293042d623ebba969160f471a82aa1551626454f
F src/test_onefile.c 0396f220561f3b4eedc450cef26d40c593c69a25
F src/test_osinst.c 3d0340bc31a9f3d8a3547e0272373e80f78dde25
@@ -719,7 +719,7 @@ F test/mmap1.test 93d167b328255cbe6679fe1e1a23be1b1197d07b
F test/mmap2.test 9d6dd9ddb4ad2379f29cc78f38ce1e63ed418022
F test/mmap3.test c92273e16eb8d23c1d55c9815b446bb72ef0512e
F test/mmapfault.test d4c9eff9cd8c2dc14bc43e71e042f175b0a26fe3
-F test/multiplex.test e08cc7177bd6d85990ee1d71100bb6c684c02256
+F test/multiplex.test 4a0d07a2490dc958e6b676a6825cf761be33d869
F test/multiplex2.test 580ca5817c7edbe4cc68fa150609c9473393003a
F test/multiplex3.test d228f59eac91839a977eac19f21d053f03e4d101
F test/mutex1.test 78b2b9bb320e51d156c4efdb71b99b051e7a4b41
@@ -1185,7 +1185,7 @@ F tool/vdbe_profile.tcl 67746953071a9f8f2f668b73fe899074e2c6d8c1
F tool/warnings-clang.sh f6aa929dc20ef1f856af04a730772f59283631d4
F tool/warnings.sh 0abfd78ceb09b7f7c27c688c8e3fe93268a13b32
F tool/win/sqlite.vsix deb315d026cc8400325c5863eef847784a219a2f
-P ca9868cdae19045dc522490b34dee0f14d928ebe
-R aa3d0aadabff4023861d0c947293977e
+P 6b785e92f279cb65746834d5cd25594fd3333342
+R 91be173298089741f719dedf8b4f59f4
U drh
-Z 0e144877cde1d96e38c3dc4f9894f6d4
+Z 69b6c3f54a5e9094db9af1965ce3b4cb
diff --git a/manifest.uuid b/manifest.uuid
index 194b99221..2ce81d04f 100644
--- a/manifest.uuid
+++ b/manifest.uuid
@@ -1 +1 @@
-6b785e92f279cb65746834d5cd25594fd3333342 \ No newline at end of file
+c7303d0139f7e7f4fa7060b52942e6c6c6d4b622 \ No newline at end of file
diff --git a/src/test_multiplex.c b/src/test_multiplex.c
index 45a1edfbb..427cc65ad 100644
--- a/src/test_multiplex.c
+++ b/src/test_multiplex.c
@@ -1176,14 +1176,20 @@ int sqlite3_multiplex_initialize(const char *zOrigVfsName, int makeDefault){
** THIS ROUTINE IS NOT THREADSAFE. Call this routine exactly once while
** shutting down in order to free all remaining multiplex groups.
*/
-int sqlite3_multiplex_shutdown(void){
+int sqlite3_multiplex_shutdown(int eForce){
+ int rc = SQLITE_OK;
if( gMultiplex.isInitialized==0 ) return SQLITE_MISUSE;
- if( gMultiplex.pGroups ) return SQLITE_MISUSE;
+ if( gMultiplex.pGroups ){
+ sqlite3_log(SQLITE_MISUSE, "sqlite3_multiplex_shutdown() called "
+ "while database connections are still open");
+ if( !eForce ) return SQLITE_MISUSE;
+ rc = SQLITE_MISUSE;
+ }
gMultiplex.isInitialized = 0;
sqlite3_mutex_free(gMultiplex.pMutex);
sqlite3_vfs_unregister(&gMultiplex.sThisVfs);
memset(&gMultiplex, 0, sizeof(gMultiplex));
- return SQLITE_OK;
+ return rc;
}
/***************************** Test Code ***********************************/
@@ -1236,13 +1242,16 @@ static int test_multiplex_shutdown(
UNUSED_PARAMETER(clientData);
- if( objc!=1 ){
- Tcl_WrongNumArgs(interp, 1, objv, "");
+ if( objc==2 && strcmp(Tcl_GetString(objv[1]),"-force")!=0 ){
+ objc = 3;
+ }
+ if( (objc!=1 && objc!=2) ){
+ Tcl_WrongNumArgs(interp, 1, objv, "?-force?");
return TCL_ERROR;
}
/* Call sqlite3_multiplex_shutdown() */
- rc = sqlite3_multiplex_shutdown();
+ rc = sqlite3_multiplex_shutdown(objc==2);
Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_STATIC);
return TCL_OK;
diff --git a/src/test_multiplex.h b/src/test_multiplex.h
index 9fe2f0f2b..d973e4af2 100644
--- a/src/test_multiplex.h
+++ b/src/test_multiplex.h
@@ -90,7 +90,7 @@ extern int sqlite3_multiplex_initialize(const char *zOrigVfsName, int makeDefaul
** THIS ROUTINE IS NOT THREADSAFE. Call this routine exactly once while
** shutting down in order to free all remaining multiplex groups.
*/
-extern int sqlite3_multiplex_shutdown(void);
+extern int sqlite3_multiplex_shutdown(int eForce);
#ifdef __cplusplus
} /* End of the 'extern "C"' block */
diff --git a/test/multiplex.test b/test/multiplex.test
index 32c87d9a5..55fab013c 100644
--- a/test/multiplex.test
+++ b/test/multiplex.test
@@ -68,6 +68,12 @@ proc multiplex_delete {name} {
}
db close
+sqlite3_shutdown
+test_sqlite3_log xLog
+proc xLog {error_code msg} {
+ lappend ::log $error_code $msg
+}
+unset -nocomplain log
multiplex_delete test.db
multiplex_delete test2.db
@@ -188,12 +194,16 @@ do_test multiplex-2.3.1 {
} {}
+unset -nocomplain ::log
do_test multiplex-2.4.1 {
sqlite3_multiplex_shutdown
} {SQLITE_MISUSE}
do_test multiplex-2.4.2 {
execsql { INSERT INTO t1 VALUES(3, randomblob(1100)) }
} {}
+do_test multiplex-2.4.3 {
+ set ::log
+} {SQLITE_MISUSE {sqlite3_multiplex_shutdown() called while database connections are still open}}
do_test multiplex-2.4.4 { file size [multiplex_name test.x 0] } {7168}
do_test multiplex-2.4.5 {
db close