Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Add test cases for sqlite3_db_mutex(). (CVS 5862) |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
f818e8e5cb20c51922d0b5424f17649e |
User & Date: | danielk1977 2008-11-04 14:55:47.000 |
Context
2008-11-04
| ||
21:51 | Should be 'memjournal.lo' instead of 'memjournal.o'. Ticket #3480. (CVS 5863) (check-in: 8b86860421 user: shane tags: trunk) | |
14:55 | Add test cases for sqlite3_db_mutex(). (CVS 5862) (check-in: f818e8e5cb user: danielk1977 tags: trunk) | |
14:48 | Enhance documentation of sqlite3_db_mutex(). (CVS 5861) (check-in: 3aed410ab0 user: drh tags: trunk) | |
Changes
Changes to src/test_mutex.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* ** 2008 June 18 ** ** 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. ** ************************************************************************* ** | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | /* ** 2008 June 18 ** ** 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. ** ************************************************************************* ** ** $Id: test_mutex.c,v 1.12 2008/11/04 14:55:47 danielk1977 Exp $ */ #include "tcl.h" #include "sqlite3.h" #include "sqliteInt.h" #include <stdlib.h> #include <assert.h> |
︙ | ︙ | |||
354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 | i = aOpt[i].iValue; } rc = sqlite3_config(i); Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE); return TCL_OK; } int Sqlitetest_mutex_Init(Tcl_Interp *interp){ static struct { char *zName; Tcl_ObjCmdProc *xProc; } aCmd[] = { { "sqlite3_shutdown", (Tcl_ObjCmdProc*)test_shutdown }, { "sqlite3_initialize", (Tcl_ObjCmdProc*)test_initialize }, { "sqlite3_config", (Tcl_ObjCmdProc*)test_config }, { "alloc_dealloc_mutex", (Tcl_ObjCmdProc*)test_alloc_mutex }, { "install_mutex_counters", (Tcl_ObjCmdProc*)test_install_mutex_counters }, { "read_mutex_counters", (Tcl_ObjCmdProc*)test_read_mutex_counters }, { "clear_mutex_counters", (Tcl_ObjCmdProc*)test_clear_mutex_counters }, }; int i; | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 | i = aOpt[i].iValue; } rc = sqlite3_config(i); Tcl_SetResult(interp, (char *)sqlite3TestErrorName(rc), TCL_VOLATILE); return TCL_OK; } static sqlite3 *getDbPointer(Tcl_Interp *pInterp, Tcl_Obj *pObj){ sqlite3 *db; Tcl_CmdInfo info; char *zCmd = Tcl_GetString(pObj); if( 1!=Tcl_GetCommandInfo(pInterp, zCmd, &info) ){ Tcl_AppendResult(pInterp, "No such db-handle: \"", zCmd, "\"", 0); return 0; } db = *((sqlite3 **)info.objClientData); assert( db ); return db; } static int test_enter_db_mutex( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ sqlite3 *db; if( objc!=2 ){ Tcl_WrongNumArgs(interp, 1, objv, "DB"); return TCL_ERROR; } db = getDbPointer(interp, objv[1]); if( !db ){ return TCL_ERROR; } sqlite3_mutex_enter(sqlite3_db_mutex(db)); return TCL_OK; } static int test_leave_db_mutex( void * clientData, Tcl_Interp *interp, int objc, Tcl_Obj *CONST objv[] ){ sqlite3 *db; if( objc!=2 ){ Tcl_WrongNumArgs(interp, 1, objv, "DB"); return TCL_ERROR; } db = getDbPointer(interp, objv[1]); if( !db ){ return TCL_ERROR; } sqlite3_mutex_leave(sqlite3_db_mutex(db)); return TCL_OK; } int Sqlitetest_mutex_Init(Tcl_Interp *interp){ static struct { char *zName; Tcl_ObjCmdProc *xProc; } aCmd[] = { { "sqlite3_shutdown", (Tcl_ObjCmdProc*)test_shutdown }, { "sqlite3_initialize", (Tcl_ObjCmdProc*)test_initialize }, { "sqlite3_config", (Tcl_ObjCmdProc*)test_config }, { "enter_db_mutex", (Tcl_ObjCmdProc*)test_enter_db_mutex }, { "leave_db_mutex", (Tcl_ObjCmdProc*)test_leave_db_mutex }, { "alloc_dealloc_mutex", (Tcl_ObjCmdProc*)test_alloc_mutex }, { "install_mutex_counters", (Tcl_ObjCmdProc*)test_install_mutex_counters }, { "read_mutex_counters", (Tcl_ObjCmdProc*)test_read_mutex_counters }, { "clear_mutex_counters", (Tcl_ObjCmdProc*)test_clear_mutex_counters }, }; int i; |
︙ | ︙ |
Changes to test/mutex1.test.
1 2 3 4 5 6 7 8 9 10 11 | # 2008 June 17 # # 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. # #*********************************************************************** # | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | # 2008 June 17 # # 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. # #*********************************************************************** # # $Id: mutex1.test,v 1.16 2008/11/04 14:55:47 danielk1977 Exp $ set testdir [file dirname $argv0] source $testdir/tester.tcl ifcapable !mutex { finish_test return |
︙ | ︙ | |||
145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 | execsql { SELECT * FROM abc } } {1 2 3 1 2 3 1 2 3} do_test mutex1.3.2 { mutex_counters counters set counters(recursive) } {0} } do_test mutex1-X { catch {db close} sqlite3_shutdown clear_mutex_counters install_mutex_counters 0 sqlite3_initialize } {SQLITE_OK} autoinstall_test_functions finish_test | > > > > > > > > > > > > > > > > > > > > > > > | 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 | execsql { SELECT * FROM abc } } {1 2 3 1 2 3 1 2 3} do_test mutex1.3.2 { mutex_counters counters set counters(recursive) } {0} } # Test the sqlite3_db_mutex() function. # do_test mutex1.4.1 { catch {db close} sqlite3 db test.db enter_db_mutex db db eval {SELECT 1, 2, 3} } {1 2 3} do_test mutex1.4.2 { leave_db_mutex db db eval {SELECT 1, 2, 3} } {1 2 3} do_test mutex1.4.3 { catch {db close} sqlite3 db test.db -nomutex 1 enter_db_mutex db db eval {SELECT 1, 2, 3} } {1 2 3} do_test mutex1.4.4 { leave_db_mutex db db eval {SELECT 1, 2, 3} } {1 2 3} do_test mutex1-X { catch {db close} sqlite3_shutdown clear_mutex_counters install_mutex_counters 0 sqlite3_initialize } {SQLITE_OK} autoinstall_test_functions finish_test |