Hi,

all that follows is related to WebKit branch 536.26.

After using JSCore library in a multi-threaded environment, we get an ASSERT 
(see traceback at the end of the mail).

Since the different comments in JSCore and WTF are difficult to interpret, I'd 
like to have opinions regarding the following questions:

-can a JSCore context be (sequentially) used in several threads (I think the 
answer is yes) ?

-why should the m_owningThread be the one that destroys the JSContext (checked 
in ThreadRestrictionVerifier) -> the last thread that owns the JSContext should 
be the more appropriate? In other words, why should the 
construction/destruction of JSContexts be done by the same thread? By the way, 
the m_owningThread  is set to the second thread that uses the JSContext (not 
the first one) -> is this done at will?

-regarding our problem which is related to a DateInstance: would a 
turnOffVerification for this specific be a pertinent way of avoiding the ASSERT


thanks for your answers
BR
GH


ntdll.dll!77b015de()
  [Frames below may be incorrect and/or missing, no symbols loaded for 
ntdll.dll]
  ntdll.dll!77b015de()
  ntdll.dll!77af014e()
  msvcr90d.dll!_free_dbg(void * pUserData=0x00000000, int nBlockUse=0x00000001) 
 Line 1260 + 0xc bytes C++
  msvcr90d.dll!free(void * pUserData=0x59210d82)  Line 49 + 0xb bytes C++
  JavaScriptCore_Debug.dll!WTFPrintBacktrace(void * * stack=0x0000001f, int 
size=0x00000004)  Line 334 + 0xc bytes C++
  JavaScriptCore_Debug.dll!WTFReportBacktrace()  Line 297 + 0xf bytes C++
  JavaScriptCore_Debug.dll!WTF::RefCountedBase::derefBase()  Line 129 + 0x38 
bytes C++
  JavaScriptCore_Debug.dll!WTF::RefCounted<JSC::DateInstanceData>::deref()  
Line 189 + 0x8 bytes C++
  
JavaScriptCore_Debug.dll!WTF::derefIfNotNull<JSC::DateInstanceData>(JSC::DateInstanceData
 * ptr=0xffe28f30)  Line 53 C++
  
JavaScriptCore_Debug.dll!WTF::RefPtr<JSC::DateInstanceData>::~RefPtr<JSC::DateInstanceData>()
  Line 56 + 0x19 bytes C++
  JavaScriptCore_Debug.dll!JSC::DateInstance::~DateInstance()  + 0x46 bytes C++
> JavaScriptCore_Debug.dll!JSC::DateInstance::destroy(JSC::JSCell * 
> cell=0x11f7d380)  Line 59 C++
  JavaScriptCore_Debug.dll!JSC::MarkedBlock::callDestructor(JSC::JSCell * 
cell=0x11f7d380)  Line 74 + 0x12 bytes C++
  JavaScriptCore_Debug.dll!JSC::MarkedBlock::specializedSweep<3,1,1>()  Line 
101 C++
  
JavaScriptCore_Debug.dll!JSC::MarkedBlock::sweepHelper<1>(JSC::MarkedBlock::SweepMode
 sweepMode=SweepToFreeList)  Line 142 + 0x12 bytes C++
  JavaScriptCore_Debug.dll!JSC::MarkedBlock::sweep(JSC::MarkedBlock::SweepMode 
sweepMode=SweepToFreeList)  Line 121 + 0x10 bytes C++
  JavaScriptCore_Debug.dll!JSC::MarkedAllocator::tryAllocateHelper()  Line 33 + 
0x10 bytes C++
  JavaScriptCore_Debug.dll!JSC::MarkedAllocator::tryAllocate()  Line 52 + 0x8 
bytes C++
  JavaScriptCore_Debug.dll!JSC::MarkedAllocator::allocateSlowCase()  Line 68 + 
0x8 bytes C++
  JavaScriptCore_Debug.dll!JSC::MarkedAllocator::allocate()  Line 77 + 0x8 
bytes C++
  JavaScriptCore_Debug.dll!JSC::MarkedSpace::allocateWithDestructor(unsigned 
int bytes=0x00000040)  Line 160 C++
  JavaScriptCore_Debug.dll!JSC::Heap::allocateWithDestructor(unsigned int 
bytes=0x00000040)  Line 355 C++
  JavaScriptCore_Debug.dll!JSC::allocateCell<JSC::JSFinalObject>(JSC::Heap & 
heap={...})  Line 336 + 0xa bytes C++
  JavaScriptCore_Debug.dll!JSC::JSFinalObject::create(JSC::ExecState * 
exec=0x144e0318, JSC::Structure * structure=0x11eef420)  Line 395 + 0xe bytes 
C++
  JavaScriptCore_Debug.dll!JSC::constructEmptyObject(JSC::ExecState * 
exec=0x144e0318, JSC::Structure * structure=0x11eef420)  Line 466 + 0xd bytes 
C++
  JavaScriptCore_Debug.dll!JSC::constructEmptyObject(JSC::ExecState * 
exec=0x144e0318, JSC::JSGlobalObject * globalObject=0x11f0fc40)  Line 431 + 
0x12 bytes C++
  JavaScriptCore_Debug.dll!JSC::constructEmptyObject(JSC::ExecState * 
exec=0x144e0318)  Line 436 + 0x12 bytes C++
  JavaScriptCore_Debug.dll!cti_op_new_object(void * * args=0x11a9f580)  Line 
1382 + 0xc bytes C++
  
JavaScriptCore_Debug.dll!@cti_op_create_this@4<mailto:JavaScriptCore_Debug.dll!@cti_op_create_this@4>()
  + 0x20f bytes C++
  JavaScriptCore_Debug.dll!JSC::JITCode::execute(JSC::RegisterFile * 
registerFile=0xffda2bdc, JSC::ExecState * callFrame=0x144e0048, 
JSC::JSGlobalData * globalData=0xffd9b400)  Line 127 + 0x2d bytes C++
  JavaScriptCore_Debug.dll!JSC::Interpreter::executeCall(JSC::ExecState * 
callFrame=0x11f0fcb8, JSC::JSObject * function=0x11f7d600, JSC::CallType 
callType=CallTypeJS, const JSC::CallData & callData={...}, JSC::JSValue 
thisValue={...}, const JSC::ArgList & args={...})  Line 1342 + 0x2a bytes C++
  JavaScriptCore_Debug.dll!JSC::call(JSC::ExecState * exec=0x11f0fcb8, 
JSC::JSValue functionObject={...}, JSC::CallType callType=CallTypeJS, const 
JSC::CallData & callData={...}, JSC::JSValue thisValue={...}, const 
JSC::ArgList & args={...})  Line 67 + 0x3c bytes C++
  JavaScriptCore_Debug.dll!JSObjectCallAsFunction(const OpaqueJSContext * 
ctx=0x11f0fcb8, OpaqueJSValue * object=0x11f7d600, OpaqueJSValue * 
thisObject=0x11f0fc40, unsigned int argumentCount=0x00000002, const 
OpaqueJSValue * const * arguments=0x0f615ce8, const OpaqueJSValue * * 
exception=0x11a9f904)  Line 497 + 0x5c bytes C++
  4DJavaScriptDebug.dll!xbox::VJSObject::CallFunction(const xbox::VJSObject & 
inFunctionObject={...}, const 
std::vector<xbox::VJSValue,std::allocator<xbox::VJSValue> > * 
inValues=[0x00000002]({fContext=0x11f0fcb8 fValue=0x11f71c40 
},{fContext=0x11f0fcb8 fValue=0x11f71c00 }), xbox::VJSValue * 
outResult=0x11a9facc, const OpaqueJSValue * * outException=0x11a9f9cc, const 
xbox::VFilePath * inFullPath=0x00000000)  Line 470 + 0x30 bytes C++
  4DJavaScriptDebug.dll!xbox::VJSObject::CallMemberFunction(const xbox::VString 
& inFunctionName={...}, const 
std::vector<xbox::VJSValue,std::allocator<xbox::VJSValue> > * 
inValues=[0x00000002]({fContext=0x11f0fcb8 fValue=0x11f71c40 
},{fContext=0x11f0fcb8 fValue=0x11f71c00 }), xbox::VJSValue * 
outResult=0x11a9facc, const OpaqueJSValue * * outException=0x11a9f9cc, const 
xbox::VFilePath * inFullPath=0x00000000)  Line 203 + 0x40 bytes C++
  Wakanda Server.exe!VRIAJSCallbackGlobalFunction::Call(xbox::VJSContext & 
inContext={...}, const 
std::vector<xbox::VJSValue,std::allocator<xbox::VJSValue> > * 
inParameters=[0x00000002]({fContext=0x11f0fcb8 fValue=0x11f71c40 
},{fContext=0x11f0fcb8 fValue=0x11f71c00 }), xbox::VJSValue * 
outResult=0x11a9facc)  Line 1236 + 0x1e bytes C++
  Wakanda Server.exe!VJSRequestHandler::HandleRequest(IHTTPResponse * 
inResponse=0x0f4ac724)  Line 116 + 0x28 bytes C++
  ...

[cid:349732.png@300480f7.4e80577a]
Guy Hermann
Développeur Senior
Email : guy.herm...@4d.com<mailto:guy.herm...@4d.com>
Web :   www.4D.com<http://www.4D.com>

4D SAS
60, rue d'Alsace
92110 Clichy -
Standard :      +33 1 40 87 92 00




<<inline: 349732.png>>

_______________________________________________
webkit-help mailing list
webkit-help@lists.webkit.org
http://lists.webkit.org/mailman/listinfo/webkit-help

Reply via email to