> On Jul 8, 2016, at 12:15 PM, Alex Christensen <[email protected]> wrote: > > Please file a bug at bugs.webkit.org <http://bugs.webkit.org/>, uploading a > suggested patch with a test case, and cc fpizlo. We can discuss it in > bugzilla instead of this mailing list.
Additionally, it is unlikely that contributors will feel obligated to help resolve a bug in a branch from outside the project made 11 months ago [1]. We develop WebKit on trunk. Thanks, ~Brady [1] - https://trac.webkit.org/changeset/188436 <https://trac.webkit.org/changeset/188436> - 08/13/15 21:53:20 (11 months ago) >> On Jul 8, 2016, at 11:53 AM, Vienneau, Christopher <[email protected] >> <mailto:[email protected]>> wrote: >> >> Hello, >> >> I’ve recently noticed that our version of WebKit based off of 188436 asserts >> when running the scenario below, but our older version based off of 157437 >> does not. After doing some investigation I found that the implementation of >> JSLock changed significantly between the two versions. The tip of trunk >> version is pretty much what we have in 188436 as well; the code for >> currentThreadIsHoldingLock() I find questionable. Please feel free to >> suggest how we might improperly be using the system to get in the assert >> scenario, or discuss the merit of the changes I suggest. >> >> Thank you >> >> Chris Vienneau >> >> >> Current Code: >> bool JSLock::currentThreadIsHoldingLock() >> { >> ASSERT(!m_hasExclusiveThread || (exclusiveThread() == >> std::this_thread::get_id())); >> if (m_hasExclusiveThread) >> return !!m_lockCount; >> return m_ownerThreadID == std::this_thread::get_id(); >> } >> I found the logic missing some things that I wanted really clear so I chose >> to re-implement it. >> >> Suggested currentThreadIsHoldingLock >> I took a look at what happens in 15.x and came up with this version of the >> function: >> bool JSLock::currentThreadIsHoldingLock() >> { >> ASSERT(!m_hasExclusiveThread || (exclusiveThread() == >> std::this_thread::get_id())); >> //+EAWebKitChange >> //07/07/2016 - this logic is more strait forward and fixes an assert in >> DestroyJavascriptValue after EvaluateJavaScript >> if (m_hasExclusiveThread && exclusiveThread() == >> std::this_thread::get_id()) >> { >> return true; >> } >> if (m_lockCount && m_ownerThreadID == std::this_thread::get_id()) >> { >> return true; >> } >> return false; >> //-EAWebKitChange >> } >> >> Additional Required Fix >> The above was successful in clearing up the assert however another change >> was needed to make things run properly for all tests and soaks: >> void JSLock::lock(intptr_t lockCount) >> { >> ASSERT(lockCount > 0); >> //+EAWebKitChange >> //07/07/2016 - added && (m_lockCount > 0) to condition >> //currentThreadIsHoldingLock doesn't really return if it is holding the >> lock, but more so if it should have the lock >> //this change allows us to take the lock the first time >> if (currentThreadIsHoldingLock() && (m_lockCount > 0)) { >> //-EAWebKitChange >> m_lockCount += lockCount; >> return; >> } >> >> if (!m_hasExclusiveThread) { >> m_lock.lock(); >> m_ownerThreadID = std::this_thread::get_id(); >> } >> ASSERT(!m_lockCount); >> m_lockCount = lockCount; >> >> didAcquireLock(); >> } >> >> Test Code: >> void JavascriptArrays(void*) >> { >> EA_TRACE_MESSAGE("Running JavascriptArrays"); >> >> JavascriptArrayBoundObject jsb; >> jsb.mEAWK = mEAWK; >> jsb.mView = mView; >> >> using namespace EA::WebKit; >> mView->BindJavaScriptObject("TestObject", &jsb); >> >> eastl::string16 script(EA_CHAR16("TestObject.ArrayTest([1, true, >> \"ping\"]);")); >> >> JavascriptValue *returnValue = mEAWK->CreateJavascriptValue(mView); >> mView->EvaluateJavaScript(script.data(), returnValue); >> mEAWK->DestroyJavascriptValue(returnValue); >> } >> >> Assert location: >> \JavaScriptCore\heap\Heap.cpp (471) >> bool Heap::unprotect(JSValue k) >> { >> ASSERT(k); >> > ASSERT(m_vm->currentThreadIsHoldingAPILock()); >> … >> >> Callstack: >> >> EAWebKitDemoUTFWin.exe!EA::Browser::BrowserClient::DebugLog(EA::WebKit::DebugLogInfo >> & dli={...}) Line 254 C++ >> EAWebKitd.dll!EA::WebKit::DebugLogCallback(const >> eastl::basic_string<char,eastl::allocator> & origMessage={...}, bool >> shouldAssert=true) Line 611 C++ >> EAWebKitd.dll!EA::WebKit::DebugLogCallbackInternal(bool >> shouldAssert=true, const char * format=0x000007feb4b15170, char * >> args=0x00000000001af000) Line 629 C++ >> EAWebKitd.dll!vprintf_stderr_common(bool shouldAssert=true, >> const char * format=0x000007feb4b15170, char * args=0x00000000001af000) Line >> 153 C++ >> EAWebKitd.dll!printf_stderr_common(bool shouldAssert=true, >> const char * format=0x000007feb4b15170, ...) Line 237 C++ >> EAWebKitd.dll!printCallSite(const char * >> file=0x000007feb4d04240, int line=471, const char * >> function=0x000007feb4d04158, bool shouldAssert=true) Line 259 C++ >> EAWebKitd.dll!WTFReportAssertionFailure(const char * >> file=0x000007feb4d04240, int line=471, const char * >> function=0x000007feb4d04158, const char * assertion=0x000007feb4d03fe8) Line >> 281 C++ >> EAWebKitd.dll!JSC::Heap::unprotect(JSC::JSValue k={...}) Line >> 471 C++ >> EAWebKitd.dll!JSC::gcUnprotect(JSC::JSCell * >> val=0x000007fffe453dd0) Line 38 C++ >> EAWebKitd.dll!JSC::gcUnprotect(JSC::JSValue value={...}) Line >> 62 C++ >> EAWebKitd.dll!EA::WebKit::JavascriptValue::Destruct() Line >> 495 C++ >> EAWebKitd.dll!EA::WebKit::JavascriptValue::~JavascriptValue() >> Line 318 C++ >> EAWebKitd.dll!EA::WebKit::JavascriptValue::`vector deleting >> destructor'(unsigned int) C++ >> >> EAWebKitd.dll!EA::WebKit::DestroyJavascriptValue(EA::WebKit::JavascriptValue >> * v=0x000007fffe4b7a70) Line 1035 C++ >> >> EAWebKitd.dll!EA::WebKit::EAWebKitLib::DestroyJavascriptValue(EA::WebKit::JavascriptValue >> * v=0x000007fffe4b7a70) Line 400 C++ >> > >> > EAWebKitDemoUTFWin.exe!EAWebkitViewFunctionalTest::JavascriptArrays(void * >> > __formal=0x00000000001afae0) Line 192 C++ >> >> EAWebKitDemoUTFWin.exe!EATest::Test_mfun<EAWebkitViewFunctionalTest>::TestDelegate<EAWebkitViewFunctionalTest>::Invoke(EAWebkitViewFunctionalTest >> * instance=0x00000001415f2130, void * p=0x00000000001afae0) Line 72 >> C++ >> >> EAWebKitDemoUTFWin.exe!EATest::Test_mfun<EAWebkitViewFunctionalTest>::operator()(void >> * context=0x00000000001afae0) Line 107 C++ >> EAWebKitDemoUTFWin.exe!EATest::TestCase::operator()(void * >> context=0x00000000001afae0) Line 76 C++ >> >> EAWebKitDemoUTFWin.exe!EATest::TestSuite::ExecuteTestCase(EATest::TestCase * >> tc=0x00000000002c4239, void * context=0x00000000001afae0) Line 520 C++ >> EAWebKitDemoUTFWin.exe!EATest::TestSuite::RunTests(const char >> * suitename=0x0000000000000000, const char * testname=0x0000000000000000, >> void * context=0x00000000001afae0) Line 304 C++ >> EAWebKitDemoUTFWin.exe!EATest::TestSuite::RunAllTests(void * >> context=0x00000000001afae0) Line 147 C++ >> EAWebKitDemoUTFWin.exe!EATest::DoTests(int argc=1, char * * >> argv=0x000007fffefb83a0, void * context=0x00000000001afae0) Line 307 C++ >> >> EAWebKitDemoUTFWin.exe!EA::Browser::RunUnitTests(EA::App::AppCommandLine & >> commandLine={...}) Line 2284 C++ >> EAWebKitDemoUTFWin.exe!EAMain(EA::App::AppCommandLine & >> commandLine={...}) Line 1123 C++ >> EAWebKitDemoUTFWin.exe!WinMain(HINSTANCE__ * >> __formal=0x000000013fe80000, HINSTANCE__ * __formal=0x0000000000000000, char >> * cmdLine=0x00000000002167c2, int __formal=10) Line 79 C++ >> EAWebKitDemoUTFWin.exe!invoke_main() Line 109 C++ >> EAWebKitDemoUTFWin.exe!__scrt_common_main_seh() Line 264 >> C++ >> EAWebKitDemoUTFWin.exe!__scrt_common_main() Line 309 C++ >> EAWebKitDemoUTFWin.exe!WinMainCRTStartup() Line 17 C++ >> kernel32.dll!BaseThreadInitThunk‑() Unknown >> ntdll.dll!RtlUserThreadStart‑() Unknown >> _______________________________________________ >> webkit-dev mailing list >> [email protected] <mailto:[email protected]> >> https://lists.webkit.org/mailman/listinfo/webkit-dev >> <https://lists.webkit.org/mailman/listinfo/webkit-dev> > _______________________________________________ > webkit-dev mailing list > [email protected] > https://lists.webkit.org/mailman/listinfo/webkit-dev
_______________________________________________ webkit-dev mailing list [email protected] https://lists.webkit.org/mailman/listinfo/webkit-dev

