<?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>248533</bug_id>
          
          <creation_ts>2022-11-30 06:47:05 -0800</creation_ts>
          <short_desc>[GTK][WPE][run-webkit-tests] layout tests are deadlocking when a test crashes due to unhandled BrokenPipeError</short_desc>
          <delta_ts>2022-12-07 20:39:37 -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>Tools / Tests</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://bugs.webkit.org/show_bug.cgi?id=247843</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=248904</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="Carlos Alberto Lopez Perez">clopez</reporter>
          <assigned_to name="Carlos Alberto Lopez Perez">clopez</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>dpino</cc>
    
    <cc>lmoura</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1915599</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-11-30 06:47:05 -0800</bug_when>
    <thetext>We are having lots of deadlocks in the test runs recently.

1) Check the EWS queue:

https://ews-build.webkit.org/#/builders/35

Many of them are ending with &quot;Unexpected infrastructure issue: The layout-test run with change generated no list of results and exited with error, retrying with the hope it was a random infrastructure error.&quot;
that is caused because the layout test steps deadlocks and the timeout of the step triggers

2) Same for the post-commit bots. Example WPE release tests:

https://build.webkit.org/#/builders/40

The layout test is not finishing, deadlocks


I have been debugging this and if you run the tests with only one worker (NUMBER_OF_PROCESSORS=1) instead of the deadlock you get this backtrace:


BrokenPipeError raised: [Errno 32] Broken pipe
Traceback (most recent call last):
  File &quot;/app/webkit/Tools/Scripts/webkitpy/port/server_process.py&quot;, line 186, in write
    self._proc.stdin.flush()
BrokenPipeError: [Errno 32] Broken pipe

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py&quot;, line 92, in main
    run_details = run(port, options, args, stderr)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/run_webkit_tests.py&quot;, line 508, in run
    run_details = manager.run(args)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py&quot;, line 413, in run
    temp_initial_results, temp_retry_results, temp_enabled_pixel_tests_in_retry = self._run_test_subset(test_inputs, device_type=device_type)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py&quot;, line 487, in _run_test_subset
    initial_results = self._run_tests(test_inputs, self._options.repeat_each, self._options.iterations, int(self._options.child_processes), retrying=False, device_type=device_type)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/manager.py&quot;, line 570, in _run_tests
    return self._runner.run_tests(self._expectations[device_type], new_test_inputs, num_workers, retrying, device_type)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py&quot;, line 176, in run_tests
    pool.do(
  File &quot;/app/webkit/Tools/Scripts/libraries/webkitcorepy/webkitcorepy/task_pool.py&quot;, line 405, in do
    result = function(*args, **kwargs)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py&quot;, line 77, in run_shard
    return Worker.instance.run_tests(shard)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py&quot;, line 319, in run_tests
    Worker.instance.run_test(input, shard.name)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py&quot;, line 347, in run_test
    result = self._run_test_with_or_without_timeout(test_input, test_timeout_sec, stop_when_done)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py&quot;, line 404, in _run_test_with_or_without_timeout
    return self._run_test_in_this_thread(test_input, stop_when_done)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py&quot;, line 490, in _run_test_in_this_thread
    return self._run_single_test(self._driver, test_input, stop_when_done)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/layout_test_runner.py&quot;, line 493, in _run_single_test
    return single_test_runner.run_single_test(
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py&quot;, line 48, in run_single_test
    return runner.run()
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py&quot;, line 128, in run
    return self._run_compare_test()
  File &quot;/app/webkit/Tools/Scripts/webkitpy/layout_tests/controllers/single_test_runner.py&quot;, line 131, in _run_compare_test
    driver_output = self._driver.run_test(self._driver_input(), self._stop_when_done)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/port/driver.py&quot;, line 863, in run_test
    return self._driver.run_test(driver_input, stop_when_done)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/port/driver.py&quot;, line 233, in run_test
    self._server_process.write(command)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/port/server_process.py&quot;, line 188, in write
    self.stop(0.0)
  File &quot;/app/webkit/Tools/Scripts/webkitpy/port/server_process.py&quot;, line 403, in stop
    self._proc.stdin.close()
BrokenPipeError: [Errno 32] Broken pipe



The issue seems to be we are not handling correctly the BrokenPipeError() when a test crashes.

Not sure what change lead to this but maybe it was a Python upgrade in the Flatpak SDK
We are running Python 3.10.6 right now</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1915601</commentid>
    <comment_count>1</comment_count>
    <who name="Carlos Alberto Lopez Perez">clopez</who>
    <bug_when>2022-11-30 07:01:23 -0800</bug_when>
    <thetext>Pull request: https://github.com/WebKit/WebKit/pull/6970</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1915644</commentid>
    <comment_count>2</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-11-30 10:59:26 -0800</bug_when>
    <thetext>Committed 257186@main (025ed0ce9ed6): &lt;https://commits.webkit.org/257186@main&gt;

Reviewed commits have been landed. Closing PR #6970 and removing active labels.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1915646</commentid>
    <comment_count>3</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-11-30 11:00:20 -0800</bug_when>
    <thetext>&lt;rdar://problem/102820603&gt;</thetext>
  </long_desc>
      
      

    </bug>

</bugzilla>