<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>176296</bug_id>
          
          <creation_ts>2017-09-03 00:39:15 -0700</creation_ts>
          <short_desc>[Threaded Compositor] Deadlock in ThreadedDisplayRefreshMonitor</short_desc>
          <delta_ts>2017-09-03 23:52:52 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>zan</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1344936</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-09-03 00:39:15 -0700</bug_when>
    <thetext>Thread 13 (Thread 0x7fca3a0ff700 (LWP 22518)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fcabf14b54b in WTF::ThreadCondition::timedWait(WTF::Mutex&amp;, double) () from /home/cgarcia/gnome/lib/libjavascriptcoregtk-4.0.so.18
#2  0x00007fcabf112cc3 in WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda&lt;bool ()&gt; const&amp;, WTF::ScopedLambda&lt;void ()&gt; const&amp;, WTF::TimeWithDynamicClockType const&amp;) ()
   from /home/cgarcia/gnome/lib/libjavascriptcoregtk-4.0.so.18
#3  0x00007fcabf108710 in WTF::LockAlgorithm&lt;unsigned char, (unsigned char)1, (unsigned char)2&gt;::lockSlow(WTF::Atomic&lt;unsigned char&gt;&amp;) ()
   from /home/cgarcia/gnome/lib/libjavascriptcoregtk-4.0.so.18
#4  0x00007fcac253f178 in WebKit::ThreadedDisplayRefreshMonitor::requiresDisplayRefreshCallback() () from /home/cgarcia/gnome/lib/libwebkit2gtk-4.0.so.37
#5  0x00007fcac2541b5c in WebKit::ThreadedCompositor::sceneUpdateFinished() () from /home/cgarcia/gnome/lib/libwebkit2gtk-4.0.so.37
#6  0x00007fcac254132c in WebKit::ThreadedCompositor::renderLayerTree() () from /home/cgarcia/gnome/lib/libwebkit2gtk-4.0.so.37
#7  0x00007fcabf14c53a in WTF::RunLoop::TimerBase::TimerBase(WTF::RunLoop&amp;)::{lambda(void*)#1}::_FUN(void*) () from /home/cgarcia/gnome/lib/libjavascriptcoregtk-4.0.so.18
#8  0x00007fcaba6285aa in g_main_dispatch (context=0x7fca340008c0) at gmain.c:3234
#9  g_main_context_dispatch (context=context@entry=0x7fca340008c0) at gmain.c:3899
#10 0x00007fcaba628928 in g_main_context_iterate (context=0x7fca340008c0, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3972
#11 0x00007fcaba628c42 in g_main_loop_run (loop=0x7fca34001200) at gmain.c:4168
#12 0x00007fcabf14c8f8 in WTF::RunLoop::run() () from /home/cgarcia/gnome/lib/libjavascriptcoregtk-4.0.so.18
#13 0x00007fcabf14b912 in WTF::Function&lt;void ()&gt;::CallableWrapper&lt;WTF::WorkQueue::platformInitialize(char const*, WTF::WorkQueue::Type, WTF::WorkQueue::QOS)::{lambda()#1}&gt;::call() ()
   from /home/cgarcia/gnome/lib/libjavascriptcoregtk-4.0.so.18
#14 0x00007fcabf116ccb in WTF::Thread::entryPoint(WTF::Thread::NewThreadContext*) () from /home/cgarcia/gnome/lib/libjavascriptcoregtk-4.0.so.18
#15 0x00007fcabf14aa89 in WTF::wtfThreadEntryPoint(void*) () from /home/cgarcia/gnome/lib/libjavascriptcoregtk-4.0.so.18
#16 0x00007fcab635a494 in start_thread (arg=0x7fca3a0ff700) at pthread_create.c:333
#17 0x00007fcab4fc6abf in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:97

Thread 1 (Thread 0x7fcac4b1ca80 (LWP 22475)):
#0  pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007fcabf14b54b in WTF::ThreadCondition::timedWait(WTF::Mutex&amp;, double) () from /home/cgarcia/gnome/lib/libjavascriptcoregtk-4.0.so.18
#2  0x00007fcabf112cc3 in WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda&lt;bool ()&gt; const&amp;, WTF::ScopedLambda&lt;void ()&gt; const&amp;, WTF::TimeWithDynamicClockType const&amp;) ()
   from /home/cgarcia/gnome/lib/libjavascriptcoregtk-4.0.so.18
#3  0x00007fcabf108710 in WTF::LockAlgorithm&lt;unsigned char, (unsigned char)1, (unsigned char)2&gt;::lockSlow(WTF::Atomic&lt;unsigned char&gt;&amp;) ()
   from /home/cgarcia/gnome/lib/libjavascriptcoregtk-4.0.so.18
#4  0x00007fcac2541e08 in WebKit::ThreadedCompositor::requestDisplayRefreshMonitorUpdate() () from /home/cgarcia/gnome/lib/libwebkit2gtk-4.0.so.37
#5  0x00007fcac253ef84 in WebKit::ThreadedDisplayRefreshMonitor::requestRefreshCallback() () from /home/cgarcia/gnome/lib/libwebkit2gtk-4.0.so.37
#6  0x00007fcac296433c in WebCore::ScriptedAnimationController::scheduleAnimation() () from /home/cgarcia/gnome/lib/libwebkit2gtk-4.0.so.37
#7  0x00007fcac2964532 in WebCore::ScriptedAnimationController::registerCallback(WTF::Ref&lt;WebCore::RequestAnimationFrameCallback&gt;&amp;&amp;) () from /home/cgarcia/gnome/lib/libwebkit2gtk-4.0.so.37
#8  0x00007fcac3857692 in WebCore::jsDOMWindowInstanceFunctionRequestAnimationFrame(JSC::ExecState*) () from /home/cgarcia/gnome/lib/libwebkit2gtk-4.0.so.37
#9  0x00007fca57fff288 in ?? ()
#10 0x00007ffe552abfb0 in ?? ()
#11 0x00007fca5809e53d in ?? ()
#12 0x0000000000000000 in ?? ()

The main thread tries to schedule a display refresh monitor from RAF, requestDisplayRefreshMonitorUpdate() tries to take the attributes lock to update coordinateUpdateCompletionWithClient. The compositing thread has finished a frame and sceneUpdateFinished() takes the attributes lock to update clientRendersNextFrame and then asks the display refresh monitor requires a new callback. ThreadedDisplayRefreshMonitor::requiresDisplayRefreshCallback() takes its lock to check the state, and requestDisplayRefreshMonitorUpdate() was called by ThreadedDisplayRefreshMonitor::requestRefreshCallback() with the display refresh monitor lock taken. So, compositing thread has the attributes lock and wants the display refresh monitor one, and main thread has the display refresh monitor lock and wants the attributes one.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1344937</commentid>
    <comment_count>1</comment_count>
      <attachid>319765</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-09-03 00:42:59 -0700</bug_when>
    <thetext>Created attachment 319765
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1345171</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-09-03 23:52:52 -0700</bug_when>
    <thetext>Committed r221574: &lt;http://trac.webkit.org/changeset/221574&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>319765</attachid>
            <date>2017-09-03 00:42:59 -0700</date>
            <delta_ts>2017-09-03 23:11:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-display-refresh-deadlock.diff</filename>
            <type>text/plain</type>
            <size>2920</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFu
Z2VMb2cKaW5kZXggMzA3YjBhYWEzZjkuLjAxNjc4NTA5M2MwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsx
LDIzIEBACisyMDE3LTA5LTAzICBDYXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlh
LmNvbT4KKworICAgICAgICBbVGhyZWFkZWQgQ29tcG9zaXRvcl0gRGVhZGxvY2sgaW4gVGhyZWFk
ZWREaXNwbGF5UmVmcmVzaE1vbml0b3IKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTE3NjI5NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIFRoZSBtYWluIHRocmVhZCB0cmllcyB0byBzY2hlZHVsZSBhIGRpc3Bs
YXkgcmVmcmVzaCBtb25pdG9yIGZyb20gUkFGLCByZXF1ZXN0RGlzcGxheVJlZnJlc2hNb25pdG9y
VXBkYXRlKCkgdHJpZXMKKyAgICAgICAgdG8gdGFrZSB0aGUgYXR0cmlidXRlcyBsb2NrIHRvIHVw
ZGF0ZSBjb29yZGluYXRlVXBkYXRlQ29tcGxldGlvbldpdGhDbGllbnQuIFRoZSBjb21wb3NpdGlu
ZyB0aHJlYWQgaGFzIGZpbmlzaGVkCisgICAgICAgIGEgZnJhbWUgYW5kIHNjZW5lVXBkYXRlRmlu
aXNoZWQoKSB0YWtlcyB0aGUgYXR0cmlidXRlcyBsb2NrIHRvIHVwZGF0ZSBjbGllbnRSZW5kZXJz
TmV4dEZyYW1lIGFuZCB0aGVuIGFza3MgdGhlCisgICAgICAgIGRpc3BsYXkgcmVmcmVzaCBtb25p
dG9yIGlmIGl0IHJlcXVpcmVzIGEgbmV3IGNhbGxiYWNrLiBUaHJlYWRlZERpc3BsYXlSZWZyZXNo
TW9uaXRvcjo6cmVxdWlyZXNEaXNwbGF5UmVmcmVzaENhbGxiYWNrKCkKKyAgICAgICAgdGFrZXMg
aXRzIGxvY2sgdG8gY2hlY2sgdGhlIHN0YXRlLCBhbmQgcmVxdWVzdERpc3BsYXlSZWZyZXNoTW9u
aXRvclVwZGF0ZSgpIHdhcyBjYWxsZWQgYnkKKyAgICAgICAgVGhyZWFkZWREaXNwbGF5UmVmcmVz
aE1vbml0b3I6OnJlcXVlc3RSZWZyZXNoQ2FsbGJhY2soKSB3aXRoIHRoZSBkaXNwbGF5IHJlZnJl
c2ggbW9uaXRvciBsb2NrIHRha2VuLiBTbywKKyAgICAgICAgdGhlIGNvbXBvc2l0aW5nIHRocmVh
ZCBoYXMgdGhlIGF0dHJpYnV0ZXMgbG9jayBhbmQgd2FudHMgdGhlIGRpc3BsYXkgcmVmcmVzaCBt
b25pdG9yIG9uZSwgYW5kIG1haW4gdGhyZWFkIGhhcyB0aGUKKyAgICAgICAgZGlzcGxheSByZWZy
ZXNoIG1vbml0b3IgbG9jayBhbmQgd2FudHMgdGhlIGF0dHJpYnV0ZXMgb25lLgorCisgICAgICAg
ICogU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFkZWRjb21wb3NpdG9yL1RocmVhZGVk
RGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcDoKKyAgICAgICAgKFdlYktpdDo6VGhyZWFkZWREaXNw
bGF5UmVmcmVzaE1vbml0b3I6OnJlcXVlc3RSZWZyZXNoQ2FsbGJhY2spOiBSZWxlYXNlIHRoZSBt
dXRleCBiZWZvcmUgY2FsbGluZworICAgICAgICBUaHJlYWRlZENvbXBvc2l0b3I6OnJlcXVlc3RE
aXNwbGF5UmVmcmVzaE1vbml0b3JVcGRhdGUoKS4KKwogMjAxNy0wOS0wMiAgQ2FybG9zIEdhcmNp
YSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS11bV2F5bGFuZF0g
VXNlIGZhc3QgbWFsbG9jIHRvIGFsbG9jYXRlIGJhY2tpbmcgc3RvcmUgY2Fpcm8gc3VyZmFjZXMg
ZGF0YQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGlj
cy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwIGIv
U291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRHcmFwaGljcy90aHJlYWRlZGNvbXBvc2l0
b3IvVGhyZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3IuY3BwCmluZGV4IDAyYmMwNjNmZTk5Li41
OTMyZWY4ZjJhZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9TaGFyZWQvQ29vcmRpbmF0ZWRH
cmFwaGljcy90aHJlYWRlZGNvbXBvc2l0b3IvVGhyZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3Iu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL0Nvb3JkaW5hdGVkR3JhcGhpY3MvdGhyZWFk
ZWRjb21wb3NpdG9yL1RocmVhZGVkRGlzcGxheVJlZnJlc2hNb25pdG9yLmNwcApAQCAtNTAsMTMg
KzUwLDE3IEBAIGJvb2wgVGhyZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3I6OnJlcXVlc3RSZWZy
ZXNoQ2FsbGJhY2soKQogICAgIGlmICghbV9jb21wb3NpdG9yKQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihtdXRleCgpKTsKLSAgICBzZXRJc1NjaGVkdWxl
ZCh0cnVlKTsKKyAgICBib29sIHByZXZpb3VzRnJhbWVEb25lIHsgZmFsc2UgfTsKKyAgICB7Cisg
ICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG11dGV4KCkpOworICAgICAgICBzZXRJc1NjaGVkdWxl
ZCh0cnVlKTsKKyAgICAgICAgcHJldmlvdXNGcmFtZURvbmUgPSBpc1ByZXZpb3VzRnJhbWVEb25l
KCk7CisgICAgfQogCiAgICAgLy8gT25seSByZXF1ZXN0IGFuIHVwZGF0ZSBpbiBjYXNlIHdlJ3Jl
IG5vdCBjdXJyZW50bHkgaGFuZGxpbmcgdGhlIGRpc3BsYXkKICAgICAvLyByZWZyZXNoIG5vdGlm
aWNhdGlvbnMgdW5kZXIgVGhyZWFkZWREaXNwbGF5UmVmcmVzaE1vbml0b3I6OmRpc3BsYXlSZWZy
ZXNoQ2FsbGJhY2soKS4KICAgICAvLyBBbnkgc3VjaCBzY2hlZHVsZSByZXF1ZXN0IGlzIGhhbmRs
ZWQgaW4gdGhhdCBtZXRob2QgYWZ0ZXIgdGhlIG5vdGlmaWNhdGlvbnMuCi0gICAgaWYgKGlzUHJl
dmlvdXNGcmFtZURvbmUoKSkKKyAgICBpZiAocHJldmlvdXNGcmFtZURvbmUpCiAgICAgICAgIG1f
Y29tcG9zaXRvci0+cmVxdWVzdERpc3BsYXlSZWZyZXNoTW9uaXRvclVwZGF0ZSgpOwogCiAgICAg
cmV0dXJuIHRydWU7Cg==
</data>
<flag name="review"
          id="339974"
          type_id="1"
          status="+"
          setter="zan"
    />
          </attachment>
      

    </bug>

</bugzilla>