本文整理汇总了C++中PR_Lock函数的典型用法代码示例。如果您正苦于以下问题:C++ PR_Lock函数的具体用法?C++ PR_Lock怎么用?C++ PR_Lock使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了PR_Lock函数的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的C++代码示例。
示例1: NS_ENSURE_ARG
NS_IMETHODIMP nsProtectedAuthThread::Login(nsIObserver *aObserver)
{
NS_ENSURE_ARG(aObserver);
if (!mMutex)
return NS_ERROR_FAILURE;
if (!mSlot)
// We need pointer to the slot
return NS_ERROR_FAILURE;
nsCOMPtr<nsIObserver> observerProxy;
nsresult rv = NS_GetProxyForObject(NS_PROXY_TO_MAIN_THREAD,
NS_GET_IID(nsIObserver),
aObserver,
NS_PROXY_SYNC | NS_PROXY_ALWAYS,
getter_AddRefs(observerProxy));
if (NS_FAILED(rv))
return rv;
PR_Lock(mMutex);
if (mIAmRunning || mLoginReady) {
PR_Unlock(mMutex);
return NS_OK;
}
observerProxy.swap(mStatusObserver);
mIAmRunning = PR_TRUE;
mThreadHandle = PR_CreateThread(PR_USER_THREAD, nsProtectedAuthThreadRunner, static_cast<void*>(this),
PR_PRIORITY_NORMAL, PR_LOCAL_THREAD, PR_JOINABLE_THREAD, 0);
// bool thread_started_ok = (threadHandle != nsnull);
// we might want to return "thread started ok" to caller in the future
NS_ASSERTION(mThreadHandle, "Could not create nsProtectedAuthThreadRunner thread\n");
PR_Unlock(mMutex);
return NS_OK;
}
开发者ID:binoc-software,项目名称:mozilla-cvs,代码行数:41,代码来源:nsProtectedAuthThread.cpp
示例2: pagedresults_reset_processing
/*
* mark the connection as being done with pagedresults
* processing - returns True if it was processing,
* False otherwise
*/
int
pagedresults_reset_processing(Connection *conn, int index)
{
int ret = 0;
LDAPDebug1Arg(LDAP_DEBUG_TRACE,
"--> pagedresults_reset_processing: idx=%d\n", index);
if (conn && (index > -1)) {
PR_Lock(conn->c_mutex);
if (index < conn->c_pagedresults.prl_maxlen) {
ret = (conn->c_pagedresults.prl_list[index].pr_flags &
CONN_FLAG_PAGEDRESULTS_PROCESSING);
/* if ret is false, the following doesn't do anything */
conn->c_pagedresults.prl_list[index].pr_flags &=
~CONN_FLAG_PAGEDRESULTS_PROCESSING;
}
PR_Unlock(conn->c_mutex);
}
LDAPDebug1Arg(LDAP_DEBUG_TRACE,
"<-- pagedresults_reset_processing: %d\n", ret);
return ret;
}
开发者ID:leto,项目名称:389-ds,代码行数:26,代码来源:pagedresults.c
示例3: pagedresults_set_search_result_set_size_estimate
int
pagedresults_set_search_result_set_size_estimate(Connection *conn,
int count, int index)
{
int rc = -1;
LDAPDebug1Arg(LDAP_DEBUG_TRACE,
"--> pagedresults_set_search_result_set_size_estimate: "
"idx=%d\n", index);
if (conn && (index > -1)) {
PR_Lock(conn->c_mutex);
if (index < conn->c_pagedresults.prl_maxlen) {
conn->c_pagedresults.prl_list[index].pr_search_result_set_size_estimate = count;
}
PR_Unlock(conn->c_mutex);
rc = 0;
}
LDAPDebug1Arg(LDAP_DEBUG_TRACE,
"<-- pagedresults_set_search_result_set_size_estimate: %d\n",
rc);
return rc;
}
开发者ID:leto,项目名称:389-ds,代码行数:21,代码来源:pagedresults.c
示例4: at_getCountMinMax
/* fetches the current min/max times and the search count, and clears them */
void at_getCountMinMax(AddThread *at, PRUint32 *count, PRUint32 *min,
PRUint32 *max, PRUint32 *total)
{
PR_Lock(at->lock);
if (count) {
*count = at->addCount;
at->addCount = 0;
}
if (min) {
*min = at->mintime;
at->mintime = 10000;
}
if (max) {
*max = at->maxtime;
at->maxtime = 0;
}
if (total)
*total = at->addTotal;
at->alive--;
PR_Unlock(at->lock);
}
开发者ID:Firstyear,项目名称:ds,代码行数:22,代码来源:addthread.c
示例5: slapi_eq_get_arg
/*
* return arg (ec_arg) only if the context is in the event queue
*/
void *
slapi_eq_get_arg ( Slapi_Eq_Context ctx )
{
slapi_eq_context **p;
PR_ASSERT(eq_initialized);
if (!eq_stopped) {
PR_Lock(eq->eq_lock);
p = &(eq->eq_queue);
while (p && *p != NULL) {
if ((*p)->ec_id == ctx) {
PR_Unlock(eq->eq_lock);
return (*p)->ec_arg;
} else {
p = &((*p)->ec_next);
}
}
PR_Unlock(eq->eq_lock);
}
return NULL;
}
开发者ID:leto,项目名称:389-ds,代码行数:24,代码来源:eventq.c
示例6: objset_first_obj
/*
* Prepare for iteration across an object set. Returns the first
* object in the set. The returned object is referenced, therefore
* the caller must either release the object, or
* pass it to an objset_next_obj call, which will
* implicitly release the object.
* Returns the first object, or NULL if the objset contains no
* objects.
*/
Object *
objset_first_obj(Objset *set)
{
Object *return_object;
/* Be tolerant (for the replication plugin) */
if (set == NULL) return NULL;
PR_Lock(set->lock);
if (NULL == set->head)
{
return_object = NULL;
}
else
{
object_acquire(set->head->obj);
return_object = set->head->obj;
}
PR_Unlock(set->lock);
return return_object;
}
开发者ID:Firstyear,项目名称:ds,代码行数:30,代码来源:objset.c
示例7: MOZ_ASSERT
/* static */ bool
DiscardTracker::TryAllocation(uint64_t aBytes)
{
MOZ_ASSERT(sInitialized);
PR_Lock(sAllocationLock);
bool enoughSpace =
!gfxPrefs::ImageMemHardLimitDecodedImageKB() ||
(gfxPrefs::ImageMemHardLimitDecodedImageKB() * 1024) - sCurrentDecodedImageBytes >= aBytes;
if (enoughSpace) {
sCurrentDecodedImageBytes += aBytes;
}
PR_Unlock(sAllocationLock);
// If we're using too much memory for decoded images, MaybeDiscardSoon will
// enqueue a callback to discard some images.
MaybeDiscardSoon();
return enoughSpace;
}
开发者ID:Andrel322,项目名称:gecko-dev,代码行数:21,代码来源:DiscardTracker.cpp
示例8: ldbm_back_rmdb
int
ldbm_back_rmdb( Slapi_PBlock *pb )
{
struct ldbminfo *li = NULL;
/* char *directory = NULL;*/
int return_value = -1;
Slapi_Backend *be;
slapi_pblock_get( pb, SLAPI_BACKEND, &be );
if (be->be_state != BE_STATE_STOPPED)
{
LDAPDebug( LDAP_DEBUG_TRACE,
"ldbm_back_cleanup: warning - backend is in a wrong state - %d\n",
be->be_state, 0, 0 );
return 0;
}
PR_Lock (be->be_state_lock);
if (be->be_state != BE_STATE_STOPPED)
{
LDAPDebug( LDAP_DEBUG_TRACE,
"ldbm_back_cleanup: warning - backend is in a wrong state - %d\n",
be->be_state, 0, 0 );
PR_Unlock (be->be_state_lock);
return 0;
}
slapi_pblock_get( pb, SLAPI_PLUGIN_PRIVATE, &li );
/* slapi_pblock_get( pb, SLAPI_SEQ_VAL, &directory );*/
return_value = dblayer_delete_database( li );
if (return_value == 0)
be->be_state = BE_STATE_DELETED;
PR_Unlock (be->be_state_lock);
return return_value;
}
开发者ID:leto,项目名称:389-ds,代码行数:40,代码来源:rmdb.c
示例9: mempool_get
/*
* get memory from memory pool
* The current code (#else) uses the memory pool stored in the
* per-thread-private data.
*/
void *
mempool_get(int type)
{
struct mempool_object *object = NULL;
struct mempool *my_mempool;
PR_ASSERT(type >= 0 && type < MEMPOOL_END);
if (!config_get_mempool_switch()) {
return NULL; /* memory pool: off */
}
#ifdef SHARED_MEMPOOL
if (NULL == mempool[type].mempool_mutex) {
/* mutex is NULL; this mempool is not enabled */
return NULL;
}
PR_Lock(mempool[type].mempool_mutex);
object = mempool[type].mempool_head;
if (NULL != object) {
mempool[type].mempool_head = object->mempool_next;
mempool[type].mempool_count--;
object->mempool_next = NULL;
}
PR_Unlock(mempool[type].mempool_mutex);
#else
my_mempool = (struct mempool *)PR_GetThreadPrivate(mempool_index);
if (NULL == my_mempool || my_mempool[0].mempool_name != mempool_names[0]) { /* mempool is not initialized */
return NULL;
}
object = my_mempool[type].mempool_head;
if (NULL != object) {
my_mempool[type].mempool_head = object->mempool_next;
my_mempool[type].mempool_count--;
object->mempool_next = NULL;
PR_SetThreadPrivate (mempool_index, (void *)my_mempool);
}
#endif
return object;
}
开发者ID:Firstyear,项目名称:ds,代码行数:45,代码来源:mempool.c
示例10: ConditionNotify
static PRIntervalTime ConditionNotify(PRUint32 loops)
{
PRThread *thread;
NotifyData notifyData;
PRIntervalTime timein, overhead;
timein = PR_IntervalNow();
notifyData.counter = loops;
notifyData.ml = PR_NewLock();
notifyData.child = PR_NewCondVar(notifyData.ml);
notifyData.parent = PR_NewCondVar(notifyData.ml);
thread = PR_CreateThread(
PR_USER_THREAD, Notifier, ¬ifyData,
PR_GetThreadPriority(PR_GetCurrentThread()),
thread_scope, PR_JOINABLE_THREAD, 0);
overhead = PR_IntervalNow() - timein; /* elapsed so far */
PR_Lock(notifyData.ml);
while (notifyData.counter > 0)
{
notifyData.pending = PR_TRUE;
PR_NotifyCondVar(notifyData.child);
while (notifyData.pending)
PR_WaitCondVar(notifyData.parent, PR_INTERVAL_NO_TIMEOUT);
}
PR_Unlock(notifyData.ml);
timein = PR_IntervalNow();
(void)PR_JoinThread(thread);
PR_DestroyCondVar(notifyData.child);
PR_DestroyCondVar(notifyData.parent);
PR_DestroyLock(notifyData.ml);
overhead += (PR_IntervalNow() - timein); /* more overhead */
return overhead;
} /* ConditionNotify */
开发者ID:AbrahamJewowich,项目名称:FreeSWITCH,代码行数:40,代码来源:alarm.c
示例11: IPC_Disconnect
nsresult
IPC_Disconnect()
{
// Must disconnect on same thread used to connect!
PR_ASSERT(gMainThread == PR_GetCurrentThread());
if (!gConnState || !gConnThread)
return NS_ERROR_NOT_INITIALIZED;
PR_Lock(gConnState->lock);
gConnState->shutdown = PR_TRUE;
PR_SetPollableEvent(gConnState->fds[POLL].fd);
PR_Unlock(gConnState->lock);
PR_JoinThread(gConnThread);
ConnDestroy(gConnState);
gConnState = NULL;
gConnThread = NULL;
return NS_OK;
}
开发者ID:miguelinux,项目名称:vbox,代码行数:22,代码来源:ipcConnectionUnix.cpp
示例12: PR_IMPLEMENT
/*
** Wait on a Semaphore.
**
** This routine allows a calling thread to wait or proceed depending upon the
** state of the semahore sem. The thread can proceed only if the counter value
** of the semaphore sem is currently greater than 0. If the value of semaphore
** sem is positive, it is decremented by one and the routine returns immediately
** allowing the calling thread to continue. If the value of semaphore sem is 0,
** the calling thread blocks awaiting the semaphore to be released by another
** thread.
**
** This routine can return PR_PENDING_INTERRUPT if the waiting thread
** has been interrupted.
*/
PR_IMPLEMENT(PRStatus) PR_WaitSem(PRSemaphore *sem)
{
PRStatus status = PR_SUCCESS;
#ifdef HAVE_CVAR_BUILT_ON_SEM
return _PR_MD_WAIT_SEM(&sem->md);
#else
PR_Lock(sem->cvar->lock);
while (sem->count == 0) {
sem->waiters++;
status = PR_WaitCondVar(sem->cvar, PR_INTERVAL_NO_TIMEOUT);
sem->waiters--;
if (status != PR_SUCCESS)
break;
}
if (status == PR_SUCCESS)
sem->count--;
PR_Unlock(sem->cvar->lock);
#endif
return (status);
}
开发者ID:Akesure,项目名称:jxcore,代码行数:36,代码来源:prsem.c
示例13: CancelTimer
static PRBool CancelTimer(TimerEvent *timer)
{
PRBool canceled = PR_FALSE;
PR_Lock(tm_vars.ml);
timer->ref_count -= 1;
if (timer->links.prev == &timer->links)
{
while (timer->ref_count == 1)
{
PR_WaitCondVar(tm_vars.cancel_timer, PR_INTERVAL_NO_TIMEOUT);
}
}
else
{
PR_REMOVE_LINK(&timer->links);
canceled = PR_TRUE;
}
PR_Unlock(tm_vars.ml);
PR_DELETE(timer);
return canceled;
}
开发者ID:venkatarajasekhar,项目名称:Qt,代码行数:22,代码来源:prmwait.c
示例14: eq_enqueue
/*
* Add a new event to the event queue.
*/
static void
eq_enqueue(slapi_eq_context *newec)
{
slapi_eq_context **p;
PR_ASSERT(NULL != newec);
PR_Lock(eq->eq_lock);
/* Insert <newec> in order (sorted by start time) in the list */
for (p = &(eq->eq_queue); *p != NULL; p = &((*p)->ec_next)) {
if ((*p)->ec_when > newec->ec_when) {
break;
}
}
if (NULL != *p) {
newec->ec_next = *p;
} else {
newec->ec_next = NULL;
}
*p = newec;
PR_NotifyCondVar(eq->eq_cv); /* wake up scheduler thread */
PR_Unlock(eq->eq_lock);
}
开发者ID:leto,项目名称:389-ds,代码行数:25,代码来源:eventq.c
示例15: _PR_FreeStack
/*
** Free the stack for the current thread
*/
void _PR_FreeStack(PRThreadStack *ts)
{
if (!ts) {
return;
}
if (ts->flags & _PR_STACK_PRIMORDIAL) {
PR_DELETE(ts);
return;
}
/*
** Put the stack on the free list. This is done because we are still
** using the stack. Next time a thread is created we will trim the
** list down; it's safe to do it then because we will have had to
** context switch to a live stack before another thread can be
** created.
*/
PR_Lock(_pr_stackLock);
PR_APPEND_LINK(&ts->links, _pr_freeStacks.prev);
_pr_numFreeStacks++;
PR_Unlock(_pr_stackLock);
}
开发者ID:venkatarajasekhar,项目名称:Qt,代码行数:25,代码来源:prustack.c
示例16: NS_PRECONDITION
nsrefcnt
nsLDAPConnection::Release(void)
{
nsrefcnt count;
NS_PRECONDITION(0 != mRefCnt, "dup release");
count = PR_AtomicDecrement((PRInt32 *)&mRefCnt);
NS_LOG_RELEASE(this, count, "nsLDAPConnection");
if (0 == count) {
// As commented by danm: In the object's destructor, if by some
// convoluted, indirect means it happens to run into some code
// that temporarily references it (addref/release), then if the
// refcount had been left at 0 the unexpected release would
// attempt to reenter the object's destructor.
//
mRefCnt = 1; /* stabilize */
// If we have a mRunnable object, we need to make sure to lock it's
// mLock before we try to DELETE. This is to avoid a race condition.
// We also make sure to keep a strong reference to the runnable
// object, to make sure it doesn't get GCed from underneath us,
// while we are still holding a lock for instance.
//
if (mRunnable && mRunnable->mLock) {
nsLDAPConnectionLoop *runnable = mRunnable;
NS_ADDREF(runnable);
PR_Lock(runnable->mLock);
NS_DELETEXPCOM(this);
PR_Unlock(runnable->mLock);
NS_RELEASE(runnable);
} else {
NS_DELETEXPCOM(this);
}
return 0;
}
return count;
}
开发者ID:psunkari,项目名称:spicebird,代码行数:39,代码来源:nsLDAPConnection.cpp
示例17: Alarms1
static PRIntervalTime Alarms1(PRUint32 loops)
{
PRAlarm *alarm;
AlarmData ad;
PRIntervalTime overhead, timein = PR_IntervalNow();
PRIntervalTime duration = PR_SecondsToInterval(3);
PRLock *ml = PR_NewLock();
PRCondVar *cv = PR_NewCondVar(ml);
ad.ml = ml;
ad.cv = cv;
ad.rate = 1;
ad.times = loops;
ad.late = ad.times = 0;
ad.duration = duration;
ad.timein = PR_IntervalNow();
ad.period = PR_SecondsToInterval(1);
alarm = PR_CreateAlarm();
(void)PR_SetAlarm(
alarm, ad.period, ad.rate, AlarmFn1, &ad);
overhead = PR_IntervalNow() - timein;
PR_Lock(ml);
while ((PRIntervalTime)(PR_IntervalNow() - ad.timein) < duration)
PR_WaitCondVar(cv, PR_INTERVAL_NO_TIMEOUT);
PR_Unlock(ml);
timein = PR_IntervalNow();
(void)PR_DestroyAlarm(alarm);
PR_DestroyCondVar(cv);
PR_DestroyLock(ml);
overhead += (PR_IntervalNow() - timein);
return duration + overhead;
} /* Alarms1 */
开发者ID:AbrahamJewowich,项目名称:FreeSWITCH,代码行数:39,代码来源:alarm.c
示例18: slapi_be_stopping
void
slapi_be_stopping (Slapi_Backend *be)
{
int i;
PR_Lock (be->be_state_lock);
for (i=0; ((i<maxbackends) && backends[i] != be); i++)
;
PR_ASSERT(i<maxbackends);
backends[i] = NULL;
be->be_state = BE_STATE_DELETED;
if (be->be_lock != NULL)
{
slapi_destroy_rwlock(be->be_lock);
be->be_lock = NULL;
}
nbackends--;
PR_Unlock (be->be_state_lock);
}
开发者ID:Firstyear,项目名称:ds,代码行数:22,代码来源:backend_manager.c
示例19: _PR_Putfd
/*
** Return a file descriptor to the cache unless there are too many in
** there already. If put in cache, clear the fields first.
*/
void _PR_Putfd(PRFileDesc *fd)
{
PR_ASSERT(PR_NSPR_IO_LAYER == fd->identity);
fd->methods = &_pr_faulty_methods;
fd->identity = PR_INVALID_IO_LAYER;
fd->secret->state = _PR_FILEDESC_FREED;
if (0 == _pr_fd_cache.limit_high)
{
PR_StackPush(_pr_fd_cache.stack, (PRStackElem*)(&fd->higher));
}
else
{
if (_pr_fd_cache.count > _pr_fd_cache.limit_high)
{
PR_Free(fd->secret);
PR_Free(fd);
}
else
{
PR_Lock(_pr_fd_cache.ml);
if (NULL == _pr_fd_cache.tail)
{
PR_ASSERT(0 == _pr_fd_cache.count);
PR_ASSERT(NULL == _pr_fd_cache.head);
_pr_fd_cache.head = _pr_fd_cache.tail = fd;
}
else
{
PR_ASSERT(NULL == _pr_fd_cache.tail->higher);
_pr_fd_cache.tail->higher = fd;
_pr_fd_cache.tail = fd; /* new value */
}
fd->higher = NULL; /* always so */
_pr_fd_cache.count += 1; /* count the new entry */
PR_Unlock(_pr_fd_cache.ml);
}
}
} /* _PR_Putfd */
开发者ID:Akesure,项目名称:jxcore,代码行数:43,代码来源:prfdcach.c
示例20: is_anyinstance_busy
int
is_anyinstance_busy(struct ldbminfo *li)
{
ldbm_instance *inst;
Object *inst_obj;
int rval = 0;
/* server is up -- mark all backends busy */
for (inst_obj = objset_first_obj(li->li_instance_set); inst_obj;
inst_obj = objset_next_obj(li->li_instance_set, inst_obj)) {
inst = (ldbm_instance *)object_get_data(inst_obj);
PR_Lock(inst->inst_config_mutex);
rval = inst->inst_flags & INST_FLAG_BUSY;
PR_Unlock(inst->inst_config_mutex);
if (0 != rval) {
break;
}
}
if (inst_obj)
object_release(inst_obj);
return rval;
}
开发者ID:leto,项目名称:389-ds,代码行数:22,代码来源:misc.c
注:本文中的PR_Lock函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论