本文整理汇总了C++中osi_Assert函数的典型用法代码示例。如果您正苦于以下问题:C++ osi_Assert函数的具体用法?C++ osi_Assert怎么用?C++ osi_Assert使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了osi_Assert函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: afs_sgidaemon
int
afs_sgidaemon(void)
{
int s;
struct dcache *tdc;
if (afs_sgibklock == NULL) {
SV_INIT(&afs_sgibksync, "bksync", 0, 0);
SV_INIT(&afs_sgibkwait, "bkwait", 0, 0);
SPINLOCK_INIT(&afs_sgibklock, "bklock");
}
s = SPLOCK(afs_sgibklock);
for (;;) {
/* wait for something to do */
SP_WAIT(afs_sgibklock, s, &afs_sgibksync, PINOD);
osi_Assert(afs_sgibklist);
/* XX will probably need to generalize to real list someday */
s = SPLOCK(afs_sgibklock);
while (afs_sgibklist) {
tdc = afs_sgibklist;
afs_sgibklist = NULL;
SPUNLOCK(afs_sgibklock, s);
AFS_GLOCK();
tdc->dflags &= ~DFEntryMod;
osi_Assert(afs_WriteDCache(tdc, 1) == 0);
AFS_GUNLOCK();
s = SPLOCK(afs_sgibklock);
}
/* done all the work - wake everyone up */
while (SV_SIGNAL(&afs_sgibkwait));
}
}
开发者ID:meffie,项目名称:openafs,代码行数:34,代码来源:afs_daemons.c
示例2: _afs_tp_worker_start
/**
* start a worker thread.
*
* @param[in] pool thread pool object
* @param[inout] worker_out address in which to store worker thread object pointer
*
* @return operation status
* @retval 0 success
* @retval ENOMEM out of memory
*/
static int
_afs_tp_worker_start(struct afs_thread_pool * pool,
struct afs_thread_pool_worker ** worker_out)
{
int ret = 0;
pthread_attr_t attrs;
struct afs_thread_pool_worker * worker;
ret = _afs_tp_worker_alloc(worker_out);
if (ret) {
goto error;
}
worker = *worker_out;
worker->pool = pool;
worker->req_shutdown = 0;
osi_Assert(pthread_attr_init(&attrs) == 0);
osi_Assert(pthread_attr_setdetachstate(&attrs, PTHREAD_CREATE_DETACHED) == 0);
ret = pthread_create(&worker->tid, &attrs, &_afs_tp_worker_run, worker);
error:
return ret;
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:35,代码来源:thread_pool.c
示例3: ih_copy
/* Copy an inode handle */
IHandle_t *
ih_copy(IHandle_t * ihP)
{
IH_LOCK;
osi_Assert(ih_Inited);
osi_Assert(ihP->ih_refcnt > 0);
ihP->ih_refcnt++;
IH_UNLOCK;
return ihP;
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:11,代码来源:ihandle.c
示例4: fd_reallyclose
/*
* Actually close the file descriptor handle and return it to
* the free list.
*/
int
fd_reallyclose(FdHandle_t * fdP)
{
FD_t closeFd;
IHandle_t *ihP;
if (!fdP)
return 0;
IH_LOCK;
osi_Assert(ih_Inited);
osi_Assert(fdInUseCount > 0);
osi_Assert(fdP->fd_status == FD_HANDLE_INUSE ||
fdP->fd_status == FD_HANDLE_CLOSING);
ihP = fdP->fd_ih;
closeFd = fdP->fd_fd;
fdP->fd_refcnt--;
if (fdP->fd_refcnt == 0) {
DLL_DELETE(fdP, ihP->ih_fdhead, ihP->ih_fdtail, fd_ihnext, fd_ihprev);
DLL_INSERT_TAIL(fdP, fdAvailHead, fdAvailTail, fd_next, fd_prev);
fdP->fd_status = FD_HANDLE_AVAIL;
fdP->fd_refcnt = 0;
fdP->fd_ih = NULL;
fdP->fd_fd = INVALID_FD;
}
/* All the file descriptor handles have been closed; reset
* the IH_REALLY_CLOSED flag indicating that ih_reallyclose
* has completed its job.
*/
if (!ihP->ih_fdhead) {
ihP->ih_flags &= ~IH_REALLY_CLOSED;
}
if (fdP->fd_refcnt == 0) {
IH_UNLOCK;
OS_CLOSE(closeFd);
IH_LOCK;
fdInUseCount -= 1;
}
/* If this is not the only reference to the Inode then we can decrement
* the reference count, otherwise we need to call ih_release. */
if (ihP->ih_refcnt > 1)
ihP->ih_refcnt--;
else
_ih_release_r(ihP);
IH_UNLOCK;
return 0;
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:59,代码来源:ihandle.c
示例5: iHandleAllocateChunk
/* Allocate a chunk of inode handles */
void
iHandleAllocateChunk(void)
{
int i;
IHandle_t *ihP;
osi_Assert(ihAvailHead == NULL);
ihP = malloc(I_HANDLE_MALLOCSIZE * sizeof(IHandle_t));
osi_Assert(ihP != NULL);
for (i = 0; i < I_HANDLE_MALLOCSIZE; i++) {
ihP[i].ih_refcnt = 0;
DLL_INSERT_TAIL(&ihP[i], ihAvailHead, ihAvailTail, ih_next, ih_prev);
}
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:15,代码来源:ihandle.c
示例6: SYNC_getSock
/**
* get a socket descriptor of the appropriate domain.
*
* @param[in] endpoint pointer to sync endpoint object
*
* @return socket descriptor
*
* @post socket of domain specified in endpoint structure is created and
* returned to caller.
*/
osi_socket
SYNC_getSock(SYNC_endpoint_t * endpoint)
{
osi_socket sd;
osi_Assert((sd = socket(endpoint->domain, SOCK_STREAM, 0)) >= 0);
return sd;
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:17,代码来源:daemon_com.c
示例7: _afs_tp_worker_run
/**
* low-level thread entry point.
*
* @param[in] rock opaque pointer to thread worker object
*
* @return opaque return pointer from pool entry function
*
* @internal
*/
static void *
_afs_tp_worker_run(void * rock)
{
struct afs_thread_pool_worker * worker = rock;
struct afs_thread_pool * pool = worker->pool;
/* register worker with pool */
MUTEX_ENTER(&pool->lock);
queue_Append(&pool->thread_list, worker);
pool->nthreads++;
MUTEX_EXIT(&pool->lock);
/* call high-level entry point */
worker->ret = (*pool->entry)(pool, worker, pool->work_queue, pool->rock);
/* adjust pool live thread count */
MUTEX_ENTER(&pool->lock);
osi_Assert(pool->nthreads);
queue_Remove(worker);
pool->nthreads--;
if (!pool->nthreads) {
CV_BROADCAST(&pool->shutdown_cv);
pool->state = AFS_TP_STATE_STOPPED;
}
MUTEX_EXIT(&pool->lock);
_afs_tp_worker_free(worker);
return NULL;
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:39,代码来源:thread_pool.c
示例8: stream_open
/* Open a file for buffered I/O */
StreamHandle_t *
stream_open(const char *filename, const char *mode)
{
FD_t fd = INVALID_FD;
if (strcmp(mode, "r") == 0) {
fd = OS_OPEN(filename, O_RDONLY, 0);
} else if (strcmp(mode, "r+") == 0) {
fd = OS_OPEN(filename, O_RDWR, 0);
} else if (strcmp(mode, "w") == 0) {
fd = OS_OPEN(filename, O_WRONLY | O_TRUNC | O_CREAT, 0);
} else if (strcmp(mode, "w+") == 0) {
fd = OS_OPEN(filename, O_RDWR | O_TRUNC | O_CREAT, 0);
} else if (strcmp(mode, "a") == 0) {
fd = OS_OPEN(filename, O_WRONLY | O_APPEND | O_CREAT, 0);
} else if (strcmp(mode, "a+") == 0) {
fd = OS_OPEN(filename, O_RDWR | O_APPEND | O_CREAT, 0);
} else {
osi_Assert(FALSE); /* not implemented */
}
if (fd == INVALID_FD) {
return NULL;
}
return stream_fdopen(fd);
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:27,代码来源:ihandle.c
示例9: afs_NewDynrootVolume
/**
* Init a new dynroot volume.
* @param Volume FID.
* @return Volume or NULL if not found.
*/
static struct volume *
afs_NewDynrootVolume(struct VenusFid *fid)
{
struct cell *tcell;
struct volume *tv;
struct vldbentry *tve;
char *bp, tbuf[CVBS];
tcell = afs_GetCell(fid->Cell, READ_LOCK);
if (!tcell)
return NULL;
tve = afs_osi_Alloc(sizeof(*tve));
osi_Assert(tve != NULL);
if (!(tcell->states & CHasVolRef))
tcell->states |= CHasVolRef;
bp = afs_cv2string(&tbuf[CVBS], fid->Fid.Volume);
memset(tve, 0, sizeof(*tve));
strcpy(tve->name, "local-dynroot");
tve->volumeId[ROVOL] = fid->Fid.Volume;
tve->flags = VLF_ROEXISTS;
tv = afs_SetupVolume(0, bp, tve, tcell, 0, 0, 0);
afs_PutCell(tcell, READ_LOCK);
afs_osi_Free(tve, sizeof(*tve));
return tv;
}
开发者ID:gsell,项目名称:openafs-osd,代码行数:32,代码来源:afs_volume.c
示例10: DNew
int
DNew(struct dcache *adc, int page, struct DirBuffer *entry)
{
/* Same as read, only do *not* even try to read the page, since it
* probably doesn't exist. */
struct buffer *tb;
AFS_STATCNT(DNew);
ObtainWriteLock(&afs_bufferLock, 264);
if ((tb = afs_newslot(adc, page, NULL)) == 0) {
ReleaseWriteLock(&afs_bufferLock);
return EIO;
}
/* extend the chunk, if needed */
/* Do it now, not in DFlush or afs_newslot when the data is written out,
* since now our caller has adc->lock writelocked, and we can't acquire
* that lock (or even map from a fid to a dcache) in afs_newslot or
* DFlush due to lock hierarchy issues */
if ((page + 1) * AFS_BUFFER_PAGESIZE > adc->f.chunkBytes) {
afs_AdjustSize(adc, (page + 1) * AFS_BUFFER_PAGESIZE);
osi_Assert(afs_WriteDCache(adc, 1) == 0);
}
ObtainWriteLock(&tb->lock, 265);
tb->lockers++;
ReleaseWriteLock(&afs_bufferLock);
ReleaseWriteLock(&tb->lock);
entry->buffer = tb;
entry->data = tb->data;
return 0;
}
开发者ID:jisqyv,项目名称:openafs,代码行数:31,代码来源:afs_buffer.c
示例11: exporter_add
struct afs_exporter *
exporter_add(afs_int32 size, struct exporterops *ops, afs_int32 state,
afs_int32 type, char *data)
{
struct afs_exporter *ex, *op;
afs_int32 length;
AFS_STATCNT(exporter_add);
if (!init_xexported) {
init_xexported = 1;
LOCK_INIT(&afs_xexp, "afs_xexp");
}
length = (size ? size : sizeof(struct afs_exporter));
ex = afs_osi_Alloc(length);
osi_Assert(ex != NULL);
memset(ex, 0, length);
ObtainWriteLock(&afs_xexp, 308);
for (op = root_exported; op; op = op->exp_next) {
if (!op->exp_next)
break;
}
if (op)
op->exp_next = ex;
else
root_exported = ex;
ReleaseWriteLock(&afs_xexp);
ex->exp_next = 0;
ex->exp_op = ops;
ex->exp_states = state;
ex->exp_data = data;
ex->exp_type = type;
return ex;
}
开发者ID:adeason,项目名称:openafs,代码行数:33,代码来源:afs_exporter.c
示例12: streamHandleAllocateChunk
/* Allocate a chunk of stream handles */
void
streamHandleAllocateChunk(void)
{
int i;
StreamHandle_t *streamP;
osi_Assert(streamAvailHead == NULL);
streamP = (StreamHandle_t *)
malloc(STREAM_HANDLE_MALLOCSIZE * sizeof(StreamHandle_t));
osi_Assert(streamP != NULL);
for (i = 0; i < STREAM_HANDLE_MALLOCSIZE; i++) {
streamP[i].str_fd = INVALID_FD;
DLL_INSERT_TAIL(&streamP[i], streamAvailHead, streamAvailTail,
str_next, str_prev);
}
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:17,代码来源:ihandle.c
示例13: _ih_release_r
/* Release an Inode handle. All cached file descriptors for this
* inode are closed when the last reference to this handle is released
*/
static int
_ih_release_r(IHandle_t * ihP)
{
int ihash;
if (!ihP)
return 0;
osi_Assert(ihP->ih_refcnt > 0);
if (ihP->ih_refcnt > 1) {
ihP->ih_refcnt--;
return 0;
}
ihash = IH_HASH(ihP->ih_dev, ihP->ih_vid, ihP->ih_ino);
DLL_DELETE(ihP, ihashTable[ihash].ihash_head,
ihashTable[ihash].ihash_tail, ih_next, ih_prev);
ih_fdclose(ihP);
ihP->ih_refcnt--;
DLL_INSERT_TAIL(ihP, ihAvailHead, ihAvailTail, ih_next, ih_prev);
return 0;
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:30,代码来源:ihandle.c
示例14: vn_prolog
static int
vn_prolog(struct cmd_syndesc * as, struct fssync_state * state)
{
struct cmd_item *ti;
state->vop = (struct volop_state *) calloc(1, sizeof(struct volop_state));
osi_Assert(state->vop != NULL);
if ((ti = as->parms[CUSTOM_PARMS_OFFSET].items)) { /* -volumeid */
state->vop->volume = atoi(ti->data);
} else {
fprintf(stderr, "required argument -volumeid not given\n");
}
if ((ti = as->parms[CUSTOM_PARMS_OFFSET+1].items)) { /* -vnodeid */
state->vop->vnode = atoi(ti->data);
} else {
fprintf(stderr, "required argument -vnodeid not given\n");
}
if ((ti = as->parms[CUSTOM_PARMS_OFFSET+2].items)) { /* -unique */
state->vop->unique = atoi(ti->data);
} else {
state->vop->unique = 0;
}
if ((ti = as->parms[COMMON_VOLOP_PARMS_OFFSET+3].items)) { /* -partition */
strlcpy(state->vop->partName, ti->data, sizeof(state->vop->partName));
} else {
memset(state->vop->partName, 0, sizeof(state->vop->partName));
}
return 0;
}
开发者ID:jblaine,项目名称:openafs,代码行数:34,代码来源:fssync-debug.c
示例15: ih_reallyclose
/* Close all cached file descriptors for this inode. */
int
ih_reallyclose(IHandle_t * ihP)
{
if (!ihP)
return 0;
IH_LOCK;
ihP->ih_refcnt++; /* must not disappear over unlock */
if (ihP->ih_synced) {
FdHandle_t *fdP;
ihP->ih_synced = 0;
IH_UNLOCK;
fdP = IH_OPEN(ihP);
if (fdP) {
OS_SYNC(fdP->fd_fd);
FDH_CLOSE(fdP);
}
IH_LOCK;
}
osi_Assert(ihP->ih_refcnt > 0);
ih_fdclose(ihP);
if (ihP->ih_refcnt > 1)
ihP->ih_refcnt--;
else
_ih_release_r(ihP);
IH_UNLOCK;
return 0;
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:35,代码来源:ihandle.c
示例16: stream_close
/* Free a buffered I/O handle */
int
stream_close(StreamHandle_t * streamP, int reallyClose)
{
ssize_t rc;
int retval = 0;
osi_Assert(streamP != NULL);
if (streamP->str_direction == STREAM_DIRECTION_WRITE
&& streamP->str_bufoff > 0) {
rc = OS_PWRITE(streamP->str_fd, streamP->str_buffer,
streamP->str_bufoff, streamP->str_fdoff);
if (rc < 0) {
retval = -1;
} else {
streamP->str_fdoff += rc;
}
}
if (reallyClose) {
rc = OS_CLOSE(streamP->str_fd);
if (rc < 0) {
retval = -1;
}
}
streamP->str_fd = INVALID_FD;
IH_LOCK;
DLL_INSERT_TAIL(streamP, streamAvailHead, streamAvailTail,
str_next, str_prev);
IH_UNLOCK;
return retval;
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:32,代码来源:ihandle.c
示例17: VLockFileLock
/**
* lock a file on disk for the process.
*
* @param[in] lf the struct VLockFile representing the file to lock
* @param[in] offset the offset in the file to lock
* @param[in] locktype READ_LOCK or WRITE_LOCK
* @param[in] nonblock 0 to wait for conflicting locks to clear before
* obtaining the lock; 1 to fail immediately if a
* conflicting lock is held by someone else
*
* @return operation status
* @retval 0 success
* @retval EBUSY someone else is holding a conflicting lock and nonblock=1 was
* specified
* @retval EIO error acquiring file lock
*
* @note DAFS only
*
* @note do not try to lock/unlock the same offset in the same file from
* different threads; use VGetDiskLock to protect threads from each other in
* addition to other processes
*/
int
VLockFileLock(struct VLockFile *lf, afs_uint32 offset, int locktype, int nonblock)
{
int code;
osi_Assert(locktype == READ_LOCK || locktype == WRITE_LOCK);
MUTEX_ENTER(&lf->mutex);
if (lf->fd == INVALID_FD) {
lf->fd = _VOpenPath(lf->path);
if (lf->fd == INVALID_FD) {
MUTEX_EXIT(&lf->mutex);
return EIO;
}
}
lf->refcount++;
MUTEX_EXIT(&lf->mutex);
code = _VLockFd(lf->fd, offset, locktype, nonblock);
if (code) {
MUTEX_ENTER(&lf->mutex);
if (--lf->refcount < 1) {
_VCloseFd(lf->fd);
lf->fd = INVALID_FD;
}
MUTEX_EXIT(&lf->mutex);
}
return code;
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:56,代码来源:vutil.c
示例18: fd_close
/*
* Return a file descriptor handle to the cache
*/
int
fd_close(FdHandle_t * fdP)
{
IHandle_t *ihP;
if (!fdP)
return 0;
IH_LOCK;
osi_Assert(ih_Inited);
osi_Assert(fdInUseCount > 0);
osi_Assert(fdP->fd_status == FD_HANDLE_INUSE ||
fdP->fd_status == FD_HANDLE_CLOSING);
ihP = fdP->fd_ih;
/* Call fd_reallyclose to really close the unused file handles if
* the previous attempt to close (ih_reallyclose()) all file handles
* failed (this is determined by checking the ihandle for the flag
* IH_REALLY_CLOSED) or we have too many open files.
*/
if (fdP->fd_status == FD_HANDLE_CLOSING ||
ihP->ih_flags & IH_REALLY_CLOSED || fdInUseCount > fdCacheSize) {
IH_UNLOCK;
return fd_reallyclose(fdP);
}
fdP->fd_refcnt--;
if (fdP->fd_refcnt == 0) {
/* Put this descriptor back into the cache */
fdP->fd_status = FD_HANDLE_OPEN;
DLL_INSERT_TAIL(fdP, fdLruHead, fdLruTail, fd_next, fd_prev);
}
/* If this is not the only reference to the Inode then we can decrement
* the reference count, otherwise we need to call ih_release.
*/
if (ihP->ih_refcnt > 1)
ihP->ih_refcnt--;
else
_ih_release_r(ihP);
IH_UNLOCK;
return 0;
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:49,代码来源:ihandle.c
示例19: afs_UFSHandleLink
int
afs_UFSHandleLink(struct vcache *avc, struct vrequest *areq)
{
struct dcache *tdc;
char *tp, *rbuf;
void *tfile;
afs_size_t offset, len;
afs_int32 tlen, alen;
afs_int32 code;
/* two different formats, one for links protected 644, have a "." at the
* end of the file name, which we turn into a null. Others, protected
* 755, we add a null to the end of */
AFS_STATCNT(afs_UFSHandleLink);
if (!avc->linkData) {
tdc = afs_GetDCache(avc, (afs_size_t) 0, areq, &offset, &len, 0);
afs_Trace3(afs_iclSetp, CM_TRACE_UFSLINK, ICL_TYPE_POINTER, avc,
ICL_TYPE_POINTER, tdc, ICL_TYPE_OFFSET,
ICL_HANDLE_OFFSET(avc->f.m.Length));
if (!tdc) {
if (AFS_IS_DISCONNECTED)
return ENETDOWN;
else
return EIO;
}
/* otherwise we have the data loaded, go for it */
if (len > 1024) {
afs_PutDCache(tdc);
return EFAULT;
}
if (avc->f.m.Mode & 0111)
alen = len + 1; /* regular link */
else
alen = len; /* mt point */
rbuf = osi_AllocLargeSpace(AFS_LRALLOCSIZ);
tlen = len;
ObtainReadLock(&tdc->lock);
tfile = osi_UFSOpen(&tdc->f.inode);
code = afs_osi_Read(tfile, -1, rbuf, tlen);
osi_UFSClose(tfile);
ReleaseReadLock(&tdc->lock);
afs_PutDCache(tdc);
rbuf[alen - 1] = '\0';
alen = strlen(rbuf) + 1;
tp = afs_osi_Alloc(alen); /* make room for terminating null */
osi_Assert(tp != NULL);
memcpy(tp, rbuf, alen);
osi_FreeLargeSpace(rbuf);
if (code != tlen) {
afs_osi_Free(tp, alen);
return EIO;
}
avc->linkData = tp;
}
return 0;
}
开发者ID:marciobarbosa,项目名称:openafs,代码行数:56,代码来源:afs_vnop_symlink.c
示例20: fdHandleAllocateChunk
/* Allocate a chunk of file descriptor handles */
void
fdHandleAllocateChunk(void)
{
int i;
FdHandle_t *fdP;
osi_Assert(fdAvailHead == NULL);
fdP = malloc(FD_HANDLE_MALLOCSIZE * sizeof(FdHandle_t));
osi_Assert(fdP != NULL);
for (i = 0; i < FD_HANDLE_MALLOCSIZE; i++) {
fdP[i].fd_status = FD_HANDLE_AVAIL;
fdP[i].fd_refcnt = 0;
fdP[i].fd_ih = NULL;
fdP[i].fd_fd = INVALID_FD;
fdP[i].fd_ihnext = NULL;
fdP[i].fd_ihprev = NULL;
DLL_INSERT_TAIL(&fdP[i], fdAvailHead, fdAvailTail, fd_next, fd_prev);
}
}
开发者ID:sanchit-matta,项目名称:openafs,代码行数:20,代码来源:ihandle.c
注:本文中的osi_Assert函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论