[webkit-help] JSCore and multi-threading

Guy Hermann guy.hermann at 4d.com
Wed Nov 14 02:13:33 PST 2012


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 at 4<mailto:JavaScriptCore_Debug.dll!@cti_op_create_this at 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 at 300480f7.4e80577a]
Guy Hermann
Développeur Senior
Email : guy.hermann at 4d.com<mailto:guy.hermann at 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




-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-help/attachments/20121114/5869edd9/attachment-0001.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 349732.png
Type: image/png
Size: 4628 bytes
Desc: 349732.png
URL: <http://lists.webkit.org/pipermail/webkit-help/attachments/20121114/5869edd9/attachment-0001.png>


More information about the webkit-help mailing list