Bug 158612 - WTF_CrossThreadTask.Basic fails in all non mac ports
Summary: WTF_CrossThreadTask.Basic fails in all non mac ports
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Web Template Framework (show other bugs)
Version: WebKit Local Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Brady Eidson
URL:
Keywords: Regression
Depends on:
Blocks:
 
Reported: 2016-06-09 22:53 PDT by Carlos Garcia Campos
Modified: 2016-06-10 10:03 PDT (History)
4 users (show)

See Also:


Attachments
Patch (6.26 KB, patch)
2016-06-10 09:43 PDT, Brady Eidson
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Carlos Garcia Campos 2016-06-09 22:53:24 PDT
../../Tools/TestWebKitAPI/Tests/WTF/CrossThreadTask.cpp:105

Value of: LifetimeLogger::takeLogStr().c_str()

  Actual: "default_constructor(<default>-0-0) copy_constructor(<default>-1-0) name_constructor(logger-0-0) isolatedCopy() copy_constructor(logger-1-0) isolatedCopy() copy_constructor(<default>-2-0) isolatedCopy() copy_constructor(<default>-1-0) move_constructor(logger-1-1) move_constructor(<default>-2-1) move_constructor(<default>-1-1) move_constructor(logger-1-2) move_constructor(<default>-2-2) move_constructor(<default>-1-2) destructor(<default>-1-1) destructor(<default>-2-1) destructor(logger-1-1) destructor(<default>-1-0) destructor(<default>-2-0) destructor(logger-1-0) testFunction called destructor(<default>-1-2) destructor(<default>-2-2) destructor(logger-1-2) destructor(logger-0-0) destructor(<default>-1-0) destructor(<default>-0-0) "

Expected: "default_constructor(<default>-0-0) copy_constructor(<default>-1-0) name_constructor(logger-0-0) isolatedCopy() copy_constructor(<default>-1-0) isolatedCopy() copy_constructor(<default>-2-0) isolatedCopy() copy_constructor(logger-1-0) move_constructor(<default>-1-1) move_constructor(<default>-2-1) move_constructor(logger-1-1) destructor(logger-1-0) destructor(<default>-2-0) destructor(<default>-1-0) move_constructor(<default>-1-2) move_constructor(<default>-2-2) move_constructor(logger-1-2) destructor(logger-1-1) destructor(<default>-2-1) destructor(<default>-1-1) testFunction called destructor(logger-1-2) destructor(<default>-2-2) destructor(<default>-1-2) destructor(logger-0-0) destructor(<default>-1-0) destructor(<default>-0-0) "

FAIL WTF_CrossThreadTask.Basic

C:\cygwin\home\buildbot\slave\win-release\build\Tools\TestWebKitAPI\Tests\WTF\CrossThreadTask.cpp:105
Value of: LifetimeLogger::takeLogStr().c_str()
  Actual: "default_constructor(<default>-0-0) copy_constructor(<default>-1-0) name_constructor(logger-0-0) isolatedCopy() copy_constructor(logger-1-0) isolatedCopy() copy_constructor(<default>-2-0) isolatedCopy() copy_constructor(<default>-1-0) move_constructor(logger-1-1) move_constructor(<default>-2-1) move_constructor(<default>-1-1) move_constructor(logger-1-2) move_constructor(<default>-2-2) move_constructor(<default>-1-2) move_constructor(logger-1-3) move_constructor(<default>-2-3) move_constructor(<default>-1-3) destructor(<default>-1-2) destructor(<default>-2-2) destructor(logger-1-2) destructor(<default>-1-1) destructor(<default>-2-1) destructor(logger-1-1) destructor(<default>-1-0) destructor(<default>-2-0) destructor(logger-1-0) testFunction called destructor(<default>-1-3) destructor(<default>-2-3) destructor(logger-1-3) destructor(logger-0-0) destructor(<default>-1-0) destructor(<default>-0-0) "
Expected: "default_constructor(<default>-0-0) copy_constructor(<default>-1-0) name_constructor(logger-0-0) isolatedCopy() copy_constructor(<default>-1-0) isolatedCopy() copy_constructor(<default>-2-0) isolatedCopy() copy_constructor(logger-1-0) move_constructor(<default>-1-1) move_constructor(<default>-2-1) move_constructor(logger-1-1) destructor(logger-1-0) destructor(<default>-2-0) destructor(<default>-1-0) move_constructor(<default>-1-2) move_constructor(<default>-2-2) move_constructor(logger-1-2) destructor(logger-1-1) destructor(<default>-2-1) destructor(<default>-1-1) testFunction called destructor(logger-1-2) destructor(<default>-2-2) destructor(<default>-1-2) destructor(logger-0-0) destructor(<default>-1-0) destructor(<default>-0-0) "
Comment 1 Brady Eidson 2016-06-10 09:01:52 PDT
The isolated copy snippets are out of order:

Actual:
...
isolatedCopy() 
copy_constructor(logger-1-0) 
isolatedCopy() 
copy_constructor(<default>-2-0) 
isolatedCopy() 
copy_constructor(<default>-1-0) 
...

Expected:
...
isolatedCopy() 
copy_constructor(<default>-1-0) 
isolatedCopy() 
copy_constructor(<default>-2-0) 
isolatedCopy() 
copy_constructor(logger-1-0) 
...

Which is reasonable, considering evaluation order of function arguments is unspecified.

Same thing with the other out-of-orderness later on.

The test assuming evaluation order is bogus.

I'll explore ways to fix.
Comment 2 Brady Eidson 2016-06-10 09:03:32 PDT
Besides out-of-orderness, the exact number of constructor calls per named object is still the same.

So having a map of names-to-constructor calls will work.
Comment 3 Brady Eidson 2016-06-10 09:43:09 PDT
Created attachment 281011 [details]
Patch
Comment 4 Alex Christensen 2016-06-10 09:52:06 PDT
Comment on attachment 281011 [details]
Patch

cool
Comment 5 Brady Eidson 2016-06-10 10:03:01 PDT
http://trac.webkit.org/changeset/201928