本文整理汇总了C++中S2C函数的典型用法代码示例。如果您正苦于以下问题:C++ S2C函数的具体用法?C++ S2C怎么用?C++ S2C使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了S2C函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: __wt_curstat_cache_walk
/*
* __wt_curstat_cache_walk --
* Initialize the statistics for a cache cache_walk pass.
*/
void
__wt_curstat_cache_walk(WT_SESSION_IMPL *session)
{
WT_BTREE *btree;
WT_CONNECTION_IMPL *conn;
WT_PAGE_INDEX *root_idx;
btree = S2BT(session);
conn = S2C(session);
/* Set statistics that don't require walking the cache. */
WT_STAT_DATA_SET(session,
cache_state_gen_current, conn->cache->evict_pass_gen);
/* Root page statistics */
root_idx = WT_INTL_INDEX_GET_SAFE(btree->root.page);
WT_STAT_DATA_SET(session,
cache_state_root_entries, root_idx->entries);
WT_STAT_DATA_SET(session,
cache_state_root_size, btree->root.page->memory_footprint);
WT_WITH_HANDLE_LIST_LOCK(session, __evict_stat_walk(session));
}
示例2: __backup_log_append
/*
* __backup_log_append --
* Append log files needed for backup.
*/
static int
__backup_log_append(WT_SESSION_IMPL *session, WT_CURSOR_BACKUP *cb, int active)
{
WT_CONNECTION_IMPL *conn;
WT_DECL_RET;
u_int i, logcount;
char **logfiles;
conn = S2C(session);
logfiles = NULL;
logcount = 0;
ret = 0;
if (conn->log) {
WT_ERR(__wt_log_get_all_files(
session, &logfiles, &logcount, &cb->maxid, active));
for (i = 0; i < logcount; i++)
WT_ERR(__backup_list_append(session, cb, logfiles[i]));
}
err: if (logfiles != NULL)
__wt_log_files_free(session, logfiles, logcount);
return (ret);
}
示例3: __wt_txn_init
/*
* __wt_txn_init --
* Initialize a session's transaction data.
*/
int
__wt_txn_init(WT_SESSION_IMPL *session)
{
WT_TXN *txn;
txn = &session->txn;
txn->id = WT_TXN_NONE;
WT_RET(__wt_calloc_def(session,
S2C(session)->session_size, &txn->snapshot));
/*
* Take care to clean these out in case we are reusing the transaction
* for eviction.
*/
txn->mod = NULL;
txn->modref = NULL;
/* The default isolation level is read-committed. */
txn->isolation = session->isolation = TXN_ISO_READ_COMMITTED;
return (0);
}
示例4: __wt_cache_config
/*读取配置信息,将配置信息设置到当前conn的cache信息*/
int __wt_cache_config(WT_SESSION_IMPL *session, int reconfigure, const char *cfg[])
{
WT_CONFIG_ITEM cval;
WT_CONNECTION_IMPL *conn;
int now_shared, was_shared;
conn = S2C(session);
WT_ASSERT(session, conn->cache != NULL);
WT_RET(__wt_config_gets_none(session, cfg, "shared_cache.name", &cval));
now_shared = cval.len != 0;
was_shared = F_ISSET(conn, WT_CONN_CACHE_POOL);
/* Cleanup if reconfiguring */
if (reconfigure && was_shared && !now_shared)
/* Remove ourselves from the pool if necessary */
WT_RET(__wt_conn_cache_pool_destroy(session)); /*如果原来是cache pool管理connection cache,现在的配置设置成独立的cache管理,那么从cache pool中删除管理关系*/
else if (reconfigure && !was_shared && now_shared)
/*
* Cache size will now be managed by the cache pool - the
* start size always needs to be zero to allow the pool to
* manage how much memory is in-use.
*/
conn->cache_size = 0;
/*配置connection的cache*/
WT_RET(__cache_config_local(session, now_shared, cfg));
if (now_shared) {
WT_RET(__wt_cache_pool_config(session, cfg)); /*对cache pool的配置更新*/
WT_ASSERT(session, F_ISSET(conn, WT_CONN_CACHE_POOL));
if (!was_shared)
WT_RET(__wt_conn_cache_pool_open(session)); /*将connection cache加入到cache pool当中进行管理*/
}
return 0;
}
示例5: __wt_spin_lock_register_caller
/*
* __wt_spin_lock_register_caller --
* Register a spin-lock caller's location information in the blocking
* matrix.
*/
int
__wt_spin_lock_register_caller(WT_SESSION_IMPL *session,
const char *name, const char *file, int line, int *idp)
{
WT_CONNECTION_IMPL *conn;
WT_CONNECTION_STATS_SPINLOCK *p;
conn = S2C(session);
/*
* The caller's location ID is a static offset into a per-connection
* structure, and that has problems: first, if there are multiple
* connections, we'll need to hold some kind of lock to avoid racing
* when setting that value, and second, if/when there are multiple
* connections and/or a single connection is closed and re-opened, the
* variable may be initialized and underlying connection information
* may not.
*
* First, allocate a location ID if needed.
*/
WT_RET(__spin_lock_next_id(session, idp));
/*
* Add the caller's information to the blocking matrix. We could race
* here (if two threads of control register the same lock at the same
* time), but we don't care as both threads are setting the identical
* information.
*/
p = &conn->spinlock_block[*idp];
p->name = name;
if ((p->file = strrchr(file, '/')) == NULL)
p->file = file;
else
++p->file;
p->line = line;
return (0);
}
示例6: __wt_las_create
/*
* __wt_las_create --
* Initialize the database's lookaside store.
*/
int
__wt_las_create(WT_SESSION_IMPL *session)
{
WT_CONNECTION_IMPL *conn;
WT_DECL_RET;
const char *drop_cfg[] = {
WT_CONFIG_BASE(session, WT_SESSION_drop), "force=true", NULL };
conn = S2C(session);
/*
* Done at startup: we cannot do it on demand because we require the
* schema lock to create and drop the file, and it may not always be
* available.
*
* Open an internal session, used for the shared lookaside cursor.
*
* Sessions associated with a lookaside cursor should never be tapped
* for eviction.
*/
WT_RET(__wt_open_internal_session(
conn, "lookaside table", 1, 1, &conn->las_session));
session = conn->las_session;
F_SET(session, WT_SESSION_LOOKASIDE_CURSOR | WT_SESSION_NO_EVICTION);
/* Discard any previous incarnation of the file. */
WT_RET(__wt_session_drop(session, WT_LAS_URI, drop_cfg));
/* Re-create the file. */
WT_RET(__wt_session_create(session, WT_LAS_URI, WT_LAS_FORMAT));
/* Open the shared cursor. */
WT_WITHOUT_DHANDLE(session,
ret = __las_cursor_create(session, &conn->las_cursor));
return (ret);
}
示例7: __wt_session_fotxn_add
/*
* __wt_session_fotxn_add --
* Add a new entry into the session's free-on-transaction generation list.
*/
int
__wt_session_fotxn_add(WT_SESSION_IMPL *session, void *p, size_t len)
{
WT_FOTXN *fotxn;
size_t i;
/*
* Make sure the current thread has a transaction pinned so that
* we don't immediately free the memory we are stashing.
*/
WT_ASSERT(session,
WT_SESSION_TXN_STATE(session)->snap_min != WT_TXN_NONE);
/* Grow the list as necessary. */
WT_RET(__wt_realloc_def(session,
&session->fotxn_size, session->fotxn_cnt + 1, &session->fotxn));
/* Find an empty slot. */
for (i = 0, fotxn = session->fotxn;
i < session->fotxn_size / sizeof(session->fotxn[0]); ++i, ++fotxn)
if (fotxn->p == NULL) {
fotxn->txnid = S2C(session)->txn_global.current + 1;
WT_ASSERT(session,
!__wt_txn_visible_all(session, fotxn->txnid));
fotxn->p = p;
fotxn->len = len;
break;
}
++session->fotxn_cnt;
/* See if we can free any previous entries. */
if (session->fotxn_cnt > 1)
__wt_session_fotxn_discard(session, session, 0);
return (0);
}
示例8: __wt_block_close
/*
* __wt_block_close --
* Close a block handle.
*/
int
__wt_block_close(WT_SESSION_IMPL *session, WT_BLOCK *block)
{
WT_CONNECTION_IMPL *conn;
WT_DECL_RET;
if (block == NULL) /* Safety check */
return (0);
conn = S2C(session);
WT_TRET(__wt_verbose(session, WT_VERB_BLOCK,
"close: %s", block->name == NULL ? "" : block->name ));
__wt_spin_lock(session, &conn->block_lock);
/* Reference count is initialized to 1. */
if (block->ref == 0 || --block->ref == 0)
WT_TRET(__block_destroy(session, block));
__wt_spin_unlock(session, &conn->block_lock);
return (ret);
}
示例9: __ckpt_server_config
/*
* __ckpt_server_config --
* Parse and setup the checkpoint server options.
*/
static int
__ckpt_server_config(WT_SESSION_IMPL *session, const char **cfg, int *startp)
{
WT_CONFIG_ITEM cval;
WT_CONNECTION_IMPL *conn;
WT_DECL_ITEM(tmp);
WT_DECL_RET;
conn = S2C(session);
/*
* The checkpoint configuration requires a wait time -- if it's not set,
* we're not running at all.
*/
WT_RET(__wt_config_gets(session, cfg, "checkpoint.wait", &cval));
if (cval.val == 0) {
*startp = 0;
return (0);
}
conn->ckpt_usecs = (long)cval.val * 1000000;
*startp = 1;
WT_RET(__wt_config_gets(session, cfg, "checkpoint.name", &cval));
if (!WT_STRING_MATCH(WT_CHECKPOINT, cval.str, cval.len)) {
WT_RET(__wt_scr_alloc(session, cval.len + 20, &tmp));
strcpy((char *)tmp->data, "name=");
strncat((char *)tmp->data, cval.str, cval.len);
ret = __wt_strndup(session,
tmp->data, strlen("name=") + cval.len, &conn->ckpt_config);
__wt_scr_free(&tmp);
WT_RET(ret);
}
return (0);
}
示例10: __wt_log_slot_close
/*
* __wt_log_slot_close --
* Close a slot and do not allow any other threads to join this slot.
* Remove this from the active slot array and move a new slot from
* the pool into its place. Set up the size of this group;
* Must be called with the logging spinlock held.
*/
int
__wt_log_slot_close(WT_SESSION_IMPL *session, WT_LOGSLOT *slot)
{
WT_CONNECTION_IMPL *conn;
WT_LOG *log;
WT_LOGSLOT *newslot;
int64_t old_state;
conn = S2C(session);
log = conn->log;
/*
* Find an unused slot in the pool.
*/
WT_RET(__log_slot_find_free(session, &newslot));
/*
* Swap out the slot we're going to use and put a free one in the
* slot array in its place so that threads can use it right away.
*/
WT_STAT_FAST_CONN_INCR(session, log_slot_closes);
newslot->slot_state = WT_LOG_SLOT_READY;
newslot->slot_index = slot->slot_index;
log->slot_array[newslot->slot_index] = newslot;
old_state = WT_ATOMIC_STORE8(slot->slot_state, WT_LOG_SLOT_PENDING);
slot->slot_group_size = (uint64_t)(old_state - WT_LOG_SLOT_READY);
/*
* Note that this statistic may be much bigger than in reality,
* especially when compared with the total bytes written in
* __log_fill. The reason is that this size reflects any
* rounding up that is needed and the total bytes in __log_fill
* is the amount of user bytes.
*/
WT_STAT_FAST_CONN_INCRV(session,
log_slot_consolidated, (uint64_t)slot->slot_group_size);
return (0);
}
示例11: __wt_free_int
/*
* __wt_free_int --
* ANSI free function.
*/
void
__wt_free_int(WT_SESSION_IMPL *session, void *p_arg)
{
void *p;
/*
* !!!
* This function MUST handle a NULL WT_SESSION_IMPL handle.
*/
if (session != NULL && S2C(session)->stats != NULL)
WT_CSTAT_INCR(session, memfree);
/*
* If there's a serialization bug we might race with another thread.
* We can't avoid the race (and we aren't willing to flush memory),
* but we minimize the window by clearing the free address atomically,
* hoping a racing thread will see, and won't free, a NULL pointer.
*/
p = *(void **)p_arg;
*(void **)p_arg = NULL;
if (p != NULL) /* ANSI C free semantics */
free(p);
}
示例12: __metadata_load_hot_backup
/*
* __metadata_load_hot_backup --
* Load the contents of any hot backup file.
*/
static int
__metadata_load_hot_backup(WT_SESSION_IMPL *session)
{
WT_DECL_ITEM(key);
WT_DECL_ITEM(value);
WT_DECL_RET;
WT_FSTREAM *fs;
bool exist;
/* Look for a hot backup file: if we find it, load it. */
WT_RET(__wt_fs_exist(session, WT_METADATA_BACKUP, &exist));
if (!exist)
return (0);
WT_RET(__wt_fopen(session,
WT_METADATA_BACKUP, 0, WT_STREAM_READ, &fs));
/* Read line pairs and load them into the metadata file. */
WT_ERR(__wt_scr_alloc(session, 512, &key));
WT_ERR(__wt_scr_alloc(session, 512, &value));
for (;;) {
WT_ERR(__wt_getline(session, fs, key));
if (key->size == 0)
break;
WT_ERR(__wt_getline(session, fs, value));
if (value->size == 0)
WT_ERR(__wt_illegal_value(session, WT_METADATA_BACKUP));
WT_ERR(__wt_metadata_update(session, key->data, value->data));
}
F_SET(S2C(session), WT_CONN_WAS_BACKUP);
err: WT_TRET(__wt_fclose(session, &fs));
__wt_scr_free(session, &key);
__wt_scr_free(session, &value);
return (ret);
}
示例13: __wt_las_cursor
/*
* __wt_las_cursor --
* Return a lookaside cursor.
*/
void
__wt_las_cursor(
WT_SESSION_IMPL *session, WT_CURSOR **cursorp, uint32_t *session_flags)
{
WT_CONNECTION_IMPL *conn;
*cursorp = NULL;
/*
* We don't want to get tapped for eviction after we start using the
* lookaside cursor; save a copy of the current eviction state, we'll
* turn eviction off before we return.
*
* Don't cache lookaside table pages, we're here because of eviction
* problems and there's no reason to believe lookaside pages will be
* useful more than once.
*/
*session_flags =
F_MASK(session, WT_SESSION_NO_CACHE | WT_SESSION_NO_EVICTION);
conn = S2C(session);
/*
* Some threads have their own lookaside table cursors, else lock the
* shared lookaside cursor.
*/
if (F_ISSET(session, WT_SESSION_LOOKASIDE_CURSOR))
*cursorp = session->las_cursor;
else {
__wt_spin_lock(session, &conn->las_lock);
*cursorp = conn->las_session->las_cursor;
}
/* Turn caching and eviction off. */
F_SET(session, WT_SESSION_NO_CACHE | WT_SESSION_NO_EVICTION);
}
示例14: __wt_schema_rename
int __wt_schema_rename(WT_SESSION_IMPL *session, const char *uri, const char *newuri, const char *cfg[])
{
WT_DATA_SOURCE *dsrc;
WT_DECL_RET;
const char *p, *t;
/* The target type must match the source type. 匹配前面的关键字,例如file: table:*/
for (p = uri, t = newuri; *p == *t && *p != ':'; ++p, ++t)
;
if (*p != ':' || *t != ':')
WT_RET_MSG(session, EINVAL, "rename target type must match URI: %s to %s", uri, newuri);
/*
* We track rename operations, if we fail in the middle, we want to
* back it all out.
*/
WT_RET(__wt_meta_track_on(session));
if (WT_PREFIX_MATCH(uri, "file:"))
ret = __rename_file(session, uri, newuri);
else if (WT_PREFIX_MATCH(uri, "lsm:"))
ret = __wt_lsm_tree_rename(session, uri, newuri, cfg);
else if (WT_PREFIX_MATCH(uri, "table:"))
ret = __rename_table(session, uri, newuri, cfg);
else if ((dsrc = __wt_schema_get_source(session, uri)) != NULL)
ret = dsrc->rename == NULL ? __wt_object_unsupported(session, uri) : dsrc->rename(dsrc, &session->iface, uri, newuri, (WT_CONFIG_ARG *)cfg);
else
ret = __wt_bad_object_type(session, uri);
/* Bump the schema generation so that stale data is ignored. */
++S2C(session)->schema_gen;
WT_TRET(__wt_meta_track_off(session, 1, ret != 0));
return (ret == WT_NOTFOUND ? ENOENT : ret);
}
示例15: __wt_spin_lock_unregister_lock
/*
* __wt_spin_lock_unregister_lock --
* Remove a lock from the connection's list.
*/
void
__wt_spin_lock_unregister_lock(WT_SESSION_IMPL *session, WT_SPINLOCK *t)
{
WT_CONNECTION_IMPL *conn;
u_int i;
conn = S2C(session);
for (i = 0; i < WT_SPINLOCK_MAX; i++)
if (conn->spinlock_list[i] == t)
conn->spinlock_list[i] = NULL;
/*
* XXX
* The statistics thread reads through this array, there's a possible
* race: if that thread reads the pointer then goes to sleep, then we
* free the spinlock, then the statistics thread wakes up, it can read
* free'd memory.
*
* This is performance debugging code, so we're not fixing the race for
* now, minimize the window.
*/
WT_FULL_BARRIER();
}