Bug 115407
Summary: | REGRESION(r149338): WebKitTestRunner crashing on Qt WK2, EFL WK2 | ||
---|---|---|---|
Product: | WebKit | Reporter: | Zoltan Arvai <zarvai> |
Component: | Tools / Tests | Assignee: | Nobody <webkit-unassigned> |
Status: | RESOLVED FIXED | ||
Severity: | Normal | CC: | allan.jensen, andersca, bw80.lee, hausmann, jturcotte, kadam, rakuco, sam |
Priority: | P2 | ||
Version: | 528+ (Nightly build) | ||
Hardware: | Unspecified | ||
OS: | Unspecified | ||
Bug Depends on: | |||
Bug Blocks: | 115384 |
Zoltan Arvai
All tests crashing after the patch, because platform specific RunLoop files not updated well.
17:45:53.357 19964 worker/0 http/tests/cache/cached-main-resource.html crashed, (no stderr)
17:45:53.358 19964 [1/28401] http/tests/cache/cached-main-resource.html failed unexpectedly (WebKitTestRunner crashed [pid=20217])
17:45:53.358 19964 worker/0 killing driver
17:45:53.358 19964 worker/0 http/tests/cache/cached-main-resource.html failed:
17:45:53.358 19964 worker/0 WebKitTestRunner crashed [pid=20217]
17:45:53.715 19964 worker/0 http/tests/cache/cancel-during-failure-crash.html crashed, (no stderr)
Attachments | ||
---|---|---|
Add attachment proposed patch, testcase, etc. |
Byungwoo Lee
RunLoop::current() returns 0 and below seems to make this problem.
RunLoop* RunLoop::current()
{
- DEFINE_STATIC_LOCAL(WTF::ThreadSpecific<RunLoop>, runLoopData, ());
- return &*runLoopData;
+ DEFINE_STATIC_LOCAL(WTF::ThreadSpecific<RefPtr<RunLoop> >, runLoopData, ());
+ return runLoopData->get();
}
RefPtr<RunLoop> will be empty because DEFINE_STATIC_LOCAL will not create RunLoop instance.
I made a change as following, and it works ok.
But I'm not sure this is the right solution.
RunLoop* RunLoop::current()
{
- DEFINE_STATIC_LOCAL(WTF::ThreadSpecific<RefPtr<RunLoop> >, runLoopData, ());
- return runLoopData->get();
+ DEFINE_STATIC_LOCAL(WTF::ThreadSpecific<RefPtr<RunLoop> >, runLoopRefPtrData, ());
+ DEFINE_STATIC_LOCAL(WTF::ThreadSpecific<RunLoop>, runLoopData, ());
+ if (!runLoopRefPtrData.isSet())
+ *runLoopRefPtrData = adoptRef((RunLoop*)runLoopData);
+ return runLoopRefPtrData->get();
}
is there any one who knows the clear point about this?
Byungwoo Lee
checking isSet() seems incorrect.
RunLoop* RunLoop::current()
{
- DEFINE_STATIC_LOCAL(WTF::ThreadSpecific<RefPtr<RunLoop> >, runLoopData, ());
- return runLoopData->get();
+ DEFINE_STATIC_LOCAL(WTF::ThreadSpecific<RefPtr<RunLoop> >, runLoopRefPtrData, ());
+ DEFINE_STATIC_LOCAL(WTF::ThreadSpecific<RunLoop>, runLoopData, ());
+ if (!runLoopRefPtrData->get())
+ *runLoopRefPtrData = adoptRef((RunLoop*)runLoopData);
+ return runLoopRefPtrData->get();
}
Zoltan Arvai
Closing. R149338 rolled out in http://trac.webkit.org/changeset/149358.