<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ruby.git/test/fiber/test_thread.rb, branch v3_4_9</title>
<subtitle>The Ruby Programming Language</subtitle>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/'/>
<entry>
<title>Wait for sleepr thread to finish not to leak</title>
<updated>2023-07-13T04:12:52+00:00</updated>
<author>
<name>Nobuyoshi Nakada</name>
<email>nobu@ruby-lang.org</email>
</author>
<published>2023-07-13T04:12:52+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=5dd969892f16fa4683edd9734564154411e3fdbc'/>
<id>5dd969892f16fa4683edd9734564154411e3fdbc</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix `Thread#join(timeout)` when running inside the fiber scheduler. (#7903)</title>
<updated>2023-06-03T03:41:36+00:00</updated>
<author>
<name>Samuel Williams</name>
<email>samuel.williams@oriontransfer.co.nz</email>
</author>
<published>2023-06-03T03:41:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=0402193723647b8c4f57b1453fe2192ad2788d12'/>
<id>0402193723647b8c4f57b1453fe2192ad2788d12</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix potential hang when joining threads.</title>
<updated>2021-08-03T10:23:48+00:00</updated>
<author>
<name>Samuel Williams</name>
<email>samuel.williams@oriontransfer.co.nz</email>
</author>
<published>2021-07-28T07:55:55+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=2d4f29e77e883c29e35417799f8001b8046cde03'/>
<id>2d4f29e77e883c29e35417799f8001b8046cde03</id>
<content type='text'>
If the thread termination invokes user code after `th-&gt;status` becomes
`THREAD_KILLED`, and the user unblock function causes that `th-&gt;status` to
become something else (e.g. `THREAD_RUNNING`), threads waiting in
`thread_join_sleep` will hang forever. We move the unblock function call
to before the thread status is updated, and allow threads to join as soon
as `th-&gt;value` becomes defined.

This reverts commit 6505c77501f1924571b2fe620c5c7b31ede0cd22.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If the thread termination invokes user code after `th-&gt;status` becomes
`THREAD_KILLED`, and the user unblock function causes that `th-&gt;status` to
become something else (e.g. `THREAD_RUNNING`), threads waiting in
`thread_join_sleep` will hang forever. We move the unblock function call
to before the thread status is updated, and allow threads to join as soon
as `th-&gt;value` becomes defined.

This reverts commit 6505c77501f1924571b2fe620c5c7b31ede0cd22.
</pre>
</div>
</content>
</entry>
<entry>
<title>Revert "Fix potential hang when joining threads."</title>
<updated>2021-07-28T02:05:36+00:00</updated>
<author>
<name>Yusuke Endoh</name>
<email>mame@ruby-lang.org</email>
</author>
<published>2021-07-28T02:05:36+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=6505c77501f1924571b2fe620c5c7b31ede0cd22'/>
<id>6505c77501f1924571b2fe620c5c7b31ede0cd22</id>
<content type='text'>
This reverts commit 13f8521c630a15c87398dee0763e95f59c032a94.

http://rubyci.s3.amazonaws.com/solaris11-gcc/ruby-master/log/20210727T230009Z.fail.html.gz
http://rubyci.s3.amazonaws.com/solaris11-sunc/ruby-master/log/20210728T000009Z.fail.html.gz

This revert is to confirm whether the commit is the cause.
If the failures consistently occur after this revert, I'll
reintroduce the commit.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commit 13f8521c630a15c87398dee0763e95f59c032a94.

http://rubyci.s3.amazonaws.com/solaris11-gcc/ruby-master/log/20210727T230009Z.fail.html.gz
http://rubyci.s3.amazonaws.com/solaris11-sunc/ruby-master/log/20210728T000009Z.fail.html.gz

This revert is to confirm whether the commit is the cause.
If the failures consistently occur after this revert, I'll
reintroduce the commit.
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix potential hang when joining threads.</title>
<updated>2021-07-27T06:23:30+00:00</updated>
<author>
<name>Samuel Williams</name>
<email>samuel.williams@oriontransfer.co.nz</email>
</author>
<published>2021-07-19T07:21:46+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=13f8521c630a15c87398dee0763e95f59c032a94'/>
<id>13f8521c630a15c87398dee0763e95f59c032a94</id>
<content type='text'>
If the thread termination invokes user code after `th-&gt;status` becomes
`THREAD_KILLED`, and the user unblock function causes that `th-&gt;status` to
become something else (e.g. `THREAD_RUNNING`), threads waiting in
`thread_join_sleep` will hang forever. We move the unblock function call
to before the thread status is updated, and allow threads to join as soon
as `th-&gt;value` becomes defined.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If the thread termination invokes user code after `th-&gt;status` becomes
`THREAD_KILLED`, and the user unblock function causes that `th-&gt;status` to
become something else (e.g. `THREAD_RUNNING`), threads waiting in
`thread_join_sleep` will hang forever. We move the unblock function call
to before the thread status is updated, and allow threads to join as soon
as `th-&gt;value` becomes defined.
</pre>
</div>
</content>
</entry>
<entry>
<title>Suppress exception report in inner thread</title>
<updated>2021-06-14T15:03:05+00:00</updated>
<author>
<name>Nobuyoshi Nakada</name>
<email>nobu@ruby-lang.org</email>
</author>
<published>2021-06-14T15:03:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=edbe0e224c2594b7a7b055f0986cbfd690d754d5'/>
<id>edbe0e224c2594b7a7b055f0986cbfd690d754d5</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Close leaked file descriptors</title>
<updated>2021-06-14T15:02:15+00:00</updated>
<author>
<name>Nobuyoshi Nakada</name>
<email>nobu@ruby-lang.org</email>
</author>
<published>2021-06-14T15:02:15+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=57eaa07ba6c1ee958c16d5c451e2dceb2208edf1'/>
<id>57eaa07ba6c1ee958c16d5c451e2dceb2208edf1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Wake up join list within thread EC context. (#4471)</title>
<updated>2021-06-14T05:56:53+00:00</updated>
<author>
<name>Samuel Williams</name>
<email>samuel.williams@oriontransfer.co.nz</email>
</author>
<published>2021-06-14T05:56:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=050a89543952a2c9e7c9bc938f4fdb538f6c9278'/>
<id>050a89543952a2c9e7c9bc938f4fdb538f6c9278</id>
<content type='text'>
* Wake up join list within thread EC context.

* Consume items from join list so that they are not re-executed.

If `rb_fiber_scheduler_unblock` raises an exception, it can result in a
segfault if `rb_threadptr_join_list_wakeup` is not within a valid EC. This
change moves `rb_threadptr_join_list_wakeup` into the thread's top level EC
which initially caused an infinite loop because on exception will retry. We
explicitly remove items from the thread's join list to avoid this situation.

* Verify the required scheduler interface.

* Test several scheduler hooks methods with broken `unblock` implementation.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Wake up join list within thread EC context.

* Consume items from join list so that they are not re-executed.

If `rb_fiber_scheduler_unblock` raises an exception, it can result in a
segfault if `rb_threadptr_join_list_wakeup` is not within a valid EC. This
change moves `rb_threadptr_join_list_wakeup` into the thread's top level EC
which initially caused an infinite loop because on exception will retry. We
explicitly remove items from the thread's join list to avoid this situation.

* Verify the required scheduler interface.

* Test several scheduler hooks methods with broken `unblock` implementation.</pre>
</div>
</content>
</entry>
<entry>
<title>Expose scheduler as public interface &amp; bug fixes. (#3945)</title>
<updated>2021-02-09T06:39:56+00:00</updated>
<author>
<name>Samuel Williams</name>
<email>samuel.williams@oriontransfer.co.nz</email>
</author>
<published>2021-02-09T06:39:56+00:00</published>
<link rel='alternate' type='text/html' href='https://git.ruby-lang.org/ruby.git/commit/?id=5f69a7f60467fa58c2f998daffab43e118bff36c'/>
<id>5f69a7f60467fa58c2f998daffab43e118bff36c</id>
<content type='text'>
* Rename `rb_scheduler` to `rb_fiber_scheduler`.

* Use public interface if available.

* Use `rb_check_funcall` where possible.

* Don't use `unblock` unless the fiber was non-blocking.</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* Rename `rb_scheduler` to `rb_fiber_scheduler`.

* Use public interface if available.

* Use `rb_check_funcall` where possible.

* Don't use `unblock` unless the fiber was non-blocking.</pre>
</div>
</content>
</entry>
</feed>
