diff options
author | 2016-09-23 09:21:58 +0000 | |
---|---|---|
committer | 2016-09-23 09:21:58 +0000 | |
commit | 25e4f8ab5acd0ef40feec6767a572bebbbe294b3 (patch) | |
tree | 20197c0e46bb6d260f4a310b6d5dd73b8d826f01 /lib/libsqlite3/src/test_mutex.c | |
parent | remove usr.bin/sqlite3, it has moved back to ports (diff) | |
download | wireguard-openbsd-25e4f8ab5acd0ef40feec6767a572bebbbe294b3.tar.xz wireguard-openbsd-25e4f8ab5acd0ef40feec6767a572bebbbe294b3.zip |
remove lib/libsqlite3, it has moved back to ports
Diffstat (limited to 'lib/libsqlite3/src/test_mutex.c')
-rw-r--r-- | lib/libsqlite3/src/test_mutex.c | 506 |
1 files changed, 0 insertions, 506 deletions
diff --git a/lib/libsqlite3/src/test_mutex.c b/lib/libsqlite3/src/test_mutex.c deleted file mode 100644 index 995b89a4c64..00000000000 --- a/lib/libsqlite3/src/test_mutex.c +++ /dev/null @@ -1,506 +0,0 @@ -/* -** 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. -** -************************************************************************* -** This file contains test logic for the sqlite3_mutex interfaces. -*/ - -#include "tcl.h" -#include "sqlite3.h" -#include "sqliteInt.h" -#include <stdlib.h> -#include <assert.h> -#include <string.h> - -#define MAX_MUTEXES (SQLITE_MUTEX_STATIC_VFS3+1) -#define STATIC_MUTEXES (MAX_MUTEXES-(SQLITE_MUTEX_RECURSIVE+1)) - -/* defined in main.c */ -extern const char *sqlite3ErrName(int); - -static const char *aName[MAX_MUTEXES+1] = { - "fast", "recursive", "static_master", "static_mem", - "static_open", "static_prng", "static_lru", "static_pmem", - "static_app1", "static_app2", "static_app3", "static_vfs1", - "static_vfs2", "static_vfs3", 0 -}; - -/* A countable mutex */ -struct sqlite3_mutex { - sqlite3_mutex *pReal; - int eType; -}; - -/* State variables */ -static struct test_mutex_globals { - int isInstalled; /* True if installed */ - int disableInit; /* True to cause sqlite3_initalize() to fail */ - int disableTry; /* True to force sqlite3_mutex_try() to fail */ - int isInit; /* True if initialized */ - sqlite3_mutex_methods m; /* Interface to "real" mutex system */ - int aCounter[MAX_MUTEXES]; /* Number of grabs of each type of mutex */ - sqlite3_mutex aStatic[STATIC_MUTEXES]; /* The static mutexes */ -} g = {0}; - -/* Return true if the countable mutex is currently held */ -static int counterMutexHeld(sqlite3_mutex *p){ - return g.m.xMutexHeld(p->pReal); -} - -/* Return true if the countable mutex is not currently held */ -static int counterMutexNotheld(sqlite3_mutex *p){ - return g.m.xMutexNotheld(p->pReal); -} - -/* Initialize the countable mutex interface -** Or, if g.disableInit is non-zero, then do not initialize but instead -** return the value of g.disableInit as the result code. This can be used -** to simulate an initialization failure. -*/ -static int counterMutexInit(void){ - int rc; - if( g.disableInit ) return g.disableInit; - rc = g.m.xMutexInit(); - g.isInit = 1; - return rc; -} - -/* -** Uninitialize the mutex subsystem -*/ -static int counterMutexEnd(void){ - g.isInit = 0; - return g.m.xMutexEnd(); -} - -/* -** Allocate a countable mutex -*/ -static sqlite3_mutex *counterMutexAlloc(int eType){ - sqlite3_mutex *pReal; - sqlite3_mutex *pRet = 0; - - assert( g.isInit ); - assert( eType>=SQLITE_MUTEX_FAST ); - assert( eType<=SQLITE_MUTEX_STATIC_VFS3 ); - - pReal = g.m.xMutexAlloc(eType); - if( !pReal ) return 0; - - if( eType==SQLITE_MUTEX_FAST || eType==SQLITE_MUTEX_RECURSIVE ){ - pRet = (sqlite3_mutex *)malloc(sizeof(sqlite3_mutex)); - }else{ - int eStaticType = eType - (MAX_MUTEXES - STATIC_MUTEXES); - assert( eStaticType>=0 ); - assert( eStaticType<STATIC_MUTEXES ); - pRet = &g.aStatic[eStaticType]; - } - - pRet->eType = eType; - pRet->pReal = pReal; - return pRet; -} - -/* -** Free a countable mutex -*/ -static void counterMutexFree(sqlite3_mutex *p){ - assert( g.isInit ); - g.m.xMutexFree(p->pReal); - if( p->eType==SQLITE_MUTEX_FAST || p->eType==SQLITE_MUTEX_RECURSIVE ){ - free(p); - } -} - -/* -** Enter a countable mutex. Block until entry is safe. -*/ -static void counterMutexEnter(sqlite3_mutex *p){ - assert( g.isInit ); - assert( p->eType>=0 ); - assert( p->eType<MAX_MUTEXES ); - g.aCounter[p->eType]++; - g.m.xMutexEnter(p->pReal); -} - -/* -** Try to enter a mutex. Return true on success. -*/ -static int counterMutexTry(sqlite3_mutex *p){ - assert( g.isInit ); - assert( p->eType>=0 ); - assert( p->eType<MAX_MUTEXES ); - g.aCounter[p->eType]++; - if( g.disableTry ) return SQLITE_BUSY; - return g.m.xMutexTry(p->pReal); -} - -/* Leave a mutex -*/ -static void counterMutexLeave(sqlite3_mutex *p){ - assert( g.isInit ); - g.m.xMutexLeave(p->pReal); -} - -/* -** sqlite3_shutdown -*/ -static int test_shutdown( - void * clientData, - Tcl_Interp *interp, - int objc, - Tcl_Obj *CONST objv[] -){ - int rc; - - if( objc!=1 ){ - Tcl_WrongNumArgs(interp, 1, objv, ""); - return TCL_ERROR; - } - - rc = sqlite3_shutdown(); - Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE); - return TCL_OK; -} - -/* -** sqlite3_initialize -*/ -static int test_initialize( - void * clientData, - Tcl_Interp *interp, - int objc, - Tcl_Obj *CONST objv[] -){ - int rc; - - if( objc!=1 ){ - Tcl_WrongNumArgs(interp, 1, objv, ""); - return TCL_ERROR; - } - - rc = sqlite3_initialize(); - Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE); - return TCL_OK; -} - -/* -** install_mutex_counters BOOLEAN -*/ -static int test_install_mutex_counters( - void * clientData, - Tcl_Interp *interp, - int objc, - Tcl_Obj *CONST objv[] -){ - int rc = SQLITE_OK; - int isInstall; - - sqlite3_mutex_methods counter_methods = { - counterMutexInit, - counterMutexEnd, - counterMutexAlloc, - counterMutexFree, - counterMutexEnter, - counterMutexTry, - counterMutexLeave, - counterMutexHeld, - counterMutexNotheld - }; - - if( objc!=2 ){ - Tcl_WrongNumArgs(interp, 1, objv, "BOOLEAN"); - return TCL_ERROR; - } - if( TCL_OK!=Tcl_GetBooleanFromObj(interp, objv[1], &isInstall) ){ - return TCL_ERROR; - } - - assert(isInstall==0 || isInstall==1); - assert(g.isInstalled==0 || g.isInstalled==1); - if( isInstall==g.isInstalled ){ - Tcl_AppendResult(interp, "mutex counters are ", 0); - Tcl_AppendResult(interp, isInstall?"already installed":"not installed", 0); - return TCL_ERROR; - } - - if( isInstall ){ - assert( g.m.xMutexAlloc==0 ); - rc = sqlite3_config(SQLITE_CONFIG_GETMUTEX, &g.m); - if( rc==SQLITE_OK ){ - sqlite3_config(SQLITE_CONFIG_MUTEX, &counter_methods); - } - g.disableTry = 0; - }else{ - assert( g.m.xMutexAlloc ); - rc = sqlite3_config(SQLITE_CONFIG_MUTEX, &g.m); - memset(&g.m, 0, sizeof(sqlite3_mutex_methods)); - } - - if( rc==SQLITE_OK ){ - g.isInstalled = isInstall; - } - - Tcl_SetResult(interp, (char *)sqlite3ErrName(rc), TCL_VOLATILE); - return TCL_OK; -} - -/* -** read_mutex_counters -*/ -static int test_read_mutex_counters( - void * clientData, - Tcl_Interp *interp, - int objc, - Tcl_Obj *CONST objv[] -){ - Tcl_Obj *pRet; - int ii; - - if( objc!=1 ){ - Tcl_WrongNumArgs(interp, 1, objv, ""); - return TCL_ERROR; - } - - pRet = Tcl_NewObj(); - Tcl_IncrRefCount(pRet); - for(ii=0; ii<MAX_MUTEXES; ii++){ - Tcl_ListObjAppendElement(interp, pRet, Tcl_NewStringObj(aName[ii], -1)); - Tcl_ListObjAppendElement(interp, pRet, Tcl_NewIntObj(g.aCounter[ii])); - } - Tcl_SetObjResult(interp, pRet); - Tcl_DecrRefCount(pRet); - - return TCL_OK; -} - -/* -** clear_mutex_counters -*/ -static int test_clear_mutex_counters( - void * clientData, - Tcl_Interp *interp, - int objc, - Tcl_Obj *CONST objv[] -){ - int ii; - - if( objc!=1 ){ - Tcl_WrongNumArgs(interp, 1, objv, ""); - return TCL_ERROR; - } - - for(ii=0; ii<MAX_MUTEXES; ii++){ - g.aCounter[ii] = 0; - } - return TCL_OK; -} - -/* -** Create and free a mutex. Return the mutex pointer. The pointer -** will be invalid since the mutex has already been freed. The -** return pointer just checks to see if the mutex really was allocated. -*/ -static int test_alloc_mutex( - void * clientData, - Tcl_Interp *interp, - int objc, - Tcl_Obj *CONST objv[] -){ -#if SQLITE_THREADSAFE - sqlite3_mutex *p = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST); - char zBuf[100]; - sqlite3_mutex_free(p); - sqlite3_snprintf(sizeof(zBuf), zBuf, "%p", p); - Tcl_AppendResult(interp, zBuf, (char*)0); -#endif - return TCL_OK; -} - -/* -** sqlite3_config OPTION -** -** OPTION can be either one of the keywords: -** -** SQLITE_CONFIG_SINGLETHREAD -** SQLITE_CONFIG_MULTITHREAD -** SQLITE_CONFIG_SERIALIZED -** -** Or OPTION can be an raw integer. -*/ -static int test_config( - void * clientData, - Tcl_Interp *interp, - int objc, - Tcl_Obj *CONST objv[] -){ - struct ConfigOption { - const char *zName; - int iValue; - } aOpt[] = { - {"singlethread", SQLITE_CONFIG_SINGLETHREAD}, - {"multithread", SQLITE_CONFIG_MULTITHREAD}, - {"serialized", SQLITE_CONFIG_SERIALIZED}, - {0, 0} - }; - int s = sizeof(struct ConfigOption); - int i; - int rc; - - if( objc!=2 ){ - Tcl_WrongNumArgs(interp, 1, objv, ""); - return TCL_ERROR; - } - - if( Tcl_GetIndexFromObjStruct(interp, objv[1], aOpt, s, "flag", 0, &i) ){ - if( Tcl_GetIntFromObj(interp, objv[1], &i) ){ - return TCL_ERROR; - } - }else{ - i = aOpt[i].iValue; - } - - rc = sqlite3_config(i); - Tcl_SetResult(interp, (char *)sqlite3ErrName(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( Tcl_GetCommandInfo(pInterp, zCmd, &info) ){ - db = *((sqlite3 **)info.objClientData); - }else{ - db = (sqlite3*)sqlite3TestTextToPtr(zCmd); - } - assert( db ); - return db; -} - -static sqlite3_mutex *getStaticMutexPointer( - Tcl_Interp *pInterp, - Tcl_Obj *pObj -){ - int iMutex; - if( Tcl_GetIndexFromObj(pInterp, pObj, aName, "mutex name", 0, &iMutex) ){ - return 0; - } - assert( iMutex!=SQLITE_MUTEX_FAST && iMutex!=SQLITE_MUTEX_RECURSIVE ); - return counterMutexAlloc(iMutex); -} - -static int test_enter_static_mutex( - void * clientData, - Tcl_Interp *interp, - int objc, - Tcl_Obj *CONST objv[] -){ - sqlite3_mutex *pMutex; - if( objc!=2 ){ - Tcl_WrongNumArgs(interp, 1, objv, "NAME"); - return TCL_ERROR; - } - pMutex = getStaticMutexPointer(interp, objv[1]); - if( !pMutex ){ - return TCL_ERROR; - } - sqlite3_mutex_enter(pMutex); - return TCL_OK; -} - -static int test_leave_static_mutex( - void * clientData, - Tcl_Interp *interp, - int objc, - Tcl_Obj *CONST objv[] -){ - sqlite3_mutex *pMutex; - if( objc!=2 ){ - Tcl_WrongNumArgs(interp, 1, objv, "NAME"); - return TCL_ERROR; - } - pMutex = getStaticMutexPointer(interp, objv[1]); - if( !pMutex ){ - return TCL_ERROR; - } - sqlite3_mutex_leave(pMutex); - return TCL_OK; -} - -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_static_mutex", (Tcl_ObjCmdProc*)test_enter_static_mutex }, - { "leave_static_mutex", (Tcl_ObjCmdProc*)test_leave_static_mutex }, - - { "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; - for(i=0; i<sizeof(aCmd)/sizeof(aCmd[0]); i++){ - Tcl_CreateObjCommand(interp, aCmd[i].zName, aCmd[i].xProc, 0, 0); - } - - Tcl_LinkVar(interp, "disable_mutex_init", - (char*)&g.disableInit, TCL_LINK_INT); - Tcl_LinkVar(interp, "disable_mutex_try", - (char*)&g.disableTry, TCL_LINK_INT); - return SQLITE_OK; -} |