<?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>167876</bug_id>
          
          <creation_ts>2017-02-06 05:45:23 -0800</creation_ts>
          <short_desc>[Soup] Deadlock in NetworkProcess</short_desc>
          <delta_ts>2017-02-06 10:02:32 -0800</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>
          
          <see_also>https://bugzilla.redhat.com/show_bug.cgi?id=1418413</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Tomas Popela">tpopela</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>cgarcia</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1273538</commentid>
    <comment_count>0</comment_count>
    <who name="Tomas Popela">tpopela</who>
    <bug_when>2017-02-06 05:45:23 -0800</bug_when>
    <thetext>Loading big messages in Evolution could leave NetworkProcess in deadlock, causing Evolution to not load anything later. It was introduced in http://trac.webkit.org/changeset/210374 (bisected there).

Thread 1 (Thread 0x7f0e6feb6fc0 (LWP 21043)):
#0  0x00007f0e678dc460 in pthread_cond_wait@@GLIBC_2.3.2 () at ../sysdeps/unix/sysv/linux/x86_64/pthread_cond_wait.S:185
#1  0x00007f0e6a9645eb in WTF::ThreadCondition::timedWait(WTF::Mutex&amp;, double) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.0.so.18
#2  0x00007f0e6a93d963 in WTF::ParkingLot::parkConditionallyImpl(void const*, WTF::ScopedLambda&lt;bool ()&gt; const&amp;, WTF::ScopedLambda&lt;void ()&gt; const&amp;, WTF::TimeWithDynamicClockType const&amp;) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.0.so.18
#3  0x00007f0e6a934234 in WTF::LockAlgorithm&lt;unsigned char, (unsigned char)1, (unsigned char)2&gt;::lockSlow(WTF::Atomic&lt;unsigned char&gt;&amp;) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.0.so.18
#4  0x00007f0e6dd7dc3c in webkitSoupRequestInputStreamReadAsync(_GInputStream*, void*, unsigned long, int, _GCancellable*, void (*)(_GObject*, _GAsyncResult*, void*), void*) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#5  0x00007f0e64c432d9 in g_input_stream_read_async (stream=0x10387e0 [WebKitSoupRequestInputStream], buffer=0x7f0e13df0000, count=8192, io_priority=0, cancellable=0x10d8cf0 [GCancellable], callback=
    0x7f0e6dc502c0 &lt;WebKit::NetworkDataTaskSoup::readCallback(_GInputStream*, _GAsyncResult*, WebKit::NetworkDataTaskSoup*)&gt;, user_data=0x7f0e13df8480) at ginputstream.c:633
#6  0x00007f0e6dc4ef6f in WebKit::NetworkDataTaskSoup::read() () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#7  0x00007f0e6dc4f58d in WebKit::NetworkDataTaskSoup::didRead(long) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#8  0x00007f0e6dc50428 in WebKit::NetworkDataTaskSoup::readCallback(_GInputStream*, _GAsyncResult*, WebKit::NetworkDataTaskSoup*) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#9  0x00007f0e64c43f9a in async_ready_callback_wrapper (source_object=0x10387e0 [WebKitSoupRequestInputStream], res=0x119ae30, user_data=0x7f0e13df8480) at ginputstream.c:532
#10 0x00007f0e64c6b9d4 in g_task_return_now (task=0x119ae30 [GTask]) at gtask.c:1121
#11 0x00007f0e64c6c086 in g_task_return (task=0x119ae30 [GTask], type=&lt;optimized out&gt;) at gtask.c:1179
#12 0x00007f0e6dd7daf3 in webkitSoupRequestInputStreamReadAsyncResultComplete(_GTask*, void*, unsigned long) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#13 0x00007f0e6dd7df6e in webkitSoupRequestInputStreamAddData () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#14 0x00007f0e6dda28c5 in WebKit::CustomProtocolManager::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#15 0x00007f0e6da2e749 in IPC::MessageReceiverMap::dispatchMessage(IPC::Connection&amp;, IPC::Decoder&amp;) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#16 0x00007f0e6dc060c6 in WebKit::NetworkProcess::didReceiveMessage(IPC::Connection&amp;, IPC::Decoder&amp;) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#17 0x00007f0e6da2a50b in IPC::Connection::dispatchMessage(std::unique_ptr&lt;IPC::Decoder, std::default_delete&lt;IPC::Decoder&gt; &gt;) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#18 0x00007f0e6da2b078 in IPC::Connection::dispatchOneMessage() () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#19 0x00007f0e6a93fb25 in WTF::RunLoop::performWork() () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.0.so.18
#20 0x00007f0e6a965b79 in WTF::RunLoop::RunLoop()::{lambda(void*)#1}::_FUN(void*) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.0.so.18
#21 0x00007f0e644c3e42 in g_main_dispatch (context=0x98eb30) at gmain.c:3203
#22 0x00007f0e644c3e42 in g_main_context_dispatch (context=context@entry=0x98eb30) at gmain.c:3856
#23 0x00007f0e644c41c0 in g_main_context_iterate (context=0x98eb30, block=block@entry=1, dispatch=dispatch@entry=1, self=&lt;optimized out&gt;) at gmain.c:3929
#24 0x00007f0e644c44e2 in g_main_loop_run (loop=0x98ed20) at gmain.c:4125
#25 0x00007f0e6a966410 in WTF::RunLoop::run() () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libjavascriptcoregtk-4.0.so.18
#26 0x00007f0e6dc59706 in int WebKit::ChildProcessMain&lt;WebKit::NetworkProcess, WebKit::ChildProcessMainBase&gt;(int, char**) () at /home/tpopela/dev/upstream/WebKit/WebKitBuild/Release/lib/libwebkit2gtk-4.0.so.37
#27 0x00007f0e60d2a401 in __libc_start_main (main=0x400ac0 &lt;main&gt;, argc=2, argv=0x7ffc78222528, init=&lt;optimized out&gt;, fini=&lt;optimized out&gt;, rtld_fini=&lt;optimized out&gt;, stack_end=0x7ffc78222518) at ../csu/libc-start.c:289
#28 0x0000000000400b1a in _start ()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273541</commentid>
    <comment_count>1</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-06 05:57:38 -0800</bug_when>
    <thetext>WebKitSoupRequestInputStream uses a read lock.What is happening is that webkitSoupRequestInputStreamAddData takes the lock, and it calls webkitSoupRequestInputStreamPendingReadAsyncComplete with the lock help. That causes webkitSoupRequestInputStreamReadAsync to be called again to read the next chunk, but in the same run loop operation. webkitSoupRequestInputStreamReadAsync also takes the read lock. I don&apos;t know why we are using that read lock, I don&apos;t think it&apos;s needed, at least now everything should happen in the main thread. But I&apos;m going to look at it in more detail. If the lock is needed, then the solution is to release it before calling webkitSoupRequestInputStreamPendingReadAsyncComplete</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273542</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-06 06:06:01 -0800</bug_when>
    <thetext>According to myself in https://bugs.webkit.org/show_bug.cgi?id=85880#c9 the mutex is needed, because glib will use a thread to implement read_async, and webkitSoupRequestInputStreamAddData can be called from other thread. Before r210374, that thread was the message work queue, that&apos;s why this never happened. Now it&apos;s the main thread, so I guess we just need to release the lock.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273546</commentid>
    <comment_count>3</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-06 06:19:53 -0800</bug_when>
    <thetext>(In reply to comment #2)
&gt; According to myself in https://bugs.webkit.org/show_bug.cgi?id=85880#c9 the
&gt; mutex is needed, because glib will use a thread to implement read_async, and
&gt; webkitSoupRequestInputStreamAddData can be called from other thread. Before
&gt; r210374, that thread was the message work queue, that&apos;s why this never
&gt; happened. Now it&apos;s the main thread, so I guess we just need to release the
&gt; lock.

But I was wrong, because we are overriding GInputStreamClass::read_async, claiming we know how to handle the async request, and therefore not using the fallback implementation in GInputStream that runs the thread. It makes sense, indeed, because we are actually a GMemoryInputStream, there&apos;s no io in the read function, so we can handle it in the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273548</commentid>
    <comment_count>4</comment_count>
      <attachid>300716</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-06 06:29:49 -0800</bug_when>
    <thetext>Created attachment 300716
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1273611</commentid>
    <comment_count>5</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2017-02-06 10:02:32 -0800</bug_when>
    <thetext>Committed r211734: &lt;http://trac.webkit.org/changeset/211734&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>300716</attachid>
            <date>2017-02-06 06:29:49 -0800</date>
            <delta_ts>2017-02-06 07:31:37 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk2-custom-protocols-deadlock.diff</filename>
            <type>text/plain</type>
            <size>3351</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQyL0No
YW5nZUxvZwppbmRleCAwOTA1YzdkYzYyNS4uMzhiYWE1NjA5NTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMCBAQAorMjAxNy0wMi0wNiAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGln
YWxpYS5jb20+CisKKyAgICAgICAgW1NvdXBdIERlYWRsb2NrIGluIE5ldHdvcmtQcm9jZXNzCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjc4NzYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWJLaXRTb3Vw
UmVxdWVzdElucHV0U3RyZWFtIHVzZXMgYSByZWFkIGxvY2suIFdoYXQgaXMgaGFwcGVuaW5nIGlz
IHRoYXQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEKKyAgICAgICAgdGFrZXMg
dGhlIGxvY2ssIGFuZCBpdCBjYWxscyB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtUGVuZGlu
Z1JlYWRBc3luY0NvbXBsZXRlIHdpdGggdGhlIGxvY2sgaGVscC4gVGhhdAorICAgICAgICBjYXVz
ZXMgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbVJlYWRBc3luYyB0byBiZSBjYWxsZWQgYWdh
aW4gdG8gcmVhZCB0aGUgbmV4dCBjaHVuaywgYnV0IGluIHRoZSBzYW1lIHJ1biBsb29wCisgICAg
ICAgIG9wZXJhdGlvbi4gV2UgZG9uJ3QgcmVhbGx5IG5lZWQgdGhlIHJlYWQgbG9jayBiZWNhdXNl
IGJvdGggd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEgYW5kCisgICAgICAgIHdl
YmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1SZWFkQXN5bmMgc2hvdWRsIGFsd2F5cyBiZSBjYWxs
ZWQgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL3NvdXAvV2Vi
S2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbS5jcHA6CisgICAgICAgICh3ZWJraXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtUmVhZEFzeW5jKTogUmVtb3ZlIHRoZSByZWFkIGxvY2sgYW5kIGFzc2VydCBp
ZiBjYWxsZWQgZnJvbSBhIHNlY29uZGFyeSB0aHJlYWQuCisgICAgICAgICh3ZWJraXRTb3VwUmVx
dWVzdElucHV0U3RyZWFtQWRkRGF0YSk6IERpdHRvLgorCiAyMDE3LTAyLTA1ICBTaW1vbiBGcmFz
ZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92ZSB1bnBhcmVudHNP
ZmZzY3JlZW5UaWxlcyBsb2dpYyBpbiBUaWxlQ29udHJvbGxlcgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uY3Bw
IGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRT
dHJlYW0uY3BwCmluZGV4IGEzY2RjOGQwOWUxLi43OGQ5NzYxZWRhOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9zb3VwL1dlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0u
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mvc291cC9XZWJLaXRTb3VwUmVxdWVz
dElucHV0U3RyZWFtLmNwcApAQCAtMjAsOCArMjAsNyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIldlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0uaCIKIAotI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+Ci0jaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUgPHd0Zi9NYWlu
VGhyZWFkLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9n
bGliL0dVbmlxdWVQdHIuaD4KIApAQCAtNDUsNyArNDQsNiBAQCBzdHJ1Y3QgX1dlYktpdFNvdXBS
ZXF1ZXN0SW5wdXRTdHJlYW1Qcml2YXRlIHsKIAogICAgIEdVbmlxdWVQdHI8R0Vycm9yPiBlcnJv
cjsKIAotICAgIExvY2sgcmVhZExvY2s7CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFzeW5jUmVhZERh
dGE+IHBlbmRpbmdBc3luY1JlYWQ7CiB9OwogCkBAIC04NSwxMSArODMsMTAgQEAgc3RhdGljIGJv
b2wgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUlzV2FpdGluZ0ZvckRhdGEoV2ViS2l0U291
cFJlcXVlc3RJbnB1dFMKIAogc3RhdGljIHZvaWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVh
bVJlYWRBc3luYyhHSW5wdXRTdHJlYW0qIGlucHV0U3RyZWFtLCB2b2lkKiBidWZmZXIsIGdzaXpl
IGNvdW50LCBpbnQgLypwcmlvcml0eSovLCBHQ2FuY2VsbGFibGUqIGNhbmNlbGxhYmxlLCBHQXN5
bmNSZWFkeUNhbGxiYWNrIGNhbGxiYWNrLCBncG9pbnRlciB1c2VyRGF0YSkKIHsKKyAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOwogICAgIFdlYktpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW0qIHN0
cmVhbSA9IFdFQktJVF9TT1VQX1JFUVVFU1RfSU5QVVRfU1RSRUFNKGlucHV0U3RyZWFtKTsKICAg
ICBHUmVmUHRyPEdUYXNrPiB0YXNrID0gYWRvcHRHUmVmKGdfdGFza19uZXcoc3RyZWFtLCBjYW5j
ZWxsYWJsZSwgY2FsbGJhY2ssIHVzZXJEYXRhKSk7CiAKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihz
dHJlYW0tPnByaXYtPnJlYWRMb2NrKTsKLQogICAgIGlmICghd2Via2l0U291cFJlcXVlc3RJbnB1
dFN0cmVhbUhhc0RhdGFUb1JlYWQoc3RyZWFtKSAmJiAhd2Via2l0U291cFJlcXVlc3RJbnB1dFN0
cmVhbUlzV2FpdGluZ0ZvckRhdGEoc3RyZWFtKSkgewogICAgICAgICBnX3Rhc2tfcmV0dXJuX2lu
dCh0YXNrLmdldCgpLCAwKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTQ5LDExICsxNDYsMTEgQEAg
R0lucHV0U3RyZWFtKiB3ZWJraXRTb3VwUmVxdWVzdElucHV0U3RyZWFtTmV3KHVpbnQ2NF90IGNv
bnRlbnRMZW5ndGgpCiAKIHZvaWQgd2Via2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbUFkZERhdGEo
V2ViS2l0U291cFJlcXVlc3RJbnB1dFN0cmVhbSogc3RyZWFtLCBjb25zdCB2b2lkKiBkYXRhLCBz
aXplX3QgZGF0YUxlbmd0aCkKIHsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworCiAgICAg
aWYgKHdlYmtpdFNvdXBSZXF1ZXN0SW5wdXRTdHJlYW1GaW5pc2hlZChzdHJlYW0pKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBMb2NrSG9sZGVyIGxvY2tlcihzdHJlYW0tPnByaXYtPnJlYWRMb2Nr
KTsKLQogICAgIGlmIChkYXRhTGVuZ3RoKSB7CiAgICAgICAgIC8vIFRydW5jYXRlIHRoZSBkYXRh
TGVuZ3RoIHRvIHRoZSBjb250ZW50TGVuZ3RoIGlmIGl0J3Mga25vd24uCiAgICAgICAgIGlmIChz
dHJlYW0tPnByaXYtPmNvbnRlbnRMZW5ndGggJiYgc3RyZWFtLT5wcml2LT5ieXRlc1JlY2VpdmVk
ICsgZGF0YUxlbmd0aCA+IHN0cmVhbS0+cHJpdi0+Y29udGVudExlbmd0aCkK
</data>
<flag name="review"
          id="322563"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>