您当前的位置:首页 > IT编程 > C++
| C语言 | Java | VB | VC | python | Android | TensorFlow | C++ | oracle | 学术与代码 | cnn卷积神经网络 | gnn | 图像修复 | Keras | 数据集 | Neo4j | 自然语言处理 | 深度学习 | 医学CAD | 医学影像 | 超参数 | pointnet | pytorch | 异常检测 | Transformers | 情感分类 | 知识图谱 |

自学教程:C++ sqlite3_mutex_leave函数代码示例

51自学网 2021-06-03 08:15:33
  C++
这篇教程C++ sqlite3_mutex_leave函数代码示例写得很实用,希望能帮到您。

本文整理汇总了C++中sqlite3_mutex_leave函数的典型用法代码示例。如果您正苦于以下问题:C++ sqlite3_mutex_leave函数的具体用法?C++ sqlite3_mutex_leave怎么用?C++ sqlite3_mutex_leave使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。

在下文中一共展示了sqlite3_mutex_leave函数的30个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。

示例1: sqlite3_mutex_enter

void connection::create_tables(){    sqlite3_mutex_enter(sqlite3_db_mutex(db_connection_m));    sqlite3_exec(db_connection_m, "BEGIN;", 0, 0, 0);        char const* game =       "CREATE TABLE IF NOT EXISTS game "       "( id   INTEGER PRIMARY KEY "       ", name TEXT "       ", UNIQUE(name) "       ");";        char const* game_session =       "CREATE TABLE IF NOT EXISTS game_session "       "( id      INTEGER PRIMARY KEY "       ", game_id INTEGER "       ", data    TEXT " // Can differ game from game, but it is usually replay data in JSON.       "); ";        char const* game_session_participant =       "CREATE TABLE IF NOT EXISTS game_session_participant "       "( user_id         INTEGER "       ", game_session_id INTEGER "       ", result          INTEGER " // Can differ game from game, but it is usually one of (defeat, draw, victory).        ", type            INTEGER " // Can differ game from game, for connect this is either (0 == white) or (1 == black).       ");";        char const* user =       "CREATE TABLE IF NOT EXISTS user "       "( id   INTEGER PRIMARY KEY "       ", name TEXT "       ", UNIQUE(name) "       ");";    sqlite3_exec(db_connection_m, game, 0, 0, 0);    sqlite3_exec(db_connection_m, user, 0, 0, 0);    sqlite3_exec(db_connection_m, game_session, 0, 0, 0);    sqlite3_exec(db_connection_m, game_session_participant, 0, 0, 0);    sqlite3_exec(db_connection_m, "COMMIT;", 0, 0, 0);    sqlite3_mutex_leave(sqlite3_db_mutex(db_connection_m));}
开发者ID:Palmik,项目名称:bob,代码行数:42,


示例2: createModule

/*** The actual function that does the work of creating a new module.** This function implements the sqlite3_create_module() and** sqlite3_create_module_v2() interfaces.*/static int createModule(  sqlite3 *db,                    /* Database in which module is registered */  const char *zName,              /* Name assigned to this module */  const sqlite3_module *pModule,  /* The definition of the module */  void *pAux,                     /* Context pointer for xCreate/xConnect */  void (*xDestroy)(void *)        /* Module destructor function */){  int rc = SQLITE_OK;  sqlite3_mutex_enter(db->mutex);  if( sqlite3HashFind(&db->aModule, zName) ){    rc = SQLITE_MISUSE_BKPT;  }else{    (void)sqlite3VtabCreateModule(db, zName, pModule, pAux, xDestroy);  }  rc = sqlite3ApiExit(db, rc);  if( rc!=SQLITE_OK && xDestroy ) xDestroy(pAux);  sqlite3_mutex_leave(db->mutex);  return rc;}
开发者ID:wangyiran126,项目名称:sqlite,代码行数:25,


示例3: createVarMap

/*** Create a mapping from variable numbers to variable names** in the Vdbe.azVar[] array, if such a mapping does not already** exist.*/static void createVarMap(Vdbe *p){  if( !p->okVar ){    int j;    Op *pOp;    sqlite3_mutex_enter(p->db->mutex);    /* The race condition here is harmless.  If two threads call this    ** routine on the same Vdbe at the same time, they both might end    ** up initializing the Vdbe.azVar[] array.  That is a little extra    ** work but it results in the same answer.    */    for(j=0, pOp=p->aOp; j<p->nOp; j++, pOp++){      if( pOp->opcode==OP_Variable ){        assert( pOp->p1>0 && pOp->p1<=p->nVar );        p->azVar[pOp->p1-1] = pOp->p4.z;      }    }    p->okVar = 1;    sqlite3_mutex_leave(p->db->mutex);  }}
开发者ID:Wushaowei001,项目名称:omnibus,代码行数:25,


示例4: sqlite3_create_collation16

/*** Register a new collation sequence with the database handle db.*/extern "C" int sqlite3_create_collation16(  sqlite3* db,   const char *zName,   int enc,   void* pCtx,  int(*xCompare)(void*,int,const void*,int,const void*)){  int rc = SQLITE_OK;  char *zName8;   sqlite3_mutex_enter(db->mutex);  assert( !db->mallocFailed );  zName8 = sqlite3Utf16to8(db, zName, -1);  if( zName8 ){    rc = createCollation(db, zName8, enc, pCtx, xCompare, 0);    sqlite3_free(zName8);  }  rc = sqlite3ApiExit(db, rc);  sqlite3_mutex_leave(db->mutex);  return rc;}
开发者ID:guange2015,项目名称:sqlite-for-symbian,代码行数:23,


示例5: sqlite3_soft_heap_limit64

/*** Set the soft heap-size limit for the library. Passing a zero or ** negative value indicates no limit.*/sqlite3_int64 sqlite3_soft_heap_limit64(sqlite3_int64 n){  sqlite3_int64 priorLimit;  sqlite3_int64 excess;#ifndef SQLITE_OMIT_AUTOINIT  int rc = sqlite3_initialize();  if( rc ) return -1;#endif  sqlite3_mutex_enter(mem0.mutex);  priorLimit = mem0.alarmThreshold;  sqlite3_mutex_leave(mem0.mutex);  if( n<0 ) return priorLimit;  if( n>0 ){    sqlite3MemoryAlarm(softHeapLimitEnforcer, 0, n);  }else{    sqlite3MemoryAlarm(0, 0, 0);  }  excess = sqlite3_memory_used() - n;  if( excess>0 ) sqlite3_release_memory((int)(excess & 0x7fffffff));  return priorLimit;}
开发者ID:AdrianHuang,项目名称:rt-thread-for-vmm,代码行数:24,


示例6: sqlite3TransferBindings

/*** Transfer all bindings from the first statement over to the second.** If the two statements contain a different number of bindings, then** an SQLITE_ERROR is returned.*/int sqlite3TransferBindings(sqlite3_stmt *pFromStmt, sqlite3_stmt *pToStmt){  Vdbe *pFrom = (Vdbe*)pFromStmt;  Vdbe *pTo = (Vdbe*)pToStmt;  int i, rc = SQLITE_OK;  if( (pFrom->magic!=VDBE_MAGIC_RUN && pFrom->magic!=VDBE_MAGIC_HALT)    || (pTo->magic!=VDBE_MAGIC_RUN && pTo->magic!=VDBE_MAGIC_HALT)    || pTo->db!=pFrom->db ){    return SQLITE_MISUSE;  }  if( pFrom->nVar!=pTo->nVar ){    return SQLITE_ERROR;  }  sqlite3_mutex_enter(pTo->db->mutex);  for(i=0; rc==SQLITE_OK && i<pFrom->nVar; i++){    sqlite3VdbeMemMove(&pTo->aVar[i], &pFrom->aVar[i]);  }  sqlite3_mutex_leave(pTo->db->mutex);  assert( rc==SQLITE_OK || rc==SQLITE_NOMEM );  return rc;}
开发者ID:shenjian74,项目名称:Bitcoin-History,代码行数:25,


示例7: load_cb

static spmembuffer_t * load_cb( void * arg, const char * path ){	spmembuffer_t * ret = NULL;	spmemvfs_env_t * env = (spmemvfs_env_t*)arg;	sqlite3_mutex_enter( env->mutex );	{		spmembuffer_link_t * toFind = spmembuffer_link_remove( &( env->head ), path );		if( NULL != toFind ) {			ret = toFind->mem;			free( toFind->path );			free( toFind );		}	}	sqlite3_mutex_leave( env->mutex );	return ret;}
开发者ID:Fluorohydride,项目名称:ygopro,代码行数:20,


示例8: sqlite3_initialize

/*** Locate a VFS by name.  If no name is given, simply return the** first VFS on the list.*/sqlite3_vfs *sqlite3_vfs_find(const char *zVfs){  sqlite3_vfs *pVfs = 0;#if SQLITE_THREADSAFE  sqlite3_mutex *mutex;#endif#ifndef SQLITE_OMIT_AUTOINIT  int rc = sqlite3_initialize();  if( rc ) return 0;#endif#if SQLITE_THREADSAFE  mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);#endif  sqlite3_mutex_enter(mutex);  for(pVfs = vfsList; pVfs; pVfs=pVfs->pNext){    if( zVfs==0 ) break;    if( strcmp(zVfs, pVfs->zName)==0 ) break;  }  sqlite3_mutex_leave(mutex);  return pVfs;}
开发者ID:Adoni,项目名称:WiEngine,代码行数:24,


示例9: sqlite3_vfs_register

/*** Register a VFS with the system.  It is harmless to register the same** VFS multiple times.  The new VFS becomes the default if makeDflt is** true.*/int sqlite3_vfs_register(sqlite3_vfs *pVfs, int makeDflt){  sqlite3_mutex *mutex = 0;#ifndef SQLITE_OMIT_AUTOINIT  int rc = sqlite3_initialize();  if( rc ) return rc;#endif  mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);  sqlite3_mutex_enter(mutex);  vfsUnlink(pVfs);  if( makeDflt || vfsList==0 ){    pVfs->pNext = vfsList;    vfsList = pVfs;  }else{    pVfs->pNext = vfsList->pNext;    vfsList->pNext = pVfs;  }  assert(vfsList);  sqlite3_mutex_leave(mutex);  return SQLITE_OK;}
开发者ID:Adoni,项目名称:WiEngine,代码行数:25,


示例10: sqlite3_progress_handler

/*** This routine sets the progress callback for an Sqlite database to the** given callback function with the given argument. The progress callback will** be invoked every nOps opcodes.*/extern "C" void sqlite3_progress_handler(  sqlite3 *db,   int nOps,  int (*xProgress)(void*),   void *pArg){  if( !sqlite3SafetyCheck(db) ){    sqlite3_mutex_enter(db->mutex);    if( nOps>0 ){      db->xProgress = xProgress;      db->nProgressOps = nOps;      db->pProgressArg = pArg;    }else{      db->xProgress = 0;      db->nProgressOps = 0;      db->pProgressArg = 0;    }    sqlite3_mutex_leave(db->mutex);  }}
开发者ID:guange2015,项目名称:sqlite-for-symbian,代码行数:25,


示例11: sqlite3Prepare16

/*** Compile the UTF-16 encoded SQL statement zSql into a statement handle.*/static int sqlite3Prepare16(  sqlite3 *db,              /* Database handle. */   const void *zSql,         /* UTF-8 encoded SQL statement. */  int nBytes,               /* Length of zSql in bytes. */  int saveSqlFlag,          /* True to save SQL text into the sqlite3_stmt */  sqlite3_stmt **ppStmt,    /* OUT: A pointer to the prepared statement */  const void **pzTail       /* OUT: End of parsed string */){  /* This function currently works by first transforming the UTF-16  ** encoded string to UTF-8, then invoking sqlite3_prepare(). The  ** tricky bit is figuring out the pointer to return in *pzTail.  */  char *zSql8;  const char *zTail8 = 0;  int rc = SQLITE_OK;  assert( ppStmt );  *ppStmt = 0;  if( !sqlite3SafetyCheckOk(db) ){    return SQLITE_MISUSE;  }  sqlite3_mutex_enter(db->mutex);  zSql8 = sqlite3Utf16to8(db, zSql, nBytes);  if( zSql8 ){    rc = sqlite3LockAndPrepare(db, zSql8, -1, saveSqlFlag, 0, ppStmt, &zTail8);  }  if( zTail8 && pzTail ){    /* If sqlite3_prepare returns a tail pointer, we calculate the    ** equivalent pointer into the UTF-16 string by counting the unicode    ** characters between zSql8 and zTail8, and then returning a pointer    ** the same number of characters into the UTF-16 string.    */    int chars_parsed = sqlite3Utf8CharLen(zSql8, (int)(zTail8-zSql8));    *pzTail = (u8 *)zSql + sqlite3Utf16ByteLen(zSql, chars_parsed);  }  sqlite3DbFree(db, zSql8);   rc = sqlite3ApiExit(db, rc);  sqlite3_mutex_leave(db->mutex);  return rc;}
开发者ID:biddyweb,项目名称:mediastream-plus,代码行数:44,


示例12: sqlite3Malloc

/*** Change the size of an existing memory allocation*/void *sqlite3Realloc(void *pOld, int nBytes){  int nOld, nNew;  void *pNew;  if( pOld==0 ){    return sqlite3Malloc(nBytes);  }  if( nBytes<=0 ){    sqlite3_free(pOld);    return 0;  }  if( nBytes>=0x7fffff00 ){    /* The 0x7ffff00 limit term is explained in comments on sqlite3Malloc() */    return 0;  }  nOld = sqlite3MallocSize(pOld);  nNew = sqlite3GlobalConfig.m.xRoundup(nBytes);  if( nOld==nNew ){    pNew = pOld;  }else if( sqlite3GlobalConfig.bMemstat ){    sqlite3_mutex_enter(mem0.mutex);    sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, nBytes);    if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED)+nNew-nOld >=           mem0.alarmThreshold ){      sqlite3MallocAlarm(nNew-nOld);    }    assert( sqlite3MemdebugHasType(pOld, MEMTYPE_HEAP) );    pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);    if( pNew==0 && mem0.alarmCallback ){      sqlite3MallocAlarm(nBytes);      pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);    }    if( pNew ){      nNew = sqlite3MallocSize(pNew);      sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nNew-nOld);    }    sqlite3_mutex_leave(mem0.mutex);  }else{    pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);  }  return pNew;}
开发者ID:sukantoguha,项目名称:INET-Vagrant-Demos,代码行数:44,


示例13: sqlite3_step

/*** This is the top-level implementation of sqlite3_step().  Call** sqlite3Step() to do most of the work.  If a schema error occurs,** call sqlite3Reprepare() and try again.*/int sqlite3_step(sqlite3_stmt *pStmt){  int rc = SQLITE_OK;      /* Result from sqlite3Step() */  int rc2 = SQLITE_OK;     /* Result from sqlite3Reprepare() */  Vdbe *v = (Vdbe*)pStmt;  /* the prepared statement */  int cnt = 0;             /* Counter to prevent infinite loop of reprepares */  sqlite3 *db;             /* The database connection */  if( vdbeSafetyNotNull(v) ){    return SQLITE_MISUSE_BKPT;  }  db = v->db;  sqlite3_mutex_enter(db->mutex);  while( (rc = sqlite3Step(v))==SQLITE_SCHEMA         && cnt++ < SQLITE_MAX_SCHEMA_RETRY         && (rc2 = rc = sqlite3Reprepare(v))==SQLITE_OK ){    sqlite3_reset(pStmt);    assert( v->expired==0 );  }  if( rc2!=SQLITE_OK && ALWAYS(v->isPrepareV2) && ALWAYS(db->pErr) ){    /* This case occurs after failing to recompile an sql statement.     ** The error message from the SQL compiler has already been loaded     ** into the database handle. This block copies the error message     ** from the database handle into the statement and sets the statement    ** program counter to 0 to ensure that when the statement is     ** finalized or reset the parser error message is available via    ** sqlite3_errmsg() and sqlite3_errcode().    */    const char *zErr = (const char *)sqlite3_value_text(db->pErr);     sqlite3DbFree(db, v->zErrMsg);    if( !db->mallocFailed ){      v->zErrMsg = sqlite3DbStrDup(db, zErr);      v->rc = rc2;    } else {      v->zErrMsg = 0;      v->rc = rc = SQLITE_NOMEM;    }  }  rc = sqlite3ApiExit(db, rc);  sqlite3_mutex_leave(db->mutex);  return rc;}
开发者ID:77songsong,项目名称:sqlite3,代码行数:46,


示例14: sqlite3_create_function16

extern "C" int sqlite3_create_function16(  sqlite3 *db,  const void *zFunctionName,  int nArg,  int eTextRep,  void *p,  void (*xFunc)(sqlite3_context*,int,sqlite3_value**),  void (*xStep)(sqlite3_context*,int,sqlite3_value**),  void (*xFinal)(sqlite3_context*)){  int rc;  char *zFunc8;  sqlite3_mutex_enter(db->mutex);  assert( !db->mallocFailed );  zFunc8 = sqlite3Utf16to8(db, zFunctionName, -1);  rc = sqlite3CreateFunc(db, zFunc8, nArg, eTextRep, p, xFunc, xStep, xFinal);  sqlite3_free(zFunc8);  rc = sqlite3ApiExit(db, rc);  sqlite3_mutex_leave(db->mutex);  return rc;}
开发者ID:guange2015,项目名称:sqlite-for-symbian,代码行数:21,


示例15: sqlcipher_openssl_deactivate

/* deactivate SQLCipher, most imporantly decremeting the activation count and   freeing the EVP structures on the final deactivation to ensure that    OpenSSL memory is cleaned up */static int sqlcipher_openssl_deactivate(void *ctx) {  sqlite3_mutex_enter(sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER));  openssl_init_count--;  if(openssl_init_count == 0) {    if(openssl_external_init == 0) {    /* if OpenSSL hasn't be initialized externally, and the counter reaches zero        after it's decremented, release EVP memory       Note: this code will only be reached if OpensSSL_add_all_algorithms()       is called by SQLCipher internally. This should prevent SQLCipher from        "cleaning up" openssl when it was initialized externally by the program */      EVP_cleanup();    }#ifndef SQLCIPHER_OPENSSL_NO_MUTEX_RAND    sqlite3_mutex_free(openssl_rand_mutex);    openssl_rand_mutex = NULL;#endif  }  sqlite3_mutex_leave(sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER));  return SQLITE_OK;}
开发者ID:akrav,项目名称:sqlcipher,代码行数:24,


示例16: if

/*** Allocate memory.  This routine is like sqlite3_malloc() except that it** assumes the memory subsystem has already been initialized.*/void *sqlite3Malloc(int n){  void *p;  if( n<=0 || NEVER(n>=0x7fffff00) ){    /* The NEVER(n>=0x7fffff00) term is added out of paranoia.  We want to make    ** absolutely sure that there is nothing within SQLite that can cause a    ** memory allocation of a number of bytes which is near the maximum signed    ** integer value and thus cause an integer overflow inside of the xMalloc()    ** implementation.  The n>=0x7fffff00 gives us 255 bytes of headroom.  The    ** test should never be true because SQLITE_MAX_LENGTH should be much    ** less than 0x7fffff00 and it should catch large memory allocations    ** before they reach this point. */    p = 0;  }else if( sqlite3GlobalConfig.bMemstat ){    sqlite3_mutex_enter(mem0.mutex);    mallocWithAlarm(n, &p);    sqlite3_mutex_leave(mem0.mutex);  }else{    p = sqlite3GlobalConfig.m.xMalloc(n);  }  return p;}
开发者ID:erik-knudsen,项目名称:eCos-enhancements,代码行数:25,


示例17: sqlcipher_openssl_random

/* generate a defined number of random bytes */static int sqlcipher_openssl_random (void *ctx, void *buffer, int length) {  int rc = 0;  /* concurrent calls to RAND_bytes can cause a crash under some openssl versions when a      naive application doesn't use CRYPTO_set_locking_callback and     CRYPTO_THREADID_set_callback to ensure openssl thread safety.      This is simple workaround to prevent this common crash     but a more proper solution is that applications setup platform-appropriate     thread saftey in openssl externally */#ifndef SQLCIPHER_OPENSSL_NO_MUTEX_RAND  CODEC_TRACE_MUTEX("sqlcipher_openssl_random: entering openssl_rand_mutex %p", openssl_rand_mutex);  sqlite3_mutex_enter(openssl_rand_mutex);  CODEC_TRACE_MUTEX("sqlcipher_openssl_random: entered openssl_rand_mutex %p", openssl_rand_mutex);#endif  rc = RAND_bytes((unsigned char *)buffer, length);#ifndef SQLCIPHER_OPENSSL_NO_MUTEX_RAND  CODEC_TRACE_MUTEX("sqlcipher_openssl_random: leaving openssl_rand_mutex %p", openssl_rand_mutex);  sqlite3_mutex_leave(openssl_rand_mutex);  CODEC_TRACE_MUTEX("sqlcipher_openssl_random: left openssl_rand_mutex %p", openssl_rand_mutex);#endif  return (rc == 1) ? SQLITE_OK : SQLITE_ERROR;}
开发者ID:SCALE-GmbH,项目名称:sqlcipher,代码行数:22,


示例18: sqlite3_cancel_auto_extension

/*** Cancel a prior call to sqlite3_auto_extension.  Remove xInit from the** set of routines that is invoked for each new database connection, if it** is currently on the list.  If xInit is not on the list, then this** routine is a no-op.**** Return 1 if xInit was found on the list and removed.  Return 0 if xInit** was not on the list.*/int sqlite3_cancel_auto_extension(  void (*xInit)(void)){#if SQLITE_THREADSAFE  sqlite3_mutex *mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MASTER);#endif  int i;  int n = 0;  wsdAutoextInit;  sqlite3_mutex_enter(mutex);  for(i=(int)wsdAutoext.nExt-1; i>=0; i--){    if( wsdAutoext.aExt[i]==xInit ){      wsdAutoext.nExt--;      wsdAutoext.aExt[i] = wsdAutoext.aExt[wsdAutoext.nExt];      n++;      break;    }  }  sqlite3_mutex_leave(mutex);  return n;}
开发者ID:AxisMedTech,项目名称:SQLiteLib,代码行数:30,


示例19: sqlite3_finalize

/*** The following routine destroys a virtual machine that is created by** the sqlite3_compile() routine. The integer returned is an SQLITE_** success/failure code that describes the result of executing the virtual** machine.**** This routine sets the error code and string returned by** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().*/int sqlite3_finalize(sqlite3_stmt *pStmt){  int rc;  if( pStmt==0 ){    rc = SQLITE_OK;  }else{    Vdbe *v = (Vdbe*)pStmt;    sqlite3 *db = v->db;#if SQLITE_THREADSAFE    sqlite3_mutex *mutex;#endif    if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;#if SQLITE_THREADSAFE    mutex = v->db->mutex;#endif    sqlite3_mutex_enter(mutex);    rc = sqlite3VdbeFinalize(v);    rc = sqlite3ApiExit(db, rc);    sqlite3_mutex_leave(mutex);  }  return rc;}
开发者ID:Wushaowei001,项目名称:omnibus,代码行数:30,


示例20: if

/*** Allocate memory.  This routine is like sqlite3_malloc() except that it** assumes the memory subsystem has already been initialized.*/void *sqlite3Malloc(int n){  void *p;  if( n<=0               /* IMP: R-65312-04917 */    || n>=0x7fffff00  ){    /* A memory allocation of a number of bytes which is near the maximum    ** signed integer value might cause an integer overflow inside of the    ** xMalloc().  Hence we limit the maximum size to 0x7fffff00, giving    ** 255 bytes of overhead.  SQLite itself will never use anything near    ** this amount.  The only way to reach the limit is with sqlite3_malloc() */    p = 0;  }else if( sqlite3GlobalConfig.bMemstat ){    sqlite3_mutex_enter(mem0.mutex);    mallocWithAlarm(n, &p);    sqlite3_mutex_leave(mem0.mutex);  }else{    p = sqlite3GlobalConfig.m.xMalloc(n);  }  assert( EIGHT_BYTE_ALIGNMENT(p) );  /* IMP: R-04675-44850 */  return p;}
开发者ID:AdrianHuang,项目名称:rt-thread-for-vmm,代码行数:25,


示例21: sqlite3CodecAttach

int sqlite3CodecAttach(sqlite3* db, int nDb, const void *zKey, int nKey) {  struct Db *pDb = &db->aDb[nDb];  CODEC_TRACE(("sqlite3CodecAttach: entered nDb=%d zKey=%s, nKey=%d/n", nDb, (char *)zKey, nKey));  if(nKey && zKey && pDb->pBt) {    int rc;    Pager *pPager = pDb->pBt->pBt->pPager;    sqlite3_file *fd = sqlite3Pager_get_fd(pPager);    codec_ctx *ctx;    sqlcipher_activate(); /* perform internal initialization for sqlcipher */    sqlite3_mutex_enter(db->mutex);    /* point the internal codec argument against the contet to be prepared */    rc = sqlcipher_codec_ctx_init(&ctx, pDb, pDb->pBt->pBt->pPager, fd, zKey, nKey);     if(rc != SQLITE_OK) return rc; /* initialization failed, do not attach potentially corrupted context */    sqlite3pager_sqlite3PagerSetCodec(sqlite3BtreePager(pDb->pBt), sqlite3Codec, NULL, sqlite3FreeCodecArg, (void *) ctx);    codec_set_btree_to_codec_pagesize(db, pDb, ctx);    /* force secure delete. This has the benefit of wiping internal data when deleted       and also ensures that all pages are written to disk (i.e. not skipped by       sqlite3PagerDontWrite optimizations) */     sqlite3BtreeSecureDelete(pDb->pBt, 1);     /* if fd is null, then this is an in-memory database and       we dont' want to overwrite the AutoVacuum settings       if not null, then set to the default */    if(fd != NULL) {       sqlite3BtreeSetAutoVacuum(pDb->pBt, SQLITE_DEFAULT_AUTOVACUUM);    }    sqlite3_mutex_leave(db->mutex);  }  return SQLITE_OK;}
开发者ID:CoderXL,项目名称:sqlcipher,代码行数:40,


示例22: createModule

/*** The actual function that does the work of creating a new module.** This function implements the sqlite3_create_module() and** sqlite3_create_module_v2() interfaces.*/static int createModule(  sqlite3 *db,                    /* Database in which module is registered */  const char *zName,              /* Name assigned to this module */  const sqlite3_module *pModule,  /* The definition of the module */  void *pAux,                     /* Context pointer for xCreate/xConnect */  void (*xDestroy)(void *)        /* Module destructor function */){  int rc = SQLITE_OK;  int nName;  sqlite3_mutex_enter(db->mutex);  nName = sqlite3Strlen30(zName);  if( sqlite3HashFind(&db->aModule, zName) ){    rc = SQLITE_MISUSE_BKPT;  }else{    Module *pMod;    pMod = (Module *)sqlite3DbMallocRaw(db, sizeof(Module) + nName + 1);    if( pMod ){      Module *pDel;      char *zCopy = (char *)(&pMod[1]);      memcpy(zCopy, zName, nName+1);      pMod->zName = zCopy;      pMod->pModule = pModule;      pMod->pAux = pAux;      pMod->xDestroy = xDestroy;      pMod->pEpoTab = 0;      pDel = (Module *)sqlite3HashInsert(&db->aModule,zCopy,(void*)pMod);      assert( pDel==0 || pDel==pMod );      if( pDel ){        db->mallocFailed = 1;        sqlite3DbFree(db, pDel);      }    }  }  rc = sqlite3ApiExit(db, rc);  if( rc!=SQLITE_OK && xDestroy ) xDestroy(pAux);  sqlite3_mutex_leave(db->mutex);  return rc;}
开发者ID:ngdmcc,项目名称:sqlite,代码行数:45,


示例23: btree_insert

/*** usage:   btree_insert CSR ?KEY? VALUE**** Set the size of the cache used by btree $ID.*/static int btree_insert(  ClientData clientData,  Tcl_Interp *interp,  int objc,  Tcl_Obj *const objv[]){  BtCursor *pCur;  int rc;  BtreePayload x;  if( objc!=4 && objc!=3 ){    Tcl_WrongNumArgs(interp, 1, objv, "?-intkey? CSR KEY VALUE");    return TCL_ERROR;  }  memset(&x, 0, sizeof(x));  if( objc==4 ){    if( Tcl_GetIntFromObj(interp, objv[2], &rc) ) return TCL_ERROR;    x.nKey = rc;    x.pData = (void*)Tcl_GetByteArrayFromObj(objv[3], &x.nData);  }else{    x.pKey = (void*)Tcl_GetByteArrayFromObj(objv[2], &rc);    x.nKey = rc;  }  pCur = (BtCursor*)sqlite3TestTextToPtr(Tcl_GetString(objv[1]));  sqlite3_mutex_enter(pCur->pBtree->db->mutex);  sqlite3BtreeEnter(pCur->pBtree);  rc = sqlite3BtreeInsert(pCur, &x, 0, 0);  sqlite3BtreeLeave(pCur->pBtree);  sqlite3_mutex_leave(pCur->pBtree->db->mutex);  Tcl_ResetResult(interp);  if( rc ){    Tcl_AppendResult(interp, sqlite3ErrName(rc), 0);    return TCL_ERROR;  }  return TCL_OK;}
开发者ID:AlvarHHM,项目名称:sqlite,代码行数:44,


示例24: __declspec

__declspec(dllexport) int WINAPI sqlite3_table_cursor(sqlite3_stmt *pstmt, int iDb, Pgno tableRootPage){  Vdbe *p = (Vdbe *)pstmt;  sqlite3 *db = (p == NULL) ? NULL : p->db;  int n;  int ret = -1;  sqlite3_mutex_enter(db->mutex);  for (n = 0; n < p->nCursor && p->apCsr[n] != NULL; n++)  {    if (p->apCsr[n]->isTable == FALSE) continue;    if (p->apCsr[n]->iDb != iDb) continue;    if (p->apCsr[n]->pCursor->pgnoRoot == tableRootPage)    {      ret = n;      break;    }  }  sqlite3_mutex_leave(db->mutex);  return ret;}
开发者ID:AugustoAngeletti,项目名称:blockspaces,代码行数:22,


示例25: return

/*** Return UTF-16 encoded English language explanation of the most recent** error.*/EXPORT_C const void *sqlite3_errmsg16(sqlite3 *db){  /* Because all the characters in the string are in the unicode  ** range 0x00-0xFF, if we pad the big-endian string with a   ** zero byte, we can obtain the little-endian string with  ** &big_endian[1].  */  static const char outOfMemBe[] = {    0, 'o', 0, 'u', 0, 't', 0, ' ',     0, 'o', 0, 'f', 0, ' ',     0, 'm', 0, 'e', 0, 'm', 0, 'o', 0, 'r', 0, 'y', 0, 0, 0  };  static const char misuseBe [] = {    0, 'l', 0, 'i', 0, 'b', 0, 'r', 0, 'a', 0, 'r', 0, 'y', 0, ' ',     0, 'r', 0, 'o', 0, 'u', 0, 't', 0, 'i', 0, 'n', 0, 'e', 0, ' ',     0, 'c', 0, 'a', 0, 'l', 0, 'l', 0, 'e', 0, 'd', 0, ' ',     0, 'o', 0, 'u', 0, 't', 0, ' ',     0, 'o', 0, 'f', 0, ' ',     0, 's', 0, 'e', 0, 'q', 0, 'u', 0, 'e', 0, 'n', 0, 'c', 0, 'e', 0, 0, 0  };  const void *z;  if( !db ){    return (void *)(&outOfMemBe[SQLITE_UTF16NATIVE==SQLITE_UTF16LE?1:0]);  }  if( sqlite3SafetyCheck(db) || db->errCode==SQLITE_MISUSE ){    return (void *)(&misuseBe[SQLITE_UTF16NATIVE==SQLITE_UTF16LE?1:0]);  }  sqlite3_mutex_enter(db->mutex);  assert( !db->mallocFailed );  z = sqlite3_value_text16(db->pErr);  if( z==0 ){    sqlite3ValueSetStr(db->pErr, -1, sqlite3ErrStr(db->errCode),         SQLITE_UTF8, SQLITE_STATIC);    z = sqlite3_value_text16(db->pErr);  }  sqlite3ApiExit(0, 0);  sqlite3_mutex_leave(db->mutex);  return z;}
开发者ID:guange2015,项目名称:sqlite-for-symbian,代码行数:43,


示例26: sqlite3Malloc

/*** Change the size of an existing memory allocation*/void *sqlite3Realloc(void *pOld, int nBytes){  int nOld, nNew;  void *pNew;  if( pOld==0 ){    return sqlite3Malloc(nBytes);  }  if( nBytes<=0 ){    sqlite3_free(pOld);    return 0;  }  nOld = sqlite3MallocSize(pOld);  if( sqlite3GlobalConfig.bMemstat ){    sqlite3_mutex_enter(mem0.mutex);    sqlite3StatusSet(SQLITE_STATUS_MALLOC_SIZE, nBytes);    nNew = sqlite3GlobalConfig.m.xRoundup(nBytes);    if( nOld==nNew ){      pNew = pOld;    }else{      if( sqlite3StatusValue(SQLITE_STATUS_MEMORY_USED)+nNew-nOld >=             mem0.alarmThreshold ){        sqlite3MallocAlarm(nNew-nOld);      }      pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);      if( pNew==0 && mem0.alarmCallback ){        sqlite3MallocAlarm(nBytes);        pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nNew);      }      if( pNew ){        nNew = sqlite3MallocSize(pNew);        sqlite3StatusAdd(SQLITE_STATUS_MEMORY_USED, nNew-nOld);      }    }    sqlite3_mutex_leave(mem0.mutex);  }else{    pNew = sqlite3GlobalConfig.m.xRealloc(pOld, nBytes);  }  return pNew;}
开发者ID:cdaffara,项目名称:symbiandump-os2,代码行数:41,


示例27: sqlcipher_openssl_deactivate

/* activate and initialize sqlcipher. Most importantly, this will automatically   intialize OpenSSL's EVP system if it hasn't already be externally. Note that    this function may be called multiple times as new codecs are intiialized.    Thus it performs some basic counting to ensure that only the last and final   sqlcipher_openssl_deactivate() will free the EVP structures. */static int sqlcipher_openssl_activate(void *ctx) {  /* initialize openssl and increment the internal init counter     but only if it hasn't been initalized outside of SQLCipher by this program      e.g. on startup */  sqlite3_mutex_enter(sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER));  if(openssl_init_count == 0 && EVP_get_cipherbyname(CIPHER) != NULL) {    /* if openssl has not yet been initialized by this library, but        a call to get_cipherbyname works, then the openssl library       has been initialized externally already. */    openssl_external_init = 1;  }#ifdef SQLCIPHER_FIPS  if(!FIPS_mode()){    if(!FIPS_mode_set(1)){      ERR_load_crypto_strings();      ERR_print_errors_fp(stderr);    }  }#endif  if(openssl_init_count == 0 && openssl_external_init == 0)  {    /* if the library was not externally initialized, then should be now */    OpenSSL_add_all_algorithms();  } #ifndef SQLCIPHER_OPENSSL_NO_MUTEX_RAND  if(openssl_rand_mutex == NULL) {    /* allocate a mutex to guard against concurrent calls to RAND_bytes() */    openssl_rand_mutex = sqlite3_mutex_alloc(SQLITE_MUTEX_FAST);  }#endif  openssl_init_count++;   sqlite3_mutex_leave(sqlite3_mutex_alloc(SQLITE_MUTEX_STATIC_MASTER));  return SQLITE_OK;}
开发者ID:zhaozg,项目名称:sqlitext,代码行数:44,


示例28: sqlite3_finalize

/*** The following routine destroys a virtual machine that is created by** the sqlite3_compile() routine. The integer returned is an SQLITE_** success/failure code that describes the result of executing the virtual** machine.**** This routine sets the error code and string returned by** sqlite3_errcode(), sqlite3_errmsg() and sqlite3_errmsg16().*/int sqlite3_finalize(sqlite3_stmt *pStmt){  int rc;  if( pStmt==0 ){    /* IMPLEMENTATION-OF: R-57228-12904 Invoking sqlite3_finalize() on a NULL    ** pointer is a harmless no-op. */    rc = SQLITE_OK;  }else{    Vdbe *v = (Vdbe*)pStmt;    sqlite3 *db = v->db;#if SQLITE_THREADSAFE    sqlite3_mutex *mutex;#endif    if( vdbeSafety(v) ) return SQLITE_MISUSE_BKPT;#if SQLITE_THREADSAFE    mutex = v->db->mutex;#endif    sqlite3_mutex_enter(mutex);    rc = sqlite3VdbeFinalize(v);    rc = sqlite3ApiExit(db, rc);    sqlite3_mutex_leave(mutex);  }  return rc;}
开发者ID:77songsong,项目名称:sqlite3,代码行数:32,


示例29: btree_ismemdb

/*** Usage:   btree_ismemdb ID**** Return true if the B-Tree is in-memory.*/static int btree_ismemdb(  void *NotUsed,  Tcl_Interp *interp,    /* The TCL interpreter that invoked this command */  int argc,              /* Number of arguments */  const char **argv      /* Text of each argument */){  Btree *pBt;  int res;  if( argc!=2 ){    Tcl_AppendResult(interp, "wrong # args: should be /"", argv[0],       " ID/"", 0);    return TCL_ERROR;  }  pBt = sqlite3TestTextToPtr(argv[1]);  sqlite3_mutex_enter(pBt->db->mutex);  sqlite3BtreeEnter(pBt);  res = sqlite3PagerIsMemdb(sqlite3BtreePager(pBt));  sqlite3BtreeLeave(pBt);  sqlite3_mutex_leave(pBt->db->mutex);  Tcl_SetObjResult(interp, Tcl_NewBooleanObj(res));  return SQLITE_OK;}
开发者ID:AlexL871,项目名称:rt-thread-stm32f4discovery,代码行数:28,


示例30: assert

/*** Convert the N-th element of pStmt->pColName[] into a string using** xFunc() then return that string.  If N is out of range, return 0.**** There are up to 5 names for each column.  useType determines which** name is returned.  Here are the names:****    0      The column name as it should be displayed for output**    1      The datatype name for the column**    2      The name of the database that the column derives from**    3      The name of the table that the column derives from**    4      The name of the table column that the result column derives from**** If the result is not a simple column reference (if it is an expression** or a constant) then useTypes 2, 3, and 4 return NULL.*/static const void *columnName(  sqlite3_stmt *pStmt,  int N,  const void *(*xFunc)(Mem*),  int useType){  const void *ret;  Vdbe *p;  int n;  sqlite3 *db;#ifdef SQLITE_ENABLE_API_ARMOR  if( pStmt==0 ){    (void)SQLITE_MISUSE_BKPT;    return 0;  }#endif  ret = 0;  p = (Vdbe *)pStmt;  db = p->db;  assert( db!=0 );  n = sqlite3_column_count(pStmt);  if( N<n && N>=0 ){    N += useType*n;    sqlite3_mutex_enter(db->mutex);    assert( db->mallocFailed==0 );    ret = xFunc(&p->aColName[N]);     /* A malloc may have failed inside of the xFunc() call. If this    ** is the case, clear the mallocFailed flag and return NULL.    */    if( db->mallocFailed ){      db->mallocFailed = 0;      ret = 0;    }    sqlite3_mutex_leave(db->mutex);  }  return ret;}
开发者ID:Farteen,项目名称:firefox-ios,代码行数:53,



注:本文中的sqlite3_mutex_leave函数示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。


C++ sqlite3_open函数代码示例
C++ sqlite3_mutex_held函数代码示例
万事OK自学网:51自学网_软件自学网_CAD自学网自学excel、自学PS、自学CAD、自学C语言、自学css3实例,是一个通过网络自主学习工作技能的自学平台,网友喜欢的软件自学网站。