本文整理汇总了C++中XPCJSContextStack::Pop方法的典型用法代码示例。如果您正苦于以下问题:C++ XPCJSContextStack::Pop方法的具体用法?C++ XPCJSContextStack::Pop怎么用?C++ XPCJSContextStack::Pop使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类XPCJSContextStack
的用法示例。
在下文中一共展示了XPCJSContextStack::Pop方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: printf
XPCCallContext::~XPCCallContext()
{
// do cleanup...
bool shouldReleaseXPC = false;
if (mXPCContext) {
mXPCContext->SetCallingLangType(mPrevCallerLanguage);
#ifdef DEBUG
XPCCallContext* old = mThreadData->SetCallContext(mPrevCallContext);
NS_ASSERTION(old == this, "bad pop from per thread data");
#else
(void) mThreadData->SetCallContext(mPrevCallContext);
#endif
shouldReleaseXPC = mPrevCallContext == nsnull;
}
// NB: Needs to happen before the context stack pop.
if (mJSContext && mCallerLanguage == NATIVE_CALLER)
JS_EndRequest(mJSContext);
if (mContextPopRequired) {
XPCJSContextStack* stack = mThreadData->GetJSContextStack();
NS_ASSERTION(stack, "bad!");
if (stack) {
#ifdef DEBUG
JSContext* poppedCX;
nsresult rv = stack->Pop(&poppedCX);
NS_ASSERTION(NS_SUCCEEDED(rv) && poppedCX == mJSContext, "bad pop");
#else
(void) stack->Pop(nsnull);
#endif
}
}
if (mJSContext) {
if (mDestroyJSContextInDestructor) {
#ifdef DEBUG_xpc_hacker
printf("!xpc - doing deferred destruction of JSContext @ %p\n",
mJSContext);
#endif
NS_ASSERTION(!mThreadData->GetJSContextStack() ||
!mThreadData->GetJSContextStack()->
DEBUG_StackHasJSContext(mJSContext),
"JSContext still in threadjscontextstack!");
JS_DestroyContext(mJSContext);
}
}
#ifdef DEBUG
for (PRUint32 i = 0; i < XPCCCX_STRING_CACHE_SIZE; ++i) {
NS_ASSERTION(!mScratchStrings[i].mInUse, "Uh, string wrapper still in use!");
}
#endif
if (shouldReleaseXPC && mXPC)
NS_RELEASE(mXPC);
}
示例2: printf
XPCCallContext::~XPCCallContext()
{
// do cleanup...
PRBool shouldReleaseXPC = PR_FALSE;
if(mXPCContext)
{
mXPCContext->SetCallingLangType(mPrevCallerLanguage);
#ifdef DEBUG
XPCCallContext* old = mThreadData->SetCallContext(mPrevCallContext);
NS_ASSERTION(old == this, "bad pop from per thread data");
#else
(void) mThreadData->SetCallContext(mPrevCallContext);
#endif
shouldReleaseXPC = mPrevCallContext == nsnull;
}
if(mContextPopRequired)
{
XPCJSContextStack* stack = mThreadData->GetJSContextStack();
NS_ASSERTION(stack, "bad!");
if(stack)
{
#ifdef DEBUG
JSContext* poppedCX;
nsresult rv = stack->Pop(&poppedCX);
NS_ASSERTION(NS_SUCCEEDED(rv) && poppedCX == mJSContext, "bad pop");
#else
(void) stack->Pop(nsnull);
#endif
}
}
if(mJSContext)
{
if(mCallerLanguage == NATIVE_CALLER)
JS_EndRequest(mJSContext);
if(mDestroyJSContextInDestructor)
{
#ifdef DEBUG_xpc_hacker
printf("!xpc - doing deferred destruction of JSContext @ %0x\n",
mJSContext);
#endif
NS_ASSERTION(!mThreadData->GetJSContextStack() ||
!mThreadData->GetJSContextStack()->
DEBUG_StackHasJSContext(mJSContext),
"JSContext still in threadjscontextstack!");
JS_DestroyContext(mJSContext);
}
else
{
// Don't clear newborns if JS frames (compilation or execution)
// are active! Doing so violates ancient invariants in the JS
// engine, and it's not necessary to fix JS component leaks.
if(!JS_IsRunning(mJSContext))
JS_ClearNewbornRoots(mJSContext);
}
}
#ifdef DEBUG
{
StringWrapperEntry *se =
reinterpret_cast<StringWrapperEntry*>(&mStringWrapperData);
PRUint32 i;
for(i = 0; i < XPCCCX_STRING_CACHE_SIZE; ++i)
{
NS_ASSERTION(!se[i].mInUse, "Uh, string wrapper still in use!");
}
}
#endif
if(shouldReleaseXPC && mXPC)
NS_RELEASE(mXPC);
}