<?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>138971</bug_id>
          
          <creation_ts>2014-11-21 10:38:37 -0800</creation_ts>
          <short_desc>[iOS] allocate volume view on the main thread</short_desc>
          <delta_ts>2015-06-18 10:00:12 -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>Media</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=142970</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>danielo</cc>
    
    <cc>danny.zlobinsky</cc>
    
    <cc>glenn</cc>
    
    <cc>icloutier</cc>
    
    <cc>jer.noble</cc>
    
    <cc>philipj</cc>
    
    <cc>sergio</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1050489</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-11-21 10:38:37 -0800</bug_when>
    <thetext>The volume view used to check for wireless target availability should be allocated on the main thread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050508</commentid>
    <comment_count>1</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-11-21 11:04:34 -0800</bug_when>
    <thetext>rdar://problem/18016958</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050509</commentid>
    <comment_count>2</comment_count>
      <attachid>242053</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-11-21 11:07:51 -0800</bug_when>
    <thetext>Created attachment 242053
Proposed patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050551</commentid>
    <comment_count>3</comment_count>
      <attachid>242053</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-21 13:22:35 -0800</bug_when>
    <thetext>Comment on attachment 242053
Proposed patch.

Clearing flags on attachment: 242053

Committed r176471: &lt;http://trac.webkit.org/changeset/176471&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050552</commentid>
    <comment_count>4</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-11-21 13:22:42 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1050947</commentid>
    <comment_count>5</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-11-24 20:42:09 -0800</bug_when>
    <thetext>*** Bug 138961 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051170</commentid>
    <comment_count>6</comment_count>
    <who name="Daniel">danielo</who>
    <bug_when>2014-11-27 07:07:21 -0800</bug_when>
    <thetext>This fix is not good. It deadlocks the app if the main thread is doing something related to the web view, because at the time of .

We&apos;re getting this freeze quite often, and get different stacks in the main thread, ending with:

thread #1: tid = 0x10919d, 0x33473ba8 libsystem_kernel.dylib`__psynch_mutexwait + 24, queue = &apos;com.apple.main-thread&apos;, stop reason = signal SIGSTOP
  * frame #0: 0x33473ba8 libsystem_kernel.dylib`__psynch_mutexwait + 24
    frame #1: 0x334f103a libsystem_pthread.dylib`_pthread_mutex_lock + 394
    frame #2: 0x307fdf20 WebCore`_WebTryThreadLock(bool) + 44
    frame #3: 0x307fe736 WebCore`WebThreadLock + 82

While the WebThread will wait on dispatch_sync(dispatch_get_main_queue(), ...). The web thread is running, and locked so the main thread can&apos;t proceed to lock. The web thread can&apos;t proceed, with dispatch_sync, because the main thread is busy.

Try using dispatch_async instead. This should do the trick if the _volumeView is not going to be used immediately in the WebThread.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1051736</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2014-12-01 21:43:09 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; This fix is not good. It deadlocks the app if the main thread is doing
&gt; something related to the web view, because at the time of .
&gt; 
&gt; We&apos;re getting this freeze quite often, and get different stacks in the main
&gt; thread, ending with:
&gt; 
&gt; thread #1: tid = 0x10919d, 0x33473ba8
&gt; libsystem_kernel.dylib`__psynch_mutexwait + 24, queue =
&gt; &apos;com.apple.main-thread&apos;, stop reason = signal SIGSTOP
&gt;   * frame #0: 0x33473ba8 libsystem_kernel.dylib`__psynch_mutexwait + 24
&gt;     frame #1: 0x334f103a libsystem_pthread.dylib`_pthread_mutex_lock + 394
&gt;     frame #2: 0x307fdf20 WebCore`_WebTryThreadLock(bool) + 44
&gt;     frame #3: 0x307fe736 WebCore`WebThreadLock + 82
&gt; 
&gt; While the WebThread will wait on dispatch_sync(dispatch_get_main_queue(),
&gt; ...). The web thread is running, and locked so the main thread can&apos;t proceed
&gt; to lock. The web thread can&apos;t proceed, with dispatch_sync, because the main
&gt; thread is busy.
&gt; 
&gt; Try using dispatch_async instead. This should do the trick if the
&gt; _volumeView is not going to be used immediately in the WebThread.

Thank you for the information. 

Please feel free to submit patches if you have suggestions for changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1079426</commentid>
    <comment_count>8</comment_count>
    <who name="Ian">icloutier</who>
    <bug_when>2015-03-23 14:19:05 -0700</bug_when>
    <thetext>UIWebView frequently crashes on iOS because of this bug and the proposed patch does not fix the problem.
A reproducible example has been provided with rdar://problem/18609955

The allocateVolumeView method checks for isMainThread() which is implemented as: (isWebThread() || pthread_main_np())
Since this is called from the web thread, isMainThread returns true.

Also, MPVolumeView gets allocated twice in the case where isMainThread() is false. Once on the main thread and then another time on the background thread (which is what we are trying to avoid here).</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>242053</attachid>
            <date>2014-11-21 11:07:51 -0800</date>
            <delta_ts>2014-11-21 13:22:35 -0800</delta_ts>
            <desc>Proposed patch.</desc>
            <filename>volume_view_patch_1.txt</filename>
            <type>text/plain</type>
            <size>3765</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE3NjQ1MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDE0LTExLTIxICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIFtpT1NdIGFsbG9jYXRl
IHZvbHVtZSB2aWV3IG9uIHRoZSBtYWluIHRocmVhZAorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM4OTcxCisgICAgICAgIHJkYXI6Ly9wcm9ibGVtLzE4
MDE2OTU4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBwbGF0Zm9ybS9hdWRpby9pb3MvTWVkaWFTZXNzaW9uTWFuYWdlcklPUy5tbToKKyAgICAgICAg
KC1bV2ViTWVkaWFTZXNzaW9uSGVscGVyIGFsbG9jYXRlVm9sdW1lVmlld10pOiBOZXcsIGRpc3Bh
dGNoIHRvIHRoZSBtYWluIHRocmVhZCBpZiBuZWNlc3NhcnkgYmVmb3JlIGFsbG9jYXRpbmcKKyAg
ICAgICAgICAgIHRoZSB2b2x1bWUgdmlldy4KKyAgICAgICAgKC1bV2ViTWVkaWFTZXNzaW9uSGVs
cGVyIGluaXRXaXRoQ2FsbGJhY2s6XSk6IENhbGwgYWxsb2NhdGVWb2x1bWVWaWV3LgorCiAyMDE0
LTExLTIxICBEYW5pZWwgQmF0ZXMgIDxkYWJhdGVzQGFwcGxlLmNvbT4KIAogICAgICAgICBBdHRl
bXB0IHRvIGZpeCB0aGUgaW50ZXJuYWwgQXBwbGUgTWF2ZXJpY2tzIGJ1aWxkIGFmdGVyIDxodHRw
czovL3RyYWMud2Via2l0Lm9yZy9jaGFuZ2VzZXQvMTc2NDQ4PgpJbmRleDogU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vaW9zL01lZGlhU2Vzc2lvbk1hbmFnZXJJT1MubW0KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vaW9zL01lZGlhU2Vzc2lvbk1hbmFn
ZXJJT1MubW0JKHJldmlzaW9uIDE3NjI1OCkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2lvcy9NZWRpYVNlc3Npb25NYW5hZ2VySU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05NSw2
ICs5NSw3IEBAIEBpbnRlcmZhY2UgV2ViTWVkaWFTZXNzaW9uSGVscGVyIDogTlNPYmoKIH0KIAog
LSAoaWQpaW5pdFdpdGhDYWxsYmFjazooTWVkaWFTZXNzaW9uTWFuYWdlcmlPUyopY2FsbGJhY2s7
CistICh2b2lkKWFsbG9jYXRlVm9sdW1lVmlldzsKIC0gKHZvaWQpY2xlYXJDYWxsYmFjazsKIC0g
KHZvaWQpaW50ZXJydXB0aW9uOihOU05vdGlmaWNhdGlvbiAqKW5vdGlmaWNhdGlvbjsKIC0gKHZv
aWQpYXBwbGljYXRpb25XaWxsRW50ZXJGb3JlZ3JvdW5kOihOU05vdGlmaWNhdGlvbiAqKW5vdGlm
aWNhdGlvbjsKQEAgLTIyOCw2ICsyMjksMjMgQEAgYm9vbCBNZWRpYVNlc3Npb25NYW5hZ2VyaU9T
OjpzZXNzaW9uQ2FuTAogCiBAaW1wbGVtZW50YXRpb24gV2ViTWVkaWFTZXNzaW9uSGVscGVyCiAK
Ky0gKHZvaWQpYWxsb2NhdGVWb2x1bWVWaWV3Cit7CisgICAgaWYgKCFpc01haW5UaHJlYWQoKSkg
eworICAgICAgICAvLyBDYWxsIHN5bmNocm9ub3VzbHkgdG8gdGhlIG1haW4gdGhyZWFkIHNvIHRo
YXQgX3ZvbHVtZVZpZXcgd2lsbCBiZSBjb21wbGV0ZWx5IHNldHVwIGJlZm9yZSB0aGUgY29uc3Ry
dWN0b3IgY29tcGxldGVzCisgICAgICAgIC8vIGJlY2F1c2UgaGFzV2lyZWxlc3NUYXJnZXRzQXZh
aWxhYmxlIGlzIHN5bmNocm9ub3VzIGFuZCBjYW4gYmUgY2FsbGVkIG9uIHRoZSBXZWJUaHJlYWQu
CisgICAgICAgIFJldGFpblB0cjxXZWJNZWRpYVNlc3Npb25IZWxwZXI+IHN0cm9uZ1NlbGYgPSBz
ZWxmOworICAgICAgICBkaXNwYXRjaF9zeW5jKGRpc3BhdGNoX2dldF9tYWluX3F1ZXVlKCksIFtz
dHJvbmdTZWxmXSgpIHsKKyAgICAgICAgICAgIFtzdHJvbmdTZWxmIGFsbG9jYXRlVm9sdW1lVmll
d107CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0pOworICAgIH0KKworICAgIF92b2x1
bWVWaWV3ID0gYWRvcHROUyhbW2dldE1QVm9sdW1lVmlld0NsYXNzKCkgYWxsb2NdIGluaXRdKTsK
KyAgICBbW05TTm90aWZpY2F0aW9uQ2VudGVyIGRlZmF1bHRDZW50ZXJdIGFkZE9ic2VydmVyOnNl
bGYgc2VsZWN0b3I6QHNlbGVjdG9yKHdpcmVsZXNzUm91dGVzQXZhaWxhYmxlRGlkQ2hhbmdlOikg
bmFtZTpNUFZvbHVtZVZpZXdXaXJlbGVzc1JvdXRlc0F2YWlsYWJsZURpZENoYW5nZU5vdGlmaWNh
dGlvbiBvYmplY3Q6X3ZvbHVtZVZpZXcuZ2V0KCldOworICAgIAorfQorCiAtIChpZClpbml0V2l0
aENhbGxiYWNrOihNZWRpYVNlc3Npb25NYW5hZ2VyaU9TKiljYWxsYmFjawogewogICAgIExPRyhN
ZWRpYSwgIi1bV2ViTWVkaWFTZXNzaW9uSGVscGVyIGluaXRXaXRoQ2FsbGJhY2tdIik7CkBAIC0y
MzYsNyArMjU0LDYgQEAgLSAoaWQpaW5pdFdpdGhDYWxsYmFjazooTWVkaWFTZXNzaW9uTWFuYQog
ICAgICAgICByZXR1cm4gbmlsOwogICAgIAogICAgIF9jYWxsYmFjayA9IGNhbGxiYWNrOwotICAg
IF92b2x1bWVWaWV3ID0gYWRvcHROUyhbW2dldE1QVm9sdW1lVmlld0NsYXNzKCkgYWxsb2NdIGlu
aXRdKTsKIAogICAgIE5TTm90aWZpY2F0aW9uQ2VudGVyICpjZW50ZXIgPSBbTlNOb3RpZmljYXRp
b25DZW50ZXIgZGVmYXVsdENlbnRlcl07CiAgICAgW2NlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNl
bGVjdG9yOkBzZWxlY3RvcihpbnRlcnJ1cHRpb246KSBuYW1lOkFWQXVkaW9TZXNzaW9uSW50ZXJy
dXB0aW9uTm90aWZpY2F0aW9uIG9iamVjdDpbQVZBdWRpb1Nlc3Npb24gc2hhcmVkSW5zdGFuY2Vd
XTsKQEAgLTI0Nyw3ICsyNjQsOCBAQCAtIChpZClpbml0V2l0aENhbGxiYWNrOihNZWRpYVNlc3Np
b25NYW5hCiAgICAgW2NlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3Rvcihh
cHBsaWNhdGlvbkRpZEJlY29tZUFjdGl2ZTopIG5hbWU6V2ViVUlBcHBsaWNhdGlvbkRpZEJlY29t
ZUFjdGl2ZU5vdGlmaWNhdGlvbiBvYmplY3Q6bmlsXTsKICAgICBbY2VudGVyIGFkZE9ic2VydmVy
OnNlbGYgc2VsZWN0b3I6QHNlbGVjdG9yKGFwcGxpY2F0aW9uV2lsbFJlc2lnbkFjdGl2ZTopIG5h
bWU6VUlBcHBsaWNhdGlvbldpbGxSZXNpZ25BY3RpdmVOb3RpZmljYXRpb24gb2JqZWN0Om5pbF07
CiAgICAgW2NlbnRlciBhZGRPYnNlcnZlcjpzZWxmIHNlbGVjdG9yOkBzZWxlY3RvcihhcHBsaWNh
dGlvbldpbGxSZXNpZ25BY3RpdmU6KSBuYW1lOldlYlVJQXBwbGljYXRpb25XaWxsUmVzaWduQWN0
aXZlTm90aWZpY2F0aW9uIG9iamVjdDpuaWxdOwotICAgIFtjZW50ZXIgYWRkT2JzZXJ2ZXI6c2Vs
ZiBzZWxlY3RvcjpAc2VsZWN0b3Iod2lyZWxlc3NSb3V0ZXNBdmFpbGFibGVEaWRDaGFuZ2U6KSBu
YW1lOk1QVm9sdW1lVmlld1dpcmVsZXNzUm91dGVzQXZhaWxhYmxlRGlkQ2hhbmdlTm90aWZpY2F0
aW9uIG9iamVjdDpfdm9sdW1lVmlldy5nZXQoKV07CisKKyAgICBbc2VsZiBhbGxvY2F0ZVZvbHVt
ZVZpZXddOwogCiAgICAgLy8gTm93IHBsYXlpbmcgd29uJ3Qgd29yayB1bmxlc3Mgd2UgdHVybiBv
biB0aGUgZGVsaXZlcnkgb2YgcmVtb3RlIGNvbnRyb2wgZXZlbnRzLgogICAgIFtbVUlBcHBsaWNh
dGlvbiBzaGFyZWRBcHBsaWNhdGlvbl0gYmVnaW5SZWNlaXZpbmdSZW1vdGVDb250cm9sRXZlbnRz
XTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>