Ruby Issue Tracking System: Issueshttps://bugs.ruby-lang.org/https://bugs.ruby-lang.org/favicon.ico?17113305112024-03-29T01:55:10ZRuby Issue Tracking System
Redmine Ruby master - Bug #20401 (Open): Duplicated when clause warning line numberhttps://bugs.ruby-lang.org/issues/204012024-03-29T01:55:10Zkddnewton (Kevin Newton)kddnewton@gmail.com
<p>When you have a duplicated when clause, you get a warning for it. For example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">case</span> <span class="n">foo</span>
<span class="k">when</span> <span class="ss">:bar</span>
<span class="k">when</span> <span class="ss">:baz</span>
<span class="k">when</span> <span class="ss">:bar</span>
<span class="k">end</span>
</code></pre>
<p>you get <code>warning: duplicated `when' clause with line 2 is ignored</code>.</p>
<p>But the when clause that is ignored is the one on line 4, not line 2. It seems like it's warning for the wrong line.</p> Ruby master - Bug #20399 (Open): Ripper doesn't respect implicit -xhttps://bugs.ruby-lang.org/issues/203992024-03-28T14:27:26Zkddnewton (Kevin Newton)kddnewton@gmail.com
<p>For the given script:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1">#!/bin/sh</span>
<span class="c1"># -*- ruby -*-</span>
<span class="nb">exec</span> <span class="s2">"${RUBY-ruby}"</span> <span class="s2">"-x"</span> <span class="s2">"$0"</span> <span class="s2">"$@"</span> <span class="o">&&</span> <span class="p">[</span> <span class="p">]</span> <span class="k">if</span> <span class="kp">false</span>
<span class="c1">#!ruby</span>
<span class="c1"># This needs ruby 2.0, Subversion and Git.</span>
<span class="c1"># As a Ruby committer, run this in an SVN repository</span>
<span class="c1"># to commit a change.</span>
<span class="nb">require</span> <span class="s1">'tempfile'</span>
<span class="nb">require</span> <span class="s1">'net/http'</span>
</code></pre>
<p>I would expect all of the various Ripper APIs (<code>lex</code>, <code>sexp</code>, <code>sexp_raw</code>, <code>new.parse</code>, etc.) to start parsing on line 4, because that's what the parser does. Instead, it starts parsing on line 1.</p> Ruby master - Bug #20397 (Open): The nkf license in LEGAL file seems to be obsoletehttps://bugs.ruby-lang.org/issues/203972024-03-27T17:22:36Zvo.x (Vit Ondruch)v.ondruch@tiscali.cz
<p>The LEGAL file seems to contain <a href="https://github.com/ruby/ruby/blob/a69f0047cb489c136001937442c1d2ffd8ea1dd7/LEGAL?plain=1#L730-L746" class="external">obsolete information</a> about nkf license.</p>
<p>It seems that nkf indeed use such license, but in upstream, it was first changed to <a href="https://github.com/nurse/nkf/commit/c12280757bfb275d6f9e6b0bf6293a28b060e77b" class="external">MIT</a> and then immediately to <a href="https://github.com/nurse/nkf/commit/2ed3e1c270f1deb9487f7bc7d7586030fe7dabc5" class="external">zlib</a> license.</p>
<p>Ruby has picked up that change with <a class="changeset" title="* ext/nkf/nkf-utf8/nkf.c: Update nkf to 2.0.9. revert -s meaning as Shift_JIS, etc. git-svn-id..." href="https://bugs.ruby-lang.org/projects/ruby-master/repository/git/revisions/13313688b243882aff7815598ddd9fcbae69bc17">git|13313688b243882aff7815598ddd9fcbae69bc17</a></p>
<p>Maybe <a class="user active user-mention" href="https://bugs.ruby-lang.org/users/5">@naruse (Yui NARUSE)</a> can comment about this.</p> Ruby master - Feature #20396 (Open): ObjectSpace.dump_all(string_value: false): skip dumping the ...https://bugs.ruby-lang.org/issues/203962024-03-27T08:29:34Zbyroot (Jean Boussier)byroot@ruby-lang.org
<p><code>ObjectSpace.dump_all</code> is a very useful method to debug memory leaks and such, hence is frequently needed in production. But since all the 7bit strings content is included in the dump, it incur the risk of leaking personal data, or secrets.</p>
<p>Also, in many case the strings content isn't that helpful and is just making the dump much bigger for no good reason. And only pure-ASCII strings are dumped this way, which means all the tools that process these dumps should already be compatible with a dump without any string content.</p>
<a name="Feature"></a>
<h3 >Feature<a href="#Feature" class="wiki-anchor">¶</a></h3>
<p>I propose to add another optional parameter to <code>dump_all</code>: <code>string_value: false</code>. When passed, no String content is ever dumped regardless of its coderange.</p>
<p>Implementation: <a href="https://github.com/ruby/ruby/pull/10382" class="external">https://github.com/ruby/ruby/pull/10382</a></p>
<p>cc <a class="user active user-mention" href="https://bugs.ruby-lang.org/users/1677">@zzak (zzak _)</a></p> Ruby master - Bug #20395 (Open): Invalid license note in vsnprintf.chttps://bugs.ruby-lang.org/issues/203952024-03-26T11:19:39Zvo.x (Vit Ondruch)v.ondruch@tiscali.cz
<p>I am looking into Ruby licenses and I stumble upon vsnprintf.c, namely about these lines:</p>
<pre><code>/*
* IMPORTANT NOTE:
* --------------
* From ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change
* paragraph 3 above is now null and void.
*/
</code></pre>
<p>I doubt the note is valid since <a class="changeset" title="* missing/crypt.c: replaced with 4.4BSD version. * missing/erf.c: ditto. * missing/vsnprintf.c:..." href="https://bugs.ruby-lang.org/projects/ruby-master/repository/git/revisions/626f1ee196fe06514d66771ff0e3f82d7686af25">git|626f1ee196fe06514d66771ff0e3f82d7686af25</a>, which actually removes the 3rd clause, while the (broken) URL refers to "4bsd". Can somebody please review? The note from the URL can be likely viewed e.g. <a href="https://www.freebsd.org/copyright/license/" class="external">here</a></p> Ruby master - Misc #20387 (Open): Meta-ticket for ASAN supporthttps://bugs.ruby-lang.org/issues/203872024-03-22T01:58:03Zkjtsanaktsidis (KJ Tsanaktsidis)kjtsanaktsidis@gmail.com
<p>I was asked to provide a bit of information about the current status of ASAN in CRuby, so I thought I'd open this meta-ticket to track all of the work I've been performing on fixing up address sanitizer support.</p>
<p>So far, I have fixed the following issues related to ASAN support:</p>
<ul>
<li>
<a href="https://bugs.ruby-lang.org/issues/20001" class="external">https://bugs.ruby-lang.org/issues/20001</a> + <a href="https://github.com/ruby/ruby/pull/9505" class="external">https://github.com/ruby/ruby/pull/9505</a>, which dealt with two main themes:
<ul>
<li>Pushing the logic for capturing the start of the machine stack much closer to the top of the call stack, so that VALUEs stored close to the top of the machine stack get marked properly</li>
<li>Marking VALUEs stored on ASAN fake stacks during machine stack marking</li>
</ul>
</li>
<li>
<a href="https://bugs.ruby-lang.org/issues/20220" class="external">https://bugs.ruby-lang.org/issues/20220</a> + <a href="https://github.com/ruby/ruby/pull/9734" class="external">https://github.com/ruby/ruby/pull/9734</a>, which made M:N threading notify ASAN about stack switches in the same way that fibers do
<ul>
<li>Note: ASAN still doesn't work with M:N threading, but that actually has nothing to do with ASAN; it's because the most recent versions of Clang which are needed for ASAN just don't work with M:N threading either. See <a href="https://bugs.ruby-lang.org/issues/20243" class="external">https://bugs.ruby-lang.org/issues/20243</a> for more info about that.</li>
</ul>
</li>
<li>
<a href="https://bugs.ruby-lang.org/issues/20273" class="external">https://bugs.ruby-lang.org/issues/20273</a> + <a href="https://github.com/ruby/ruby/pull/10012" class="external">https://github.com/ruby/ruby/pull/10012</a>, which disables <code>callcc</code> (and the associated tests) when ASAN is enabled
<ul>
<li>callcc is very rarely used in real code and the way it works is just fundamentally incompatible with ASAN (it performs longjmp's which I think are technically undefined behaviour)</li>
</ul>
</li>
<li>
<a href="https://bugs.ruby-lang.org/issues/20221" class="external">https://bugs.ruby-lang.org/issues/20221</a> + <a href="https://github.com/ruby/ruby/pull/9865" class="external">https://github.com/ruby/ruby/pull/9865</a>, which ignore some global symbols that ASAN defines from the global symbol leak checker</li>
<li>
<a href="https://bugs.ruby-lang.org/issues/20274" class="external">https://bugs.ruby-lang.org/issues/20274</a> + <a href="https://github.com/ruby/ruby/pull/10087" class="external">https://github.com/ruby/ruby/pull/10087</a>, which ignores some false positive tests about memory leaks when ASAN is enabl</li>
<li>I updated the ASAN docs in <a href="https://github.com/ruby/ruby/pull/9922" class="external">https://github.com/ruby/ruby/pull/9922</a> to more closely reflect current reality</li>
</ul>
<p>The current state of things is that, by following the instructions in <a href="https://github.com/ruby/ruby/blob/master/doc/contributing/building_ruby.md" class="external">https://github.com/ruby/ruby/blob/master/doc/contributing/building_ruby.md</a>, you can successfully build Ruby with ASAN enabled, however, the test suite has several failures. I'm currently working on addressing these:</p>
<p>The next step is to merge <a href="https://github.com/ruby/ruby/pull/10122" class="external">https://github.com/ruby/ruby/pull/10122</a> (<a href="https://bugs.ruby-lang.org/issues/20310" class="external">https://bugs.ruby-lang.org/issues/20310</a>) which I plan to do next week (I'm currently away on a work trip). That makes sure that VALUEs stored in ASAN fake stacks from threads other than the currently running thread get marked during GC.</p>
<p>After that, I need to push up patches for the remaining few issues. I mostly have these patches ready to go already; in fact, last week I got the full <code>make check</code> suite passing all tests with ASAN enabled!</p>
<p>Once that's working, I'd like to investigate how ASAN can fit into CRuby's CI matrix somewhere so that it <em>stays</em> working, although I have not thought too deeply about this yet.</p>
<p>I will provide further updates on this ticket so anybody interested can stay in the loop.</p> Ruby master - Feature #20384 (Open): RubyVM::InstructionSequence.{new,compile} use --parser optionhttps://bugs.ruby-lang.org/issues/203842024-03-20T20:27:42Zkddnewton (Kevin Newton)kddnewton@gmail.com
<p>Right now we have <code>RubyVM::InstructionSequence.compile</code> and <code>RubyVM::InstructionSequence.compile_prism</code>. We introduced this API in order to properly test the integration, even when running with <code>--parser=parse.y</code>.</p>
<p>I'm running into issues, however, when tests are comparing between <code>eval</code> and <code>RubyVM::InstructionSequence.new</code>. The latter always uses <code>parse.y</code>, even if <code>--parser=prism</code> is passed on the command line. I would like to change that so that <code>RubyVM::InstructionSequence.{new,compile}</code> respects the <code>--parser</code> option so that it's consistent.</p>
<p>Would this change be okay? It would only impact processes with <code>--parser=prism</code>, so I don't imagine there's any kind of risk here.</p> Ruby master - Feature #20351 (Open): Optionally extract common GC routines into a DSOhttps://bugs.ruby-lang.org/issues/203512024-03-20T14:57:13Zeightbitraptor (Matthew Valentine-House)matt@eightbitraptor.com
<p><a href="https://github.com/ruby/ruby/pull/10302" class="external">Github PR#10302</a></p>
<p><strong>NOTE: This proposal does not change the default build of Ruby, and therefore<br>
should NOT cause performance degradation for Ruby built in the usual way</strong></p>
<p>Our long term goal is to standardise Ruby's GC interface, allowing alternative<br>
GC implementations to be used. This will be acheived by optionally building<br>
Ruby's GC as a shared object; enabling it to be replaced at runtime using using<br>
<code>LD_LIBRARY_PATH</code>. eg:</p>
<pre><code>LD_LIBRARY_PATH=/custom_gc_location ruby script.rb
</code></pre>
<p>This ticket proposes the first step towards this goal. A new experimental build<br>
option, <code>--enable-shared-gc</code>, that will compile and link a module into the built<br>
<code>ruby</code> binary as a shared object - <code>miniruby</code> will remain statically linked to<br>
the existing GC in all cases.</p>
<p>Similar methods of replacing functionality relied on by Ruby have<br>
precedent. <code>jemalloc</code> uses <code>LD_PRELOAD</code> to replace <code>glibc</code> provided <code>malloc</code> and<br>
<code>free</code> at runtime. Although this project will be the first time a technique such<br>
as this has been used to replace core Ruby functionality.</p>
<p>This flag will be marked as experimental & <strong>disabled by default</strong>.</p>
<p><a href="https://github.com/ruby/ruby/pull/10302" class="external">The PR linked from this ticket</a> implements the new build flag, along with the<br>
absolute minimum code required to test it's implementation (a single debug<br>
function).</p>
<p>The implementation of the new build flag is based on the existing implementation<br>
of <code>--enable-shared</code> and behaves as follows:</p>
<ul>
<li>
<p><code>--enable-shared --enable-shared-gc</code></p>
<p>This will build both <code>libruby</code> and <code>librubygc</code> as shared objects. <code>ruby</code> will<br>
link dynamically to both <code>libruby</code> and <code>librubygc</code>.</p>
</li>
<li>
<p><code>--disable-shared --enable-shared-gc</code></p>
<p>This will build <code>librubygc</code> as a shared object, and build <code>libruby</code> as a<br>
static object. <code>libruby</code> will link dynamically to <code>librubygc</code> and <code>ruby</code> will<br>
be statically linked to <code>libruby</code>.</p>
</li>
<li>
<p><code>--disable-shared-gc</code></p>
<p><strong>This will be the default</strong>, and when this case is true the build behaviour<br>
will be exactly the same as it is currently. ie. the existing Ruby GC will be<br>
built and linked statically into either <code>ruby</code> or <code>libruby.so</code> depending on<br>
the state of <code>--enable-shared</code>.</p>
</li>
</ul>
<p>We are aware that there will be a small performance penalty from moving the GC<br>
logic into a shared object, but this is an opt-in configuration turned on at<br>
build time intended to be used by experienced users.</p>
<p>Still, we anticipate that, even with this configuration turned on, this penalty<br>
will be negligible compared the the benefit that being able to use high<br>
performance GC algorithms will provide.</p>
<p>This performance penalty is also the reason that <strong>this feature will be disabled<br>
by default</strong>. There will be no performance impact for anyone compiling Ruby in<br>
the usual manner, without explicitly enabling this feature.</p>
<p>We have discussed this proposal with <a class="user active user-mention" href="https://bugs.ruby-lang.org/users/13">@matz (Yukihiro Matsumoto)</a> who has approved our work on this<br>
project - having a clear abstraction between the VM and the GC will enable us to<br>
iterate faster on improvements to Ruby's existing GC.</p>
<a name="Motivation"></a>
<h2 >Motivation<a href="#Motivation" class="wiki-anchor">¶</a></h2>
<p>In the long term we want to provide the ability to override the current Ruby GC<br>
implementation in order to:</p>
<ul>
<li>Experiment with modern high-performance GC implementations, such as Immix, G1,<br>
LXR etc.</li>
<li>Easily split-test changes to the GC, or the GC tuning, in production without<br>
having to rebuild Ruby</li>
<li>Easily use debug builds of the GC to help identify production problems and<br>
bottlenecks without having to rebuild Ruby</li>
<li>Encourage the academic memory management research community to consider Ruby<br>
for their research (the current work on <a href="https://github.com/mmtk/mmtk-ruby" class="external">MMTk & Ruby</a> is a good example of<br>
this).</li>
</ul>
<a name="Future-work"></a>
<h2 >Future work<a href="#Future-work" class="wiki-anchor">¶</a></h2>
<p>The initial implementation of the shared GC module in this PR is deliberately<br>
small, and exists only for testing the build system integration.</p>
<p>The next steps are to identify boundaries between the GC and the VM and begin to<br>
extract common functionality into this GC wrapper module to serve as the<br>
foundation of our GC interface.</p>
<a name="Whos-working-on-this"></a>
<h2 >Who's working on this<a href="#Whos-working-on-this" class="wiki-anchor">¶</a></h2>
<ul>
<li><a class="user active user-mention" href="https://bugs.ruby-lang.org/users/31800">@eightbitraptor (Matthew Valentine-House)</a></li>
<li><a class="user active user-mention" href="https://bugs.ruby-lang.org/users/73">@tenderlovemaking (Aaron Patterson)</a></li>
<li><a class="user active user-mention" href="https://bugs.ruby-lang.org/users/42491">@peterzhu2118 (Peter Zhu)</a></li>
<li><a class="user active user-mention" href="https://bugs.ruby-lang.org/users/9236">@eileencodes (Eileen Uchitelle)</a></li>
</ul> Ruby master - Feature #20350 (Open): Return chilled string from Symbol#to_shttps://bugs.ruby-lang.org/issues/203502024-03-19T21:06:42ZDan0042 (Daniel DeLorme)
<p>During Ruby 2.7 development there was an attempt to return a frozen string from Symbol#to_s (<a class="issue tracker-2 status-1 priority-4 priority-default" title="Feature: Add a way to request a frozen string from to_s (Open)" href="https://bugs.ruby-lang.org/issues/16150#note-22">#16150#note-22</a>)</p>
<p>This had to be rolled back due to incompatibility, but now we have chilled strings (<a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Enable `frozen_string_literal` by default (Closed)" href="https://bugs.ruby-lang.org/issues/20205">#20205</a>)</p>
<p>Symbol#to_s can safely return a chilled string, giving developers time to fix warnings before switching to a frozen string.</p> Ruby master - Feature #20349 (Open): Pattern Matching - Expose local variable captureshttps://bugs.ruby-lang.org/issues/203492024-03-19T17:58:11Zbaweaver (Brandon Weaver)keystonelemur@gmail.com
<p>In Regular Expressions we have the ability to utilize <code>Regexp.last_match</code> (<a href="https://ruby-doc.org/3.2.2/Regexp.html#method-c-last_match" class="external">link</a>) to access the most recent match data from a regular expression match. I would like to propose that we have similar functionality for pattern matching:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s2">"rubocop"</span>
<span class="k">def</span> <span class="nf">ast_from</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="k">case</span> <span class="n">string</span>
<span class="k">when</span> <span class="no">String</span> <span class="k">then</span> <span class="n">processed_source_from</span><span class="p">(</span><span class="n">string</span><span class="p">).</span><span class="nf">ast</span>
<span class="k">when</span> <span class="no">RuboCop</span><span class="o">::</span><span class="no">ProcessedSource</span> <span class="k">then</span> <span class="n">string</span><span class="p">.</span><span class="nf">ast</span>
<span class="k">when</span> <span class="no">RuboCop</span><span class="o">::</span><span class="no">AST</span><span class="o">::</span><span class="no">Node</span> <span class="k">then</span> <span class="n">string</span>
<span class="k">else</span> <span class="kp">nil</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">longform_block?</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
<span class="n">node</span> <span class="k">in</span> <span class="p">[</span><span class="ss">:block</span><span class="p">,</span> <span class="c1"># s(:block,</span>
<span class="p">[</span><span class="ss">:send</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">target_method</span><span class="p">],</span> <span class="c1"># s(:send, s(:array), :select),</span>
<span class="p">[[</span><span class="ss">:arg</span><span class="p">,</span> <span class="n">v</span><span class="p">]],</span> <span class="c1"># s(:args, s(:arg, :v)),</span>
<span class="p">[</span><span class="ss">:send</span><span class="p">,</span> <span class="p">[</span><span class="ss">:lvar</span><span class="p">,</span> <span class="o">^</span><span class="n">v</span><span class="p">],</span> <span class="n">block_method</span><span class="p">]</span> <span class="c1"># s(:send, s(:lvar, :v), :even?))</span>
<span class="p">]</span>
<span class="k">end</span>
<span class="n">longform_block?</span><span class="p">(</span><span class="n">ast_from</span><span class="p">(</span><span class="s2">"[1, 2, 3].select { |v| v.even? }"</span><span class="p">))</span>
<span class="c1"># => true</span>
<span class="c1"># Name is not important, idea is, name can be debated. `source` is used to not</span>
<span class="c1"># show AST nodes</span>
<span class="no">PatternMatch</span><span class="p">.</span><span class="nf">last_match</span><span class="p">.</span><span class="nf">transform_values</span><span class="p">(</span><span class="o">&</span><span class="ss">:source</span><span class="p">)</span>
<span class="c1"># => {:node=>"[1, 2, 3].select { |v| v.even? }",</span>
<span class="c1"># :result=>"[1, 2, 3].select { |v| v.even? }",</span>
<span class="c1"># :target=>"[1, 2, 3]",</span>
<span class="c1"># :target_method=>:select,</span>
<span class="c1"># :v=>:v,</span>
<span class="c1"># :block_method=>:even?}</span>
<span class="c1"># Hacky version to show how / where behavior could be captured</span>
<span class="k">def</span> <span class="nf">longform_block?</span><span class="p">(</span><span class="n">node</span><span class="p">)</span>
<span class="n">result</span> <span class="o">=</span> <span class="n">node</span> <span class="k">in</span> <span class="p">[</span><span class="ss">:block</span><span class="p">,</span> <span class="c1"># s(:block,</span>
<span class="p">[</span><span class="ss">:send</span><span class="p">,</span> <span class="n">target</span><span class="p">,</span> <span class="n">target_method</span><span class="p">],</span> <span class="c1"># s(:send, s(:array), :select),</span>
<span class="p">[[</span><span class="ss">:arg</span><span class="p">,</span> <span class="n">v</span><span class="p">]],</span> <span class="c1"># s(:args, s(:arg, :v)),</span>
<span class="p">[</span><span class="ss">:send</span><span class="p">,</span> <span class="p">[</span><span class="ss">:lvar</span><span class="p">,</span> <span class="o">^</span><span class="n">v</span><span class="p">],</span> <span class="n">block_method</span><span class="p">]</span> <span class="c1"># s(:send, s(:lvar, :v), :even?))</span>
<span class="p">]</span>
<span class="n">pp</span><span class="p">(</span><span class="nb">binding</span><span class="p">.</span><span class="nf">local_variables</span><span class="p">.</span><span class="nf">to_h</span> <span class="p">{</span> <span class="p">[</span><span class="n">_1</span><span class="p">,</span> <span class="nb">binding</span><span class="p">.</span><span class="nf">local_variable_get</span><span class="p">(</span><span class="n">_1</span><span class="p">).</span><span class="nf">then</span> <span class="p">{</span> <span class="o">|</span><span class="n">s</span><span class="o">|</span> <span class="n">s</span><span class="p">.</span><span class="nf">source</span> <span class="k">rescue</span> <span class="n">s</span> <span class="p">}]</span> <span class="p">})</span>
<span class="n">result</span>
<span class="k">end</span>
</code></pre> Ruby master - Feature #20347 (Assigned): Separate docs task from allhttps://bugs.ruby-lang.org/issues/203472024-03-19T09:10:29Zhsbt (Hiroshi SHIBATA)hsbt@ruby-lang.org
<p>I would like to migrate RDoc as bundled gems at Ruby 3.5.</p>
<p>We need to handle <code>install-doc</code> and related task with that. I removed <code>docs</code> task from <code>all</code> and re-order <code>docs</code> task at <code>install-all</code>.</p>
<p><a href="https://github.com/ruby/ruby/pull/10282" class="external">https://github.com/ruby/ruby/pull/10282</a></p>
<p>It works with RDoc as bundled gems. We can keep current behavior with this migration.</p>
<p>I hope to merge changes for <code>all</code> task and re-order <code>install-all</code> task at Ruby 3.4.</p>
<p><a href="https://github.com/ruby/ruby/pull/10282/commits/b160083175aed062c320b8d76eafe1c8706309d4" class="external">https://github.com/ruby/ruby/pull/10282/commits/b160083175aed062c320b8d76eafe1c8706309d4</a></p>
<p>After that, the default <code>make</code> task will not generate rdoc. We need to add <code>make all docs</code> for that.</p> Ruby master - Bug #20346 (Open): FiberScheduler.unblock not called by Thread#join when Thread bod...https://bugs.ruby-lang.org/issues/203462024-03-18T19:06:21Zforthoney (Seong-Heon Jung)castlehoneyjung@gmail.com
<p>When using a <code>Ractor.take</code> inside a different thread, <code>Thread#join</code> on the thread running <code>Ractor.take</code> fails to call <code>FiberScheduler.unblock</code>. The below code can replicate this behavior</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s2">"async"</span>
<span class="k">class</span> <span class="nc">RactorWrapper</span>
<span class="k">def</span> <span class="nf">initialize</span>
<span class="vi">@ractor</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">recv</span> <span class="c1"># Ractor doesn't start until explicitly told to</span>
<span class="c1"># Do some calculations</span>
<span class="n">fib</span> <span class="o">=</span> <span class="o">-></span><span class="p">(</span><span class="n">x</span><span class="p">)</span> <span class="p">{</span> <span class="n">x</span> <span class="o"><</span> <span class="mi">2</span> <span class="p">?</span> <span class="mi">1</span> <span class="p">:</span> <span class="n">fib</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="n">fib</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="n">x</span> <span class="o">-</span> <span class="mi">2</span><span class="p">)</span> <span class="p">}</span>
<span class="n">fib</span><span class="p">.</span><span class="nf">call</span><span class="p">(</span><span class="mi">20</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">take_async</span>
<span class="vi">@ractor</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="kp">nil</span><span class="p">)</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="vi">@ractor</span><span class="p">.</span><span class="nf">take</span> <span class="p">}.</span><span class="nf">join</span><span class="p">.</span><span class="nf">value</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="no">Async</span> <span class="k">do</span> <span class="o">|</span><span class="n">task</span><span class="o">|</span>
<span class="mi">10000</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span> <span class="o">|</span><span class="n">i</span><span class="o">|</span>
<span class="n">task</span><span class="p">.</span><span class="nf">async</span> <span class="k">do</span>
<span class="no">RactorWrapper</span><span class="p">.</span><span class="nf">new</span><span class="p">.</span><span class="nf">take_async</span>
<span class="nb">puts</span> <span class="n">i</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>The above code deadlocks, and when we leave a debugging print statement inside of <code>Async</code>'s scheduler's <code>block</code> and <code>unblock</code> method, we can confirm that we only call <code>Scheduler.block</code>, and never <code>Scheduler.unblock</code></p> Ruby master - Feature #20345 (Open): Add `--target-rbconfig` option to mkmfhttps://bugs.ruby-lang.org/issues/203452024-03-18T16:26:54Zkatei (Yuta Saito)
<a name="Motivation"></a>
<h2 >Motivation<a href="#Motivation" class="wiki-anchor">¶</a></h2>
<p>Today, CRuby runs on many platforms. But not all platforms are capable of running build tools (e.g. WebAssembly/WASI), so cross-target compilation against extensions libraries is essential for those platforms.</p>
<p>We currently have 3 major mkmf users (<code>extconf.rb</code> consumers in in other words):</p>
<ol>
<li>CRuby build system</li>
<li>rake-compiler</li>
<li>RubyGems</li>
</ol>
<p>[1] CRuby build system and [2] rake-compiler have their bespoke tricks to support cross compilation but [3] does not support cross compilation yet. So we are going to support cross-compilation in RubyGems to unlock the use of gems including non-precompiled extension libraries.</p>
<p>However, introducing the same tricks to RubyGems to support cross compilation as well as the other two is not ideal and cannot handle some edge cases properly.<br>
Therefore, this proposal aims to add cross-compilation support in mkmf itself and remove the need for special tricks in mkmf users.</p>
<p>Note that cross-compilation here includes:</p>
<ul>
<li>Cross <em>platform</em> compilation: Build extension libraries for platform A on platform B.</li>
<li>Cross <em>ruby version</em> compilation: Build extension libraries for Ruby X with running mkmf.rb bundled with Ruby X on Ruby Y.</li>
</ul>
<a name="Existing-Solutions"></a>
<h2 >Existing Solutions<a href="#Existing-Solutions" class="wiki-anchor">¶</a></h2>
<p>We currently have two solutions to cross-compile extension libraries, but both solutions are based on faking <code>rbconfig</code>.</p>
<a name="CRuby-build-system"></a>
<h3 >CRuby build system<a href="#CRuby-build-system" class="wiki-anchor">¶</a></h3>
<p>CRuby build system is capable for cross-compiling extension libraries for cross-platform and cross ruby version.<br>
The key trick here is that CRuby build system generates -fake.rb that fakes <code>RUBY_</code> constants like <code>RUBY_PLATFORM</code> and loads just built <code>rbconfig</code> describing Ruby version X for platform A and prevents loading <code>rbconfig</code> for Ruby version Y for platform B.</p>
<p>As a result, this fakes the global <code>RbConfig</code> constant and mkmk generates Makefile using the faked <code>RbConfig</code>.</p>
<a name="rake-compiler"></a>
<h3 >rake-compiler<a href="#rake-compiler" class="wiki-anchor">¶</a></h3>
<p>rake-compiler also fakes <code>RbConfig</code> as well as CRuby build system does. One of the notable tricks here is that the faking script loads <code>resolv</code>, which expects the original <code>RUBY_PLATFORM</code>, at first and fake RbConfig after that.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># From https://github.com/rake-compiler/rake-compiler/blob/7357f9e917dae79350687782c22596a036693405/lib/rake/extensiontask.rb#L559-L563</span>
<span class="c1"># Pre-load resolver library before faking, in order to avoid error</span>
<span class="c1"># "cannot load such file -- win32/resolv" when it is required later on.</span>
<span class="c1"># See also: https://github.com/tjschuck/rake-compiler-dev-box/issues/5</span>
<span class="nb">require</span> <span class="s1">'resolv'</span>
<span class="nb">require</span> <span class="s1">'rbconfig'</span>
</code></pre>
<p>This has been introduced as a workaround but this indicates that the faking method cannot be generally applied.</p>
<a name="Problems"></a>
<h2 >Problems<a href="#Problems" class="wiki-anchor">¶</a></h2>
<p>Based on insights from the existing solutions, the problems here are:</p>
<ol>
<li>There is no way to tell the target <code>RbConfig</code> to <code>mkmf</code> without polluting the global <code>RbConfig</code> constant.</li>
<li>There is no public API to retrieve the deployment target info, so existing <code>extconf.rb</code> assumes <code>::RbConfig</code> is the one.</li>
</ol>
<a name="Proposal"></a>
<h2 >Proposal<a href="#Proposal" class="wiki-anchor">¶</a></h2>
<p>I propose adding those interfaces to <code>mkmf</code>:</p>
<ol>
<li>
<code>--target-rbconfig</code> option to override the RbConfig used for generating Makefiles without replacing the global top-level <code>RbConfig</code> module.</li>
<li>
<code>MakeMakefile::RbConfig</code> constant to access the RbConfig for the target platform.<br>
By default, it's an alias of top-level <code>RbConfig</code>. If <code>--target-rbconfig</code> is given, it points to the specified <code>RbConfig</code> definition.</li>
</ol>
<pre><code data-language="console=">$ ruby extconf.rb --target-rbconfig=path/to/rbconfig.rb
</code></pre>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s2">"mkmf"</span>
<span class="nb">system</span><span class="p">(</span>
<span class="s2">"./libyaml/configure"</span><span class="p">,</span>
<span class="c1"># Before:</span>
<span class="c1"># "--host=#{RbConfig::CONFIG['host']}",</span>
<span class="s2">"--host=</span><span class="si">#{</span><span class="no">MakeMakefile</span><span class="o">::</span><span class="no">RbConfig</span><span class="o">::</span><span class="no">CONFIG</span><span class="p">[</span><span class="s1">'host'</span><span class="p">]</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
<span class="o">...</span>
<span class="p">)</span>
<span class="c1"># Before:</span>
<span class="c1"># case RUBY_PLATFORM</span>
<span class="k">case</span> <span class="no">MakeMakefile</span><span class="o">::</span><span class="no">RbConfig</span><span class="o">::</span><span class="no">CONFIG</span><span class="p">[</span><span class="s1">'platform'</span><span class="p">]</span>
<span class="k">when</span> <span class="sr">/mswin|mingw|bccwin/</span>
<span class="o">...</span>
<span class="k">when</span> <span class="sr">/linux/</span>
<span class="o">...</span>
<span class="k">end</span>
<span class="n">create_makefile</span><span class="p">(</span><span class="s2">"psych"</span><span class="p">)</span>
</code></pre>
<p>Extension library authors who want to support cross-compilation just need to replace their use of some constants in <code>extconf.rb</code> that assume the config describes the deployment target. Here is the list of faked constant variables and corresponding representations compatible with cross-compilation.</p>
<table>
<thead>
<tr>
<th align="left">Before</th>
<th align="left">After (to make the ext x-compile ready)</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left"><code>RbConfig</code></td>
<td align="left"><code>MakeMakefile::RbConfig</code></td>
</tr>
<tr>
<td align="left"><code>RUBY_PLATFORM</code></td>
<td align="left"><code>MakeMakefile::RbConfig::CONFIG["platform"]</code></td>
</tr>
<tr>
<td align="left"><code>RUBY_VERSION</code></td>
<td align="left"><code>MakeMakefile::RbConfig::expand("$(MAJOR).$(MINOR).$(TEENY)")</code></td>
</tr>
<tr>
<td align="left"><code>RUBY_DESCRIPTION</code></td>
<td align="left">No corresponding config entry</td>
</tr>
</tbody>
</table>
<a name="Compatibility"></a>
<h2 >Compatibility<a href="#Compatibility" class="wiki-anchor">¶</a></h2>
<p>This is a completely additive change, so I expect there is no compatibility issues for existing <code>extconf.rb</code>.</p>
<p>Note that migrating <code>RbConfig</code> to <code>MakeMakefile::RbConfig</code> does not break existing faked <code>RbConfig</code> based cross-compilation because <code>MakeMakefile::RbConfig</code> is an alias of <code>::RbConfig</code> by default and it's the faked config describing the deployment target in this scenario.</p>
<p>Also extension library authors who want to support cross-compilation and want to keep build with older Ruby before this change can include the following snippet at the beginning of <code>extconf.rb</code>:</p>
<pre><code data-language="ruby=">MakeMakefile::RbConfig ||= RbConfig
</code></pre>
<a name="Implementation"></a>
<h2 >Implementation<a href="#Implementation" class="wiki-anchor">¶</a></h2>
<p>Literally a few lines of changes: <a href="https://github.com/kateinoigakukun/ruby/commit/9f3090c26ae1e5712dee702c19ba7a50695dd86a" class="external">https://github.com/kateinoigakukun/ruby/commit/9f3090c26ae1e5712dee702c19ba7a50695dd86a</a></p>
<a name="Evaluation"></a>
<h2 >Evaluation<a href="#Evaluation" class="wiki-anchor">¶</a></h2>
<p>I ported nokogiri gem, which has <a href="https://github.com/sparklemotion/nokogiri/blob/v1.16.3/ext/nokogiri/extconf.rb" class="external">1k lines of <code>extconf.rb</code></a> and several platform specific branches, to WebAssembly/WASI with this change, and the new API was enough to satisfy the cross-compilation scenario.</p> Ruby master - Bug #20344 (Open): argument stack underflow (-1)https://bugs.ruby-lang.org/issues/203442024-03-18T15:37:22Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<p>This file produces argument stack underflow, since ruby 2.5.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">proc</span> <span class="k">do</span>
<span class="k">next</span> <span class="k">if</span> <span class="kp">true</span>
<span class="k">case</span> <span class="kp">nil</span>
<span class="k">when</span> <span class="s2">"a"</span>
<span class="k">next</span>
<span class="k">when</span> <span class="s2">"b"</span>
<span class="k">when</span> <span class="s2">"c"</span>
<span class="nb">proc</span> <span class="p">{}</span>
<span class="k">end</span>
<span class="k">next</span> <span class="k">unless</span> <span class="kp">true</span>
<span class="k">end</span>
</code></pre>
<pre><code>-- raw disasm--------
trace: 100
0000 nop ( 1)
<L000> [sp: 0, unremovable: 1, refcnt: 5]
trace: 1
<L004> [sp: 0, unremovable: 0, refcnt: 1]
adjust: [label: 0]
0001 putnil ( 2)
0002 leave ( 13)
<L008> [sp: 1, unremovable: 0, refcnt: 1]
adjust: [label: 0]
0003 putnil ( 6)
0004 leave ( 13)
adjust: [label: 8]
0005 jump <L005> ( 5)
0007 pop ( 7)
0008 jump <L005> ( 7)
* 0010 pop ( 8)
trace: 1
<L011> [sp: -1, unremovable: 1, refcnt: 1]
0011 putself ( 9)
0012 send <calldata:proc, 0>, nil ( 9)
<L012> [sp: -1, unremovable: 0, refcnt: 2]
0015 pop ( 9)
<L005> [sp: 1, unremovable: 0, refcnt: 2]
trace: 1
0016 putnil ( 12)
<L001> [sp: -1, unremovable: 0, refcnt: 3]
trace: 200
0017 leave ( 13)
---------------------
</code></pre> Ruby master - Bug #20342 (Open): Top level `public`, `private` and `ruby2_keywords` do not work i...https://bugs.ruby-lang.org/issues/203422024-03-16T10:21:57Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<p>With this file:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># load.rb</span>
<span class="kp">public</span> <span class="k">def</span> <span class="nf">f</span> <span class="o">=</span> <span class="ss">:ok</span>
</code></pre>
<p>It is OK when <code>require</code>d.</p>
<pre><code data-language="sh-session">$ ruby -r ./load.rb -e 'p f'
:ok
</code></pre>
<p>Simple <code>load</code> is OK too.</p>
<pre><code data-language="sh-session">$ ruby -e 'load ARGV[0]; p f' load.rb
:ok
</code></pre>
<p>Wrapped <code>load</code> fails.</p>
<pre><code data-language="sh-session">$ ruby -e 'load ARGV[0], true' load.rb
load.rb:1:in 'public': undefined method 'f' for class 'Object' (NameError)
public def f = :ok
^^^^^^
from load.rb:1:in '<top (required)>'
from -e:1:in 'Kernel#load'
from -e:1:in '<main>'
</code></pre> Ruby master - Bug #20340 (Open): Ractor comments not applying to constant targetshttps://bugs.ruby-lang.org/issues/203402024-03-14T19:39:40Zkddnewton (Kevin Newton)kddnewton@gmail.com
<p>In this example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">C</span><span class="p">,</span> <span class="o">=</span> <span class="p">{</span> <span class="ss">foo: </span><span class="n">bar</span> <span class="p">}</span>
</code></pre>
<p>You get:</p>
<pre><code>== disasm: #<ISeq:<main>@test.rb:1 (1,0)-(1,17)>
0000 putobject :foo ( 1)[Li]
0002 putself
0003 opt_send_without_block <calldata!mid:bar, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0005 newhash 2
0007 dup
0008 expandarray 1, 0
0011 putspecialobject 3
0013 setconstant :C
0015 leave
</code></pre>
<p>But there's no difference from:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># shareable_constant_value: literal</span>
<span class="no">C</span><span class="p">,</span> <span class="o">=</span> <span class="p">{</span> <span class="ss">foo: </span><span class="n">bar</span> <span class="p">}</span>
</code></pre>
<p>I would have expected:</p>
<pre><code>== disasm: #<ISeq:<main>@test.rb:1 (1,0)-(2,16)>
0000 putobject RubyVM::FrozenCore ( 2)[Li]
0002 putobject :foo
0004 putobject RubyVM::FrozenCore
0006 putself
0007 opt_send_without_block <calldata!mid:bar, argc:0, FCALL|VCALL|ARGS_SIMPLE>
0009 putobject "C"
0011 opt_send_without_block <calldata!mid:ensure_shareable, argc:2, ARGS_SIMPLE>
0013 newhash 2
0015 opt_send_without_block <calldata!mid:make_shareable, argc:1, ARGS_SIMPLE>
0017 dup
0018 expandarray 1, 0
0021 putspecialobject 3
0023 setconstant :C
0025 leave
</code></pre>
<p>Is this omission intentional? For context, I'm building this in prism and I need to know if I should explicitly disable this behavior.</p> Ruby master - Bug #20337 (Open): Complex#inspect mutates the string returned by `real.inspect`https://bugs.ruby-lang.org/issues/203372024-03-14T11:23:54ZEregon (Benoit Daloze)
<pre><code>irb(main):001:0> n = Numeric.new
=> #<Numeric:0x00007f81b2308578>
irb(main):004:0> class Numeric; def inspect = super.freeze; end
=> :inspect
irb(main):006:0> Complex(n, 1).inspect
(irb):6:in `inspect': can't modify frozen String: "#<Numeric:0x00007f81b2308578>" (FrozenError)
from (irb):6:in `<main>'
from /home/eregon/.rubies/ruby-3.2.2/lib/ruby/gems/3.2.0/gems/irb-1.6.2/exe/irb:11:in `<top (required)>'
from /home/eregon/.rubies/ruby-3.2.2/bin/irb:25:in `load'
from /home/eregon/.rubies/ruby-3.2.2/bin/irb:25:in `<main>'
</code></pre>
<p>It feels wrong to mutate the result of inspect at least in general, for instance <code>true.inspect</code> is frozen.</p>
<p>Discovered by <a href="https://github.com/ruby/spec/pull/1142" class="external">https://github.com/ruby/spec/pull/1142</a></p> Ruby master - Misc #20336 (Open): DevMeeting-2024-04-17https://bugs.ruby-lang.org/issues/203362024-03-14T10:17:44Zmame (Yusuke Endoh)mame@ruby-lang.org
<a name="The-next-dev-meeting"></a>
<h1 >The next dev meeting<a href="#The-next-dev-meeting" class="wiki-anchor">¶</a></h1>
<p><strong>Date: 2024/04/17 13:00-17:00</strong> (JST)<br>
Log: <em>TBD</em></p>
<ul>
<li>Dev meeting <em>IS NOT</em> a decision-making place. All decisions should be done at the bug tracker.</li>
<li>Dev meeting is a place we can ask Matz, nobu, nurse and other developers directly.</li>
<li>Matz is a very busy person. Take this opportunity to ask him. If you can not attend, other attendees can ask instead of you (if attendees can understand your issue).</li>
<li>We will write a record of the discussion in the file or to each ticket in English.</li>
<li>All activities are best-effort (keep in mind that most of us are volunteer developers).</li>
<li>The date, time and place of the meeting are scheduled according to when/where we can reserve Matz's time.</li>
<li>
<em>DO NOT</em> discuss then on this ticket, please.</li>
</ul>
<a name="Call-for-agenda-items"></a>
<h1 >Call for agenda items<a href="#Call-for-agenda-items" class="wiki-anchor">¶</a></h1>
<p>If you have a ticket that you want matz and committers to discuss, please post it into this ticket in the following format:</p>
<pre><code>* [Ticket ref] Ticket title (your name)
* Comment (A summary of the ticket, why you put this ticket here, what point should be discussed, etc.)
</code></pre>
<p>Example:</p>
<pre><code>* [Feature #14609] `Kernel#p` without args shows the receiver (ko1)
* I feel this feature is very useful and some people say :+1: so let discuss this feature.
</code></pre>
<ul>
<li>It is recommended to add a comment by 2024/04/14. We hold a preparatory meeting to create an agenda a few days before the dev-meeting.</li>
<li>The format is strict. We'll use <a href="https://gist.github.com/mame/b0390509ce1491b43610b9ebb665eb86" class="external">this script to automatically create an markdown-style agenda</a>. We may ignore a comment that does not follow the format.</li>
<li>Your comment is mandatory. We cannot read all discussion of the ticket in a limited time. We appreciate it if you could write a short summary and update from a previous discussion.</li>
</ul> Ruby master - Feature #20335 (Open): `Thread.each_caller_location` should accept the same argumen...https://bugs.ruby-lang.org/issues/203352024-03-14T09:32:41Zbyroot (Jean Boussier)byroot@ruby-lang.org
<p><code>Thread.each_caller_location</code> was added to Ruby 3.2 as part of [Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Add block or filtered forms of Kernel#caller to allow early bail-out (Closed)" href="https://bugs.ruby-lang.org/issues/16663">#16663</a>] and is a very useful API for emitting warnings with a proper source location and similar use cases.</p>
<p>However in many of the cases where I used it, or seen it used, it was needed to skip the first, or a couple frames:</p>
<p>Examples:</p>
<p>Sorbet: <a href="https://github.com/Shopify/sorbet/blob/b27a14c247ace7cabdf0f348bfb11fdf0b7e9ab4/gems/sorbet-runtime/lib/types/private/caller_utils.rb#L6-L18" class="external">https://github.com/Shopify/sorbet/blob/b27a14c247ace7cabdf0f348bfb11fdf0b7e9ab4/gems/sorbet-runtime/lib/types/private/caller_utils.rb#L6-L18</a></p>
<pre><code class="ruby syntaxhl" data-language="ruby"> <span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">find_caller</span>
<span class="n">skiped_first</span> <span class="o">=</span> <span class="kp">false</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">each_caller_location</span> <span class="k">do</span> <span class="o">|</span><span class="n">loc</span><span class="o">|</span>
<span class="k">unless</span> <span class="n">skiped_first</span>
<span class="n">skiped_first</span> <span class="o">=</span> <span class="kp">true</span>
<span class="k">next</span>
<span class="k">end</span>
<span class="k">next</span> <span class="k">if</span> <span class="n">loc</span><span class="p">.</span><span class="nf">path</span><span class="o">&</span><span class="p">.</span><span class="nf">start_with?</span><span class="p">(</span><span class="s2">"<internal:"</span><span class="p">)</span>
<span class="k">return</span> <span class="n">loc</span> <span class="k">if</span> <span class="k">yield</span><span class="p">(</span><span class="n">loc</span><span class="p">)</span>
<span class="k">end</span>
<span class="kp">nil</span>
<span class="k">end</span>
</code></pre>
<p><a class="user active user-mention" href="https://bugs.ruby-lang.org/users/1241">@fxn (Xavier Noria)</a> 's PR: <a href="https://github.com/ruby/ruby/blob/9c2e686719a5a4df5ea0b8a3b6a373ca6003c229/lib/bundled_gems.rb#L140-L146" class="external">https://github.com/ruby/ruby/blob/9c2e686719a5a4df5ea0b8a3b6a373ca6003c229/lib/bundled_gems.rb#L140-L146</a></p>
<pre><code class="ruby syntaxhl" data-language="ruby"> <span class="n">frames_to_skip</span> <span class="o">=</span> <span class="mi">2</span>
<span class="n">location</span> <span class="o">=</span> <span class="kp">nil</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">each_caller_location</span> <span class="k">do</span> <span class="o">|</span><span class="n">cl</span><span class="o">|</span>
<span class="k">if</span> <span class="n">frames_to_skip</span> <span class="o">>=</span> <span class="mi">1</span>
<span class="n">frames_to_skip</span> <span class="o">-=</span> <span class="mi">1</span>
<span class="k">next</span>
<span class="k">end</span>
<span class="c1"># snipp...</span>
</code></pre>
<a name="Proposal"></a>
<h3 >Proposal<a href="#Proposal" class="wiki-anchor">¶</a></h3>
<p>I think it would be very useful if <code>Thread.each_caller_location</code> accepted the same arguments as <code>caller</code> and <code>caller_locations</code>:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1">#each_caller_location(start = 1, length = nil)</span>
<span class="c1">#each_caller_location(range)</span>
</code></pre>
<p><a class="user active user-mention" href="https://bugs.ruby-lang.org/users/1604">@jeremyevans0 (Jeremy Evans)</a> what do you think?</p> Ruby master - Bug #20332 (Open): After upgrading to ruby v 3.2.3 rb_scan_args() skips argument va...https://bugs.ruby-lang.org/issues/203322024-03-12T18:06:04Zpraveenrocket (Praveen N)
<p>Hi,</p>
<p>Note: I am not an expert at ruby.</p>
<p>I am working on ibm_db gem, its an adapter developed using ruby C extension, which helps ruby & rails applications to connect to DB2 database.<br>
Here is a github link for its source <a href="https://github.com/ibmdb/ruby-ibmdb/tree/master" class="external">https://github.com/ibmdb/ruby-ibmdb/tree/master</a></p>
<p>As of now ibm_db gem is compatible with ruby v 3.1.<br>
Now I am trying to make ibm_db gem compatible with ruby v 3.2.3.</p>
<p>All my test cases were working for ruby v 3.1, but post upgrading to ruby v 3.2.3, most of my test cases are failing.</p>
<p>After debugging using gdb what I see is, my ruby test cases calls ruby C extension API passing required arguments, but inside C extension code arguments are not parsed, indeed nothing is read. Because of this most of test cases are failing.</p>
<p>Below is a sample ruby script which when run calls ibm_db extension,</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="err">$</span> <span class="n">irb</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">001</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="nb">require</span> <span class="s1">'ibm_db'</span>
<span class="o">=></span> <span class="kp">true</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">002</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="n">conn</span> <span class="o">=</span> <span class="no">IBM_DB</span><span class="p">.</span><span class="nf">connect</span><span class="p">(</span><span class="s2">"DATABASE=sample;HOSTNAME=waldevdbclnxtst06.dev.rocketsoftware.com;PORT=60000;PROTOCOL=TCPIP;UID=zurbie;PWD=A2m8test;"</span><span class="p">,</span><span class="s1">''</span><span class="p">,</span><span class="s1">''</span><span class="p">)</span>
<span class="p">(</span><span class="n">irb</span><span class="p">):</span><span class="mi">2</span><span class="p">:</span> <span class="ss">warning: </span><span class="n">undefining</span> <span class="n">the</span> <span class="n">allocator</span> <span class="n">of</span> <span class="no">T_DATA</span> <span class="k">class</span> <span class="nc">IBM_DB::Connection</span>
<span class="o">=></span> <span class="c1">#<IBM_DB::Connection:0x00007ff60314ce58></span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">003</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="n">stmt</span> <span class="o">=</span> <span class="no">IBM_DB</span><span class="p">.</span><span class="nf">exec</span> <span class="n">conn</span><span class="p">,</span><span class="s1">'create table abc(C1 int)'</span>
<span class="o">=></span> <span class="kp">false</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">004</span><span class="p">:</span><span class="mi">0</span><span class="o">></span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">005</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="no">IBM_DB</span><span class="p">.</span><span class="nf">close</span><span class="p">(</span><span class="n">conn</span><span class="p">)</span>
<span class="o">=></span> <span class="kp">true</span>
<span class="n">irb</span><span class="p">(</span><span class="n">main</span><span class="p">):</span><span class="mo">006</span><span class="p">:</span><span class="mi">0</span><span class="o">></span> <span class="nb">exit</span>
</code></pre>
<p>Above, If you observe IBM_DB.exec is called passing two arguments conn & string with create table query.<br>
In extension code <a href="https://github.com/ibmdb/ruby-ibmdb/blob/master/IBM_DB_Driver/ibm_db.c" class="external">https://github.com/ibmdb/ruby-ibmdb/blob/master/IBM_DB_Driver/ibm_db.c</a>,<br>
below function will be called</p>
<pre><code class="c syntaxhl" data-language="c"><span class="n">VALUE</span> <span class="nf">ibm_db_exec</span><span class="p">(</span><span class="kt">int</span> <span class="n">argc</span><span class="p">,</span> <span class="n">VALUE</span> <span class="o">*</span><span class="n">argv</span><span class="p">,</span> <span class="n">VALUE</span> <span class="n">self</span><span class="p">)</span>
<span class="p">{</span>
<span class="p">....</span>
<span class="n">rb_scan_args</span><span class="p">(</span><span class="n">argc</span><span class="p">,</span> <span class="n">argv</span><span class="p">,</span> <span class="s">"21"</span><span class="p">,</span> <span class="o">&</span><span class="n">connection</span><span class="p">,</span> <span class="o">&</span><span class="n">stmt</span><span class="p">,</span> <span class="o">&</span><span class="n">options</span><span class="p">);</span>
<span class="p">......</span>
<span class="p">}</span>
</code></pre>
<p>Note: Please refer <a href="https://github.com/ibmdb/ruby-ibmdb/blob/master/IBM_DB_Driver/ibm_db.c" class="external">https://github.com/ibmdb/ruby-ibmdb/blob/master/IBM_DB_Driver/ibm_db.c</a> for complete code.</p>
<p>rb_scan_args used to parse arguments very well in ruby v 3.1, but now its failing to do so. I see stmt parameter doesnt hold anything.</p>
<p>I just want to know whats issue here, Am I passing arguments in wrong way (in ruby script), or am I not using rb_scan_args properly ?</p>
<p>To reproduce,<br>
Install ruby v 3.2.3,<br>
Install ibm_db gem version 5.4.1 (latest)<br>
Run above sample ruby script using IRB.</p>
<p>Response at earliest is much appreciated.</p>
<p>Thanks<br>
Praveen</p> Ruby master - Feature #20331 (Open): Should parser warn hash duplication and when clause?https://bugs.ruby-lang.org/issues/203312024-03-12T13:15:42Zyui-knk (Kaneko Yuichiro)
<a name="Background"></a>
<h1 >Background<a href="#Background" class="wiki-anchor">¶</a></h1>
<p>Right now, parser warns duplicated hash keys (#1) and when clause (#2).<br>
For example,</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="p">{</span><span class="mi">1</span> <span class="o">=></span> <span class="ss">:a</span><span class="p">,</span> <span class="mi">1</span> <span class="o">=></span> <span class="ss">:b</span><span class="p">}</span>
<span class="c1"># => warning: key 1 is duplicated and overwritten on line 1</span>
</code></pre>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">case</span> <span class="mi">2</span>
<span class="k">when</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">1</span>
<span class="k">else</span>
<span class="k">end</span>
<span class="c1"># => test.rb:2: warning: duplicated `when' clause with line 2 is ignored</span>
</code></pre>
<p>The parser compares different cardinality numbers.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="p">{</span>
<span class="mi">1</span> <span class="o">=></span> <span class="ss">:a</span><span class="p">,</span>
<span class="mh">0x1</span> <span class="o">=></span> <span class="ss">:b</span><span class="p">,</span>
<span class="mb">0b1</span> <span class="o">=></span> <span class="ss">:b</span><span class="p">,</span>
<span class="mi">0</span><span class="n">d1</span> <span class="o">=></span> <span class="ss">:b</span><span class="p">,</span>
<span class="mi">0</span><span class="n">o1</span> <span class="o">=></span> <span class="ss">:b</span><span class="p">,</span>
<span class="p">}</span>
<span class="c1"># => test.rb:2: warning: key 1 is duplicated and overwritten on line 3</span>
<span class="c1"># => test.rb:3: warning: key 1 is duplicated and overwritten on line 4</span>
<span class="c1"># => test.rb:4: warning: key 1 is duplicated and overwritten on line 5</span>
<span class="c1"># => test.rb:5: warning: key 1 is duplicated and overwritten on line 6</span>
</code></pre>
<a name="Problem"></a>
<h1 >Problem<a href="#Problem" class="wiki-anchor">¶</a></h1>
<p>Currently this is implemeted by converting string like <code>"123"</code> to Ruby Object and compare them.<br>
It's needed to remove Ruby Object from parse.y for Universal Parser.<br>
I created PR <a href="https://github.com/ruby/ruby/pull/10079" class="external">https://github.com/ruby/ruby/pull/10079</a> which implements bignum for parse.y without dependency on Ruby Object, however nobu and mame express concern about the cost and benefit of implmenting bignum for parser.<br>
I want to discuss which is the best approach for this problem.</p>
<p>By the way, it's needed to calculate irreducible fraction for Rational key if we will keep warning messages.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="err">$</span> <span class="n">ruby</span> <span class="o">-</span><span class="n">wc</span> <span class="o">-</span><span class="n">e</span> <span class="s1">'{10.2r => :a, 10.2r => :b}'</span>
<span class="o">-</span><span class="n">e</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="ss">warning: </span><span class="n">key</span> <span class="p">(</span><span class="mi">51</span><span class="o">/</span><span class="mi">5</span><span class="p">)</span> <span class="n">is</span> <span class="n">duplicated</span> <span class="ow">and</span> <span class="n">overwritten</span> <span class="n">on</span> <span class="n">line</span> <span class="mi">1</span>
<span class="o">-</span><span class="n">e</span><span class="p">:</span><span class="mi">1</span><span class="p">:</span> <span class="ss">warning: </span><span class="n">unused</span> <span class="n">literal</span> <span class="n">ignored</span>
<span class="no">Syntax</span> <span class="no">OK</span>
</code></pre>
<a name="Options"></a>
<h1 >Options<a href="#Options" class="wiki-anchor">¶</a></h1>
<a name="1-Warnings-on-parser"></a>
<h2 >1. Warnings on parser<a href="#1-Warnings-on-parser" class="wiki-anchor">¶</a></h2>
<p>Pros:</p>
<ul>
<li>Users of Universal Parser don't need to implement warnings by themselves. I guess developers of other Ruby implementation may get benefit of reducing their effort.</li>
<li>Warnings are shown by <code>ruby -wc</code>.</li>
</ul>
<p>Cons:</p>
<ul>
<li>We need to maintain bignum implementation for parser.</li>
</ul>
<p>There are two approaches for this option.</p>
<a name="1-1-Implement-bignum-for-parser"></a>
<h3 >1-1. Implement bignum for parser<a href="#1-1-Implement-bignum-for-parser" class="wiki-anchor">¶</a></h3>
<p>The PR is this approach, implementing sub set of Ruby bignum for parser.</p>
<a name="1-2-Extract-existing-bignum-implementation-then-use-it"></a>
<h3 >1-2. Extract existing bignum implementation then use it<a href="#1-2-Extract-existing-bignum-implementation-then-use-it" class="wiki-anchor">¶</a></h3>
<p>Make existing bignum implementation to be independent of Ruby Object and use it from both bignum.c and parse.y.</p>
<a name="2-Moving-warnings-logic-into-compile-phase"></a>
<h2 >2. Moving warnings logic into compile phase<a href="#2-Moving-warnings-logic-into-compile-phase" class="wiki-anchor">¶</a></h2>
<p>We can use Ruby Object in compile.c. Then moving the logic into compile.c solves this problem.</p>
<p>Pros:</p>
<ul>
<li>No need to implement bignum for parser.</li>
</ul>
<p>Cons:</p>
<ul>
<li>Users of Universal Parser need to implement warnings by themselves.</li>
<li>Warnings are not shown by <code>ruby -wc</code>.</li>
</ul> Ruby master - Bug #20330 (Open): [BUG] Segmentation fault at 0xffffffffffffffffhttps://bugs.ruby-lang.org/issues/203302024-03-09T10:33:11Zl33tname (Sir l33tname)sirl33tname@gmail.com
<p>I get a segfault from ruby on fly.io (a platform to run full stack apps).<br>
As you can see from the stacktracke im using a jemalloc version but im getting the same crash with the<br>
ruby:3.3.0-slim docker image. (Thats the docker file: <a href="https://github.com/Binaergewitter/serious-bg/blob/be890bf6af110b02f22f359d395bedb0659f4243/Dockerfile.fly" class="external">https://github.com/Binaergewitter/serious-bg/blob/be890bf6af110b02f22f359d395bedb0659f4243/Dockerfile.fly</a> based on quay.io/evl.ms/fullstaq-ruby:3.3.0-jemalloc-slim)</p>
<p>Reverting back to ruby 3.2.3 solved the issue for now: <a href="https://github.com/Binaergewitter/serious-bg/commit/4eed4119706303383ce5994c796bc5a8a1813afc" class="external">https://github.com/Binaergewitter/serious-bg/commit/4eed4119706303383ce5994c796bc5a8a1813afc</a></p>
<p>I was not able to reproduce it locally.<br>
But the application is open source -> <a href="https://github.com/Binaergewitter/serious-bg" class="external">https://github.com/Binaergewitter/serious-bg</a></p>
<pre><code>2024-03-09T09:31:07Z app[3d8d7d99f40128] iad [info][ 0.037737] Spectre V2 : WARNING: Unprivileged eBPF is enabled with eIBRS on, data leaks possible via Spectre v2 BHB attacks!
2024-03-09T09:31:07Z app[3d8d7d99f40128] iad [info][ 0.041193] PCI: Fatal: No config space access function found
2024-03-09T09:31:07Z app[3d8d7d99f40128] iad [info] INFO Starting init (commit: 913ad9c)...
2024-03-09T09:31:07Z app[3d8d7d99f40128] iad [info] INFO Preparing to run: `bundle exec puma -e production -b tcp://0.0.0.0:8080 -t 0:5` as root
2024-03-09T09:31:07Z app[3d8d7d99f40128] iad [info] INFO [fly api proxy] listening at /.fly/api
2024-03-09T09:31:07Z app[3d8d7d99f40128] iad [info]2024/03/09 09:31:07 listening on [fdaa:0:182f:a7b:22c:a04d:ac4:2]:22 (DNS: [fdaa::3]:53)
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems.rb:165: [BUG] Segmentation fault at 0xffffffffffffffff
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]ruby 3.3.0 (2023-12-25 revision 5124f9ac75) +jemalloc [x86_64-linux]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]-- Control frame information -----------------------------------------------
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]c:0005 p:0074 s:0023 e:000021 CLASS /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems.rb:165
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]c:0004 p:0045 s:0019 e:000018 TOP /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems.rb:115 [FINISH]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]c:0003 p:---- s:0012 e:000011 CFUNC :require
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]c:0002 p:0012 s:0007 e:000006 TOP <internal:gem_prelude>:2 [FINISH]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]c:0001 p:0000 s:0003 E:0001c0 DUMMY [FINISH]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]-- Ruby level backtrace information ----------------------------------------
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]<internal:gem_prelude>:2:in `<internal:gem_prelude>'
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]<internal:gem_prelude>:2:in `require'
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems.rb:115:in `<top (required)>'
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems.rb:165:in `<module:Gem>'
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]-- Threading information ---------------------------------------------------
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]Total ractor count: 1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]Ruby thread count for this ractor: 1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]-- Machine register context ------------------------------------------------
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] RIP: 0x00007fc80e6c51b4 RBP: 0x00007fc80c400050 RSP: 0x00007ffee5a36a98
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] RAX: 0xffffffffffffffff RBX: 0x00007fc80c4003e8 RCX: 0x00007fc80c4003e9
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] RDX: 0xffffffffffffffff RDI: 0x00007fc80d8170d0 RSI: 0x000000000000c2d3
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] R8: 0x0000000000000000 R9: 0x00007fc80da36340 R10: 0x0000000000000001
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] R11: 0x00007fc80e026880 R12: 0x00007fc80ea4b860 R13: 0x0000000000000001
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] R14: 0x00007fc80c400550 R15: 0x00007fc80e026880 EFL: 0x0000000000010202
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]-- C level backtrace information -------------------------------------------
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_vm_bugreport+0x96b) [0x7fc80e77adab]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_bug_for_fatal_signal+0x100) [0x7fc80e576720]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(sigsegv+0x4b) [0x7fc80e6c74db]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/lib/x86_64-linux-gnu/libc.so.6(0x7fc80e13a050) [0x7fc80e13a050]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_insert_aux+0x364) [0x7fc80e6c51b4]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_cache_ancestors+0x8f) [0x7fc80e6c552f]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_cache_ancestors+0x6d) [0x7fc80e6c550d]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_cache_ancestors+0x6d) [0x7fc80e6c550d]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_cache_ancestors+0x6d) [0x7fc80e6c550d]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_cache_ancestors+0x6d) [0x7fc80e6c550d]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(redblack_cache_ancestors+0x6d) [0x7fc80e6c550d]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_shape_get_next+0x2a8) [0x7fc80e6c6458]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_class_ivar_set+0xb0) [0x7fc80e742560]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_ivar_set+0x83) [0x7fc80e742743]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(vm_exec_core+0x8ca) [0x7fc80e75ea1a]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_vm_exec+0x179) [0x7fc80e7640f9]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(require_internal+0xd2f) [0x7fc80e5e84bf]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_require_string+0x66) [0x7fc80e5e9156]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(vm_call_cfunc_other+0x169) [0x7fc80e74cf29]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(vm_exec_core+0x129) [0x7fc80e75e279]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_vm_exec+0x179) [0x7fc80e7640f9]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(ruby_opt_init.part.0+0xbf) [0x7fc80e6c185f]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(load_file_internal+0x47e) [0x7fc80e6c1e7e]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(rb_ensure+0x110) [0x7fc80e580190]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(process_options+0x15fb) [0x7fc80e6c38ab]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(ruby_process_options+0x145) [0x7fc80e6c3ff5]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3(ruby_options+0xc9) [0x7fc80e581249]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby(0x56225c24510a) [0x56225c24510a]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/lib/x86_64-linux-gnu/libc.so.6(0x7fc80e12524a) [0x7fc80e12524a]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0x85) [0x7fc80e125305]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]/usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby(_start+0x21) [0x56225c245151]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]-- Other runtime information -----------------------------------------------
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]* Loaded script: /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]* Loaded features:
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 0 enumerator.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 1 thread.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 2 fiber.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 3 rational.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 4 complex.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 5 ruby2_keywords.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 6 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/encdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 7 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/trans/transdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 8 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/rbconfig.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 9 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems/compatibility.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 10 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems/defaults.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 11 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems/deprecate.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info] 12 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/rubygems/errors.rb
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]* Process memory map:
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]56225c244000-56225c245000 r--p 00000000 fe:00 134645 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]56225c245000-56225c246000 r-xp 00001000 fe:00 134645 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]56225c246000-56225c247000 r--p 00002000 fe:00 134645 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]56225c247000-56225c248000 r--p 00002000 fe:00 134645 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]56225c248000-56225c249000 rw-p 00003000 fe:00 134645 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80994f000-7fc80a000000 r--s 00000000 fe:00 134864 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a000000-7fc80a400000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a54a000-7fc80a720000 r--s 00000000 fe:00 131782 /usr/lib/x86_64-linux-gnu/libc.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a720000-7fc80a7b0000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a7bf000-7fc80a7c0000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a7c0000-7fc80a861000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a861000-7fc80a862000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a862000-7fc80a903000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a903000-7fc80a904000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a904000-7fc80a9a5000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a9a5000-7fc80a9a6000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80a9a6000-7fc80aa47000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aa47000-7fc80aa48000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aa48000-7fc80aae9000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aae9000-7fc80aaea000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aaea000-7fc80ab8b000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ab8b000-7fc80ab8c000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ab8c000-7fc80ac2d000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ac2d000-7fc80ac2e000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ac2e000-7fc80accf000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80accf000-7fc80acd0000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80acd0000-7fc80ad71000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ad71000-7fc80ad72000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ad72000-7fc80ae13000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ae13000-7fc80ae14000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ae14000-7fc80aeb5000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aeb5000-7fc80aeb6000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aeb6000-7fc80af57000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80af57000-7fc80af58000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80af58000-7fc80aff9000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80aff9000-7fc80affa000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80affa000-7fc80b09b000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b09b000-7fc80b09c000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b09c000-7fc80b13d000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b13d000-7fc80b13e000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b13e000-7fc80b1df000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b1df000-7fc80b1e0000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b1e0000-7fc80b281000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b281000-7fc80b282000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b282000-7fc80b323000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b323000-7fc80b324000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b324000-7fc80b3c5000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b3c5000-7fc80b3c6000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b3c6000-7fc80b467000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b467000-7fc80b468000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b468000-7fc80b509000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b509000-7fc80b50a000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b50a000-7fc80b5ab000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b5ab000-7fc80b5ac000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b5ac000-7fc80b64d000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b64d000-7fc80b64e000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b64e000-7fc80b6ef000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b6ef000-7fc80b6f0000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b6f0000-7fc80b791000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b791000-7fc80b792000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b792000-7fc80b833000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b833000-7fc80b834000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b834000-7fc80b8d5000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b8d5000-7fc80b8d6000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b8d6000-7fc80b977000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b977000-7fc80b978000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80b978000-7fc80ba19000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ba19000-7fc80ba1a000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ba1a000-7fc80babb000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80babb000-7fc80babc000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80babc000-7fc80bb5d000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80bb5d000-7fc80bb5e000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80bb5e000-7fc80bbff000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80bbff000-7fc80bc00000 ---p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80bc00000-7fc80e000000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e010000-7fc80e020000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e020000-7fc80e070000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e074000-7fc80e075000 r--p 00000000 fe:00 136223 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/trans/transdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e075000-7fc80e076000 r-xp 00001000 fe:00 136223 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/trans/transdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e076000-7fc80e077000 r--p 00002000 fe:00 136223 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/trans/transdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e077000-7fc80e078000 r--p 00002000 fe:00 136223 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/trans/transdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e078000-7fc80e079000 rw-p 00003000 fe:00 136223 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/trans/transdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e079000-7fc80e07a000 r--p 00000000 fe:00 136179 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/encdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e07a000-7fc80e07b000 r-xp 00001000 fe:00 136179 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/encdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e07b000-7fc80e07c000 r--p 00002000 fe:00 136179 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/encdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e07c000-7fc80e07d000 r--p 00002000 fe:00 136179 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/encdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e07d000-7fc80e07e000 rw-p 00003000 fe:00 136179 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/ruby/3.3.0/x86_64-linux/enc/encdb.so
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e07e000-7fc80e085000 r--s 00000000 fe:00 131755 /usr/lib/x86_64-linux-gnu/gconv/gconv-modules.cache
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e085000-7fc80e0dc000 r--p 00000000 fe:00 131399 /usr/lib/locale/C.utf8/LC_CTYPE
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0dc000-7fc80e0de000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0de000-7fc80e0e1000 r--p 00000000 fe:00 131804 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0e1000-7fc80e0f8000 r-xp 00003000 fe:00 131804 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0f8000-7fc80e0fc000 r--p 0001a000 fe:00 131804 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0fc000-7fc80e0fd000 r--p 0001d000 fe:00 131804 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0fd000-7fc80e0fe000 rw-p 0001e000 fe:00 131804 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e0fe000-7fc80e124000 r--p 00000000 fe:00 131782 /usr/lib/x86_64-linux-gnu/libc.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e124000-7fc80e279000 r-xp 00026000 fe:00 131782 /usr/lib/x86_64-linux-gnu/libc.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e279000-7fc80e2cc000 r--p 0017b000 fe:00 131782 /usr/lib/x86_64-linux-gnu/libc.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e2cc000-7fc80e2d0000 r--p 001ce000 fe:00 131782 /usr/lib/x86_64-linux-gnu/libc.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e2d0000-7fc80e2d2000 rw-p 001d2000 fe:00 131782 /usr/lib/x86_64-linux-gnu/libc.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e2d2000-7fc80e2e1000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e2e1000-7fc80e2f1000 r--p 00000000 fe:00 131821 /usr/lib/x86_64-linux-gnu/libm.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e2f1000-7fc80e364000 r-xp 00010000 fe:00 131821 /usr/lib/x86_64-linux-gnu/libm.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e364000-7fc80e3be000 r--p 00083000 fe:00 131821 /usr/lib/x86_64-linux-gnu/libm.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3be000-7fc80e3bf000 r--p 000dc000 fe:00 131821 /usr/lib/x86_64-linux-gnu/libm.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3bf000-7fc80e3c0000 rw-p 000dd000 fe:00 131821 /usr/lib/x86_64-linux-gnu/libm.so.6
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3c0000-7fc80e3c2000 r--p 00000000 fe:00 131791 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3c2000-7fc80e3d8000 r-xp 00002000 fe:00 131791 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3d8000-7fc80e3f2000 r--p 00018000 fe:00 131791 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3f2000-7fc80e3f3000 r--p 00031000 fe:00 131791 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3f3000-7fc80e3f4000 rw-p 00032000 fe:00 131791 /usr/lib/x86_64-linux-gnu/libcrypt.so.1.1.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3f4000-7fc80e3fc000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3fc000-7fc80e3ff000 r--p 00000000 fe:00 134861 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libjemalloc.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e3ff000-7fc80e436000 r-xp 00003000 fe:00 134861 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libjemalloc.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e436000-7fc80e43e000 r--p 0003a000 fe:00 134861 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libjemalloc.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e43e000-7fc80e440000 r--p 00042000 fe:00 134861 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libjemalloc.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e440000-7fc80e441000 rw-p 00044000 fe:00 134861 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libjemalloc.so.1
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e441000-7fc80e442000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e442000-7fc80e445000 r--p 00000000 fe:00 131881 /usr/lib/x86_64-linux-gnu/libz.so.1.2.13
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e445000-7fc80e458000 r-xp 00003000 fe:00 131881 /usr/lib/x86_64-linux-gnu/libz.so.1.2.13
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e458000-7fc80e45f000 r--p 00016000 fe:00 131881 /usr/lib/x86_64-linux-gnu/libz.so.1.2.13
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e45f000-7fc80e460000 r--p 0001c000 fe:00 131881 /usr/lib/x86_64-linux-gnu/libz.so.1.2.13
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e460000-7fc80e461000 rw-p 0001d000 fe:00 131881 /usr/lib/x86_64-linux-gnu/libz.so.1.2.13
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e461000-7fc80e465000 r--s 00000000 fe:00 134645 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/bin/ruby
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e465000-7fc80e4b0000 r--p 00000000 fe:00 134864 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e4b0000-7fc80e89a000 r-xp 0004b000 fe:00 134864 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80e89a000-7fc80ea21000 r--p 00435000 fe:00 134864 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea21000-7fc80ea38000 r--p 005bb000 fe:00 134864 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea38000-7fc80ea3c000 rw-p 005d2000 fe:00 134864 /usr/lib/fullstaq-ruby/versions/3.3.0-jemalloc/lib/libruby.so.3.3.0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea3c000-7fc80ea53000 rw-p 00000000 00:00 0
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea53000-7fc80ea54000 r--p 00000000 fe:00 131764 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea54000-7fc80ea79000 r-xp 00001000 fe:00 131764 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea79000-7fc80ea83000 r--p 00026000 fe:00 131764 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea83000-7fc80ea85000 r--p 00030000 fe:00 131764 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7fc80ea85000-7fc80ea87000 rw-p 00032000 fe:00 131764 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7ffee523b000-7ffee5a3a000 rw-p 00000000 00:00 0 [stack]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7ffee5ba8000-7ffee5bac000 r--p 00000000 00:00 0 [vvar]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]7ffee5bac000-7ffee5bae000 r-xp 00000000 00:00 0 [vdso]
2024-03-09T09:31:08Z app[3d8d7d99f40128] iad [info]ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
</code></pre> Ruby master - Feature #20329 (Open): Clean up `--dump` sub-optionshttps://bugs.ruby-lang.org/issues/203292024-03-08T09:46:29Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<p>Currently we have 5 options for <code>--dump</code> command line option.</p>
<ul>
<li>insns</li>
<li>insns_without_opt</li>
<li>yydebug(+error-tolerant)</li>
<li>parsetree(+error-tolerant)</li>
<li>parsetree_with_comment(+error-tolerant)</li>
</ul>
<p>Among these, <code>insns_without_opt</code> is a variant of <code>insns</code>, and <code>parsetree_with_comment</code> is a variant of <code>parsetree</code>.<br>
However, there is now another way to specify variants (e.g. <code>+error-tolerant</code>).<br>
How about unifying the two so that the former can also be specified in the same form, such as <code>--dump=parsetree+comment+error-tolerant</code>?<br>
It also will be able to abbreviate as <code>parse+comm+err</code> or more.</p> Ruby master - Bug #20328 (Open): optparse omits the option's description in the --help output if ...https://bugs.ruby-lang.org/issues/203282024-03-07T22:03:25Zpostmodern (Hal Brodigan)postmodern.mod3@gmail.com
<p>If you define an option using <code>OptionParser#on</code>, but give the option's description as a multi-line Array, then the option's description is omitted from the <code>--help</code> output.</p>
<a name="Steps-To-Reproduce"></a>
<h2 >Steps To Reproduce<a href="#Steps-To-Reproduce" class="wiki-anchor">¶</a></h2>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1">#!/usr/bin/env ruby</span>
<span class="nb">require</span> <span class="s1">'optparse'</span>
<span class="n">optparser</span> <span class="o">=</span> <span class="no">OptionParser</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span> <span class="o">|</span><span class="n">opts</span><span class="o">|</span>
<span class="n">opts</span><span class="p">.</span><span class="nf">banner</span> <span class="o">=</span> <span class="s1">'usage: test.rb [options]'</span>
<span class="n">opts</span><span class="p">.</span><span class="nf">on</span><span class="p">(</span><span class="s1">'-o'</span><span class="p">,</span> <span class="s1">'--opt [OPT]'</span><span class="p">,</span> <span class="s1">'Line one'</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">opt</span><span class="o">|</span>
<span class="k">end</span>
<span class="n">opts</span><span class="p">.</span><span class="nf">on</span><span class="p">(</span><span class="s1">'-m'</span><span class="p">,</span> <span class="s1">'--multiline-opt'</span><span class="p">,</span> <span class="p">[</span><span class="s1">'Line one'</span><span class="p">,</span> <span class="s1">'Line two'</span><span class="p">])</span> <span class="k">do</span> <span class="o">|</span><span class="nb">test</span><span class="o">|</span>
<span class="k">end</span>
<span class="n">opts</span><span class="p">.</span><span class="nf">on</span><span class="p">(</span><span class="s1">'-h'</span><span class="p">,</span> <span class="s1">'--help'</span><span class="p">,</span> <span class="s1">'Prints this help'</span><span class="p">)</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="n">opts</span>
<span class="nb">exit</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">optparser</span><span class="p">.</span><span class="nf">parse</span><span class="p">([</span><span class="s1">'--help'</span><span class="p">])</span>
</code></pre>
<a name="Expected-result"></a>
<h3 >Expected result<a href="#Expected-result" class="wiki-anchor">¶</a></h3>
<pre><code>usage: test.rb [options]
-o, --opt [OPT] Line one
-m, --multiline-opt Line one
Line two
-h, --help Prints this help
</code></pre>
<a name="Actual-Result"></a>
<h3 >Actual Result<a href="#Actual-Result" class="wiki-anchor">¶</a></h3>
<pre><code>usage: test.rb [options]
-o, --opt [OPT] Line one
-m, --multiline-opt
-h, --help Prints this help
</code></pre>
<p>or an <code>ArgumentError</code> should be raised if Array descriptions are not allowed/supported.</p>
<a name="Version-Info"></a>
<h2 >Version Info<a href="#Version-Info" class="wiki-anchor">¶</a></h2>
<p>Tested against optparse 0.1.0, 0.2.0, 0.3.1, and the master branch.</p> Ruby master - Bug #20325 (Open): Enumerator.product.size bug with zero * infinite enumeratorshttps://bugs.ruby-lang.org/issues/203252024-03-05T15:21:08Zmarcandre (Marc-Andre Lafortune)marcandre-ruby-core@marc-andre.ca
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">Enumerator</span><span class="p">.</span><span class="nf">product</span><span class="p">([],</span> <span class="mi">1</span><span class="o">..</span><span class="p">).</span><span class="nf">to_a</span> <span class="c1"># => [] (OK)</span>
<span class="no">Enumerator</span><span class="p">.</span><span class="nf">product</span><span class="p">([],</span> <span class="mi">1</span><span class="o">..</span><span class="p">).</span><span class="nf">size</span> <span class="c1"># => Infinity (Should be 0)</span>
</code></pre> Ruby master - Misc #20320 (Open): Using OSU Open Source Lab native ppc64le/s390x CI services trig...https://bugs.ruby-lang.org/issues/203202024-03-01T16:26:28Zjaruga (Jun Aruga)
<p>We have been using Travis CI to run unit tests the native arm64/ppc64le/s390x in the ruby/ruby, ruby/zlib and ruby/prism repositories in the Ruby project.</p>
<p>One of the challenges is Travis CI's chronic unstable infra issues. To be fair, folks at Travis CI support are helpful, usually responding quickly, sometimes not. And I hope Travis CI will find the root causes of the issues. However, I would like to find alternative way to run the native ppc64le/s390x pipelines on pull-requests to change the current challenge fundamentally.</p>
<p>And I heard from folks at IBM that the there were CI services that we could run on the pull-requests. The CI services are Jenkins services provided by Oregon State University (OSU) Open Source Lab below. The CI services are the only alternative of running the native ppc64le/s390x pipelines on pull-requests as far as I know. As a note, we are already using SSH-accessing servers provided by OSU Open Source Lab.</p>
<ul>
<li>PowerPC64 (ppc64le): <a href="https://osuosl.org/services/powerdev/" class="external">https://osuosl.org/services/powerdev/</a> - POWER Continuous Integration (POWER CI)</li>
<li>IBM Z (s390x): <a href="https://osuosl.org/services/ibm-z/" class="external">https://osuosl.org/services/ibm-z/</a> - IBM Z Continuous Integration (IBM Z CI)</li>
</ul>
<p>Today I requested the CI services from the request form pages above. And I will try the services by myself first. Then if it looks good to us, I want to migrate the Travis CI ppc64le/s390x pipelines to the OSU Open Source Lab's ones. I will comment on this ticket when there are updates.</p>
<p>Note:<br>
Oregon State University Open Source Lab (OSUOSL) support email: <a href="mailto:support@osuosl.org" class="email">support@osuosl.org</a> and <a href="https://osuosl.org/contact/" class="external">other contacts</a>.</p> Ruby master - Bug #20319 (Open): Singleton class is being frozen lazily in some caseshttps://bugs.ruby-lang.org/issues/203192024-03-01T11:52:12Zandrykonchin (Andrew Konchin)
<p>I've noticed suspicious behaviour (it doesn't affect anything in practice for me though) when an object becomes frozen only its own singleton class becomes frozen immediately.</p>
<p>A singleton class of the object immediate singleton class becomes frozen lazily after <code>#singleton_class</code> method call:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">o</span> <span class="o">=</span> <span class="no">Object</span><span class="p">.</span><span class="nf">new</span>
<span class="n">klass</span> <span class="o">=</span> <span class="n">o</span><span class="p">.</span><span class="nf">singleton_class</span><span class="p">.</span><span class="nf">singleton_class</span>
<span class="n">o</span><span class="p">.</span><span class="nf">freeze</span>
<span class="nb">puts</span> <span class="n">klass</span><span class="p">.</span><span class="nf">frozen?</span> <span class="c1"># false <== here we expect true</span>
<span class="nb">puts</span> <span class="n">o</span><span class="p">.</span><span class="nf">singleton_class</span><span class="p">.</span><span class="nf">singleton_class</span><span class="p">.</span><span class="nf">frozen?</span> <span class="c1"># true</span>
<span class="nb">puts</span> <span class="n">klass</span><span class="p">.</span><span class="nf">frozen?</span> <span class="c1"># true</span>
</code></pre>
<p>I would expect all created (and visible to user) singleton classes in an object singleton classes chain to become frozen immediately when the object gets frozen.</p> Ruby master - Feature #20318 (Open): Pattern matching `case ... in` support for triple-dot argumentshttps://bugs.ruby-lang.org/issues/203182024-03-01T03:11:07Zbradgessler (Brad Gessler)
<a name="Premise"></a>
<h1 >Premise<a href="#Premise" class="wiki-anchor">¶</a></h1>
<p>Sometimes when I'm creating a method for an API, I'd like to do pattern matching against the arguments. Today I have to do something like this:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span> <span class="o">&</span><span class="n">block</span><span class="p">)</span>
<span class="k">case</span> <span class="p">{</span> <span class="n">args</span><span class="p">:,</span> <span class="n">kwargs</span><span class="p">:,</span> <span class="ss">block: </span><span class="p">}</span>
<span class="k">in</span> <span class="ss">args: </span><span class="p">[</span><span class="nb">name</span><span class="p">]</span>
<span class="nb">puts</span> <span class="nb">name</span>
<span class="k">in</span> <span class="ss">args: </span><span class="p">[</span><span class="n">first_name</span><span class="p">,</span> <span class="n">last_name</span><span class="p">]</span>
<span class="nb">puts</span> <span class="s2">"Hi there </span><span class="si">#{</span><span class="n">first_name</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">last_name</span><span class="si">}</span><span class="s2">"</span>
<span class="k">in</span> <span class="ss">kwargs: </span><span class="p">{</span><span class="n">greeting</span><span class="p">:}</span>
<span class="nb">puts</span> <span class="s2">"Hello </span><span class="si">#{</span><span class="n">greeting</span><span class="si">}</span><span class="s2">"</span>
<span class="k">else</span>
<span class="nb">puts</span> <span class="s2">"No match: </span><span class="si">#{</span><span class="n">args</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">foo</span> <span class="s2">"Hi"</span>
<span class="n">foo</span> <span class="s2">"Brad"</span><span class="p">,</span> <span class="s2">"Gessler"</span>
<span class="n">foo</span> <span class="ss">greeting: </span><span class="s2">"Brad"</span>
</code></pre>
<p>Or an array like this:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">bar</span><span class="p">(</span><span class="o">*</span><span class="n">args</span><span class="p">,</span> <span class="o">**</span><span class="n">kwargs</span><span class="p">,</span> <span class="o">&</span><span class="n">block</span><span class="p">)</span>
<span class="k">case</span> <span class="p">[</span><span class="n">args</span><span class="p">,</span> <span class="n">kwargs</span><span class="p">,</span> <span class="n">block</span><span class="p">]</span>
<span class="k">in</span> <span class="p">[</span><span class="nb">name</span><span class="p">],</span> <span class="p">{},</span> <span class="kp">nil</span>
<span class="nb">puts</span> <span class="nb">name</span>
<span class="k">in</span> <span class="p">[</span><span class="n">first_name</span><span class="p">,</span> <span class="n">last_name</span><span class="p">],</span> <span class="p">{},</span> <span class="kp">nil</span>
<span class="nb">puts</span> <span class="s2">"Hi there </span><span class="si">#{</span><span class="n">first_name</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">last_name</span><span class="si">}</span><span class="s2">"</span>
<span class="k">in</span> <span class="p">[],</span> <span class="p">{</span><span class="n">greeting</span><span class="p">:},</span> <span class="kp">nil</span>
<span class="nb">puts</span> <span class="s2">"Hello </span><span class="si">#{</span><span class="n">greeting</span><span class="si">}</span><span class="s2">"</span>
<span class="k">else</span>
<span class="nb">puts</span> <span class="s2">"No match: </span><span class="si">#{</span><span class="n">args</span><span class="si">}</span><span class="s2">, </span><span class="si">#{</span><span class="n">kwargs</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">bar</span> <span class="s2">"Howdy"</span>
<span class="n">bar</span> <span class="s2">"Bradley"</span><span class="p">,</span> <span class="s2">"Gessler"</span>
<span class="n">bar</span> <span class="ss">greeting: </span><span class="s2">"Bradley"</span>
</code></pre>
<a name="Proposal"></a>
<h1 >Proposal<a href="#Proposal" class="wiki-anchor">¶</a></h1>
<p>I'd like to propose the same thing, but for <code>...</code>, like this:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>
<span class="k">case</span> <span class="o">...</span>
<span class="k">in</span> <span class="ss">args: </span><span class="p">[</span><span class="nb">name</span><span class="p">]</span>
<span class="nb">puts</span> <span class="nb">name</span>
<span class="k">in</span> <span class="ss">args: </span><span class="p">[</span><span class="n">first_name</span><span class="p">,</span> <span class="n">last_name</span><span class="p">]</span>
<span class="nb">puts</span> <span class="s2">"Hi there </span><span class="si">#{</span><span class="n">first_name</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">last_name</span><span class="si">}</span><span class="s2">"</span>
<span class="k">in</span> <span class="ss">kwargs: </span><span class="p">{</span><span class="n">greeting</span><span class="p">:}</span>
<span class="nb">puts</span> <span class="s2">"Hello </span><span class="si">#{</span><span class="n">greeting</span><span class="si">}</span><span class="s2">"</span>
<span class="k">else</span>
<span class="nb">puts</span> <span class="s2">"No match: </span><span class="si">#{</span><span class="n">args</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">foo</span> <span class="s2">"Hi"</span>
<span class="n">foo</span> <span class="s2">"Brad"</span><span class="p">,</span> <span class="s2">"Gessler"</span>
<span class="n">foo</span> <span class="ss">greeting: </span><span class="s2">"Brad"</span>
</code></pre>
<p>One thing I'm not sure sure about: the <code>args</code>, <code>kwargs</code>, and <code>block</code> names appear out of thin air, so ideally those could somehow be named or have a syntax that doesn't require those names.</p>
<p>The array would look like this:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">bar</span><span class="p">(</span><span class="o">...</span><span class="p">)</span>
<span class="k">case</span> <span class="o">...</span>
<span class="k">in</span> <span class="p">[</span><span class="nb">name</span><span class="p">],</span> <span class="p">{},</span> <span class="kp">nil</span>
<span class="nb">puts</span> <span class="nb">name</span>
<span class="k">in</span> <span class="p">[</span><span class="n">first_name</span><span class="p">,</span> <span class="n">last_name</span><span class="p">],</span> <span class="p">{},</span> <span class="kp">nil</span>
<span class="nb">puts</span> <span class="s2">"Hi there </span><span class="si">#{</span><span class="n">first_name</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">last_name</span><span class="si">}</span><span class="s2">"</span>
<span class="k">in</span> <span class="p">[],</span> <span class="p">{</span><span class="n">greeting</span><span class="p">:},</span> <span class="kp">nil</span>
<span class="nb">puts</span> <span class="s2">"Hello </span><span class="si">#{</span><span class="n">greeting</span><span class="si">}</span><span class="s2">"</span>
<span class="k">else</span>
<span class="nb">puts</span> <span class="s2">"No match: </span><span class="si">#{</span><span class="n">args</span><span class="si">}</span><span class="s2">, </span><span class="si">#{</span><span class="n">kwargs</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">bar</span> <span class="s2">"Howdy"</span>
<span class="n">bar</span> <span class="s2">"Bradley"</span><span class="p">,</span> <span class="s2">"Gessler"</span>
<span class="n">bar</span> <span class="ss">greeting: </span><span class="s2">"Bradley"</span>
</code></pre> Ruby master - Feature #20317 (Open): Removing the `allocate` method should cause `new` to failhttps://bugs.ruby-lang.org/issues/203172024-03-01T00:18:16Ztenderlovemaking (Aaron Patterson)tenderlove@ruby-lang.org
<p>When you remove the <code>allocate</code> method from a class the you can't allocate the class via the <code>allocate</code> method. However, you <em>can</em> allocate the class via the <code>new</code> method:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Foo</span><span class="p">;</span> <span class="k">end</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">singleton_class</span><span class="p">.</span><span class="nf">undef_method</span><span class="p">(</span><span class="ss">:allocate</span><span class="p">)</span>
<span class="k">begin</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">allocate</span> <span class="c1"># doesn't work, of course</span>
<span class="k">rescue</span> <span class="no">NoMethodError</span>
<span class="k">end</span>
<span class="k">begin</span>
<span class="no">Class</span><span class="p">.</span><span class="nf">instance_method</span><span class="p">(</span><span class="ss">:allocate</span><span class="p">).</span><span class="nf">bind_call</span><span class="p">(</span><span class="no">Foo</span><span class="p">)</span> <span class="c1"># also doesn't work</span>
<span class="k">rescue</span> <span class="no">TypeError</span>
<span class="k">end</span>
<span class="no">Foo</span><span class="p">.</span><span class="nf">new</span> <span class="c1"># works?</span>
</code></pre>
<p>I think that when we remove the <code>allocate</code> method, the <code>new</code> method should also fail as there is no <code>allocate</code> method for <code>new</code> to call.</p> Ruby master - Bug #20316 (Open): Regexp quantifier behavior changes in different syntactic context.https://bugs.ruby-lang.org/issues/203162024-02-29T17:21:18Zjirkamarsik (Jirka Marsik)
<p>In the example below, adding a vertical bar to the end of a regular expression changes what is being matched by the preceding regular expression.</p>
<pre><code>irb(main):001:0> /(|a){3}b/.match("aab")
=> #<MatchData "aab" 1:"">
irb(main):002:0> /(|a){3}b|/.match("aab")
=> #<MatchData "aab" 1:"a">
</code></pre>
<p>This is because the <code>{3}</code> quantifier is compiled into a <code>repeat</code> loop which uses the <code>OP_NULL_CHECK_END_MEMST</code> operation to perform a capture-group sensitive null-check after every loop iteration. The logic behind the <code>OP_NULL_CHECK_END_MEMST</code> operation is implemented using the <code>STACK_NULL_CHECK_MEMST</code> macro in <code>regexec.c</code>. The <code>STACK_NULL_CHECK_MEMST</code> macro checks whether any capture groups have been updated inside the last loop iteration and it does so by searching the stack for <code>STK_MEM_START</code> entries. However, such entries are not used for all capture groups. They are only used by capture groups which are listed in <code>bt_mem_start</code>. A capture group is marked as needing such bookkeeping only when it is either referenced by a back-reference or it appears in certain syntactic contexts (see e.g. around line 4096 of <code>regcomp.c</code>). This looks like an optimization that tries to avoid polluting the stack with <code>STK_MEM_START</code> entries in cases in which they are not needed. However, in this case, not putting <code>STK_MEM_START</code> entries on the stack leads to a different match result.</p>
<p>In the example above, by adding a vertical bar to the end of the regexp, we have placed the group <code>(|a)</code> inside an alternation. This means that a different operation for tracking the state of the capture group is emitted in the compiled bytecode and this leads to a different result. Incidentally, this result should be the correct result, as the null-check ends up respecting the state of capture groups, as it tries to do in Ruby.</p>
<p>This is the compilation and execution of <code>/(|a){3}b/.match("aab")</code> with ONIG_DEBUG_PARSE_TREE, ONIG_DEBUG_COMPILE and ONIG_DEBUG_MATCH. Note that <code>mem-start:1</code> is used for tracking the state of capture group 1.</p>
<pre><code>PATTERN: /(|a){3}b/ (US-ASCII)
<list:55db929991f0>
<quantifier:55db92999230>{3,3}
<enclose:55db92999330> memory:1
<alt:55db929991b0>
<string:55db929992f0>
<string:55db929992b0>a
<string:55db929993b0>b
optimize: EXACT
anchor: []
sub anchor: []
exact: [b]: length: 1
code length: 37
0:[repeat:0:27] 7:[null-check-start:0] 10:[mem-start:1] 13:[push:(+5)] 18:[jump:(+2)]
23:[exact1:a] 25:[mem-end:1] 28:[null-check-end-memst:0] 31:[repeat-inc:0] 34:[exact1:b]
36:[end]
match_at: str: 139809364021904 (0x7f27e77a9290), end: 139809364021906 (0x7f27e77a9292), start: 139809364021904 (0x7f27e77a9290), sprev: 0 ((nil))
size: 2, start offset: 0
ofs> str stk:type addr:opcode
0> "ab" 0:Alt 0:[repeat:0:27]
0> "ab" 1:Rep 7:[null-check-start:0]
0> "ab" 2:NulChS 10:[mem-start:1]
0> "ab" 2:NulChS 13:[push:(+5)]
0> "ab" 3:Alt 18:[jump:(+2)]
0> "ab" 3:Alt 25:[mem-end:1]
0> "ab" 3:Alt 28:[null-check-end-memst:0]
NULL_CHECK_END_MEMST: skip id:0, s:139809364021904 (0x7f27e77a9290)
0> "ab" 3:Alt 34:[exact1:b]
0> "ab" 2:NulChS 23:[exact1:a]
1> "b" 2:NulChS 25:[mem-end:1]
1> "b" 2:NulChS 28:[null-check-end-memst:0]
1> "b" 2:NulChS 31:[repeat-inc:0]
1> "b" 3:RepInc 7:[null-check-start:0]
1> "b" 4:NulChS 10:[mem-start:1]
1> "b" 4:NulChS 13:[push:(+5)]
1> "b" 5:Alt 18:[jump:(+2)]
1> "b" 5:Alt 25:[mem-end:1]
1> "b" 5:Alt 28:[null-check-end-memst:0]
NULL_CHECK_END_MEMST: skip id:0, s:139809364021905 (0x7f27e77a9291)
1> "b" 5:Alt 34:[exact1:b]
2> "" 5:Alt 36:[end]
</code></pre>
<p>This is the compilation and execution of <code>/(|a){3}b|/.match("aab")</code> (where the group <code>(|a)</code> appears inside an alternation) with ONIG_DEBUG_PARSE_TREE, ONIG_DEBUG_COMPILE and ONIG_DEBUG_MATCH. Note that <code>mem-start-push:1</code> is used for tracking the state of capture group 1, not <code>mem-start:1</code>.</p>
<pre><code>PATTERN: /(|a){3}b|/ (US-ASCII)
<alt:55d9a91cc3c0>
<list:55d9a91cc200>
<quantifier:55d9a91cc240>{3,3}
<enclose:55d9a91cc340> memory:1
<alt:55d9a91cc1c0>
<string:55d9a91cc300>
<string:55d9a91cc2c0>a
<string:55d9a91cc480>b
<string:55d9a91cc400>
optimize: NONE
anchor: []
code length: 47
0:[push:(+41)] 5:[repeat:0:27] 12:[null-check-start:0] 15:[mem-start-push:1] 18:[push:(+5)]
23:[jump:(+2)] 28:[exact1:a] 30:[mem-end:1] 33:[null-check-end-memst:0] 36:[repeat-inc:0]
39:[exact1:b] 41:[jump:(+0)] 46:[end]
match_at: str: 140072854131304 (0x7f6540b69268), end: 140072854131306 (0x7f6540b6926a), start: 140072854131304 (0x7f6540b69268), sprev: 0 ((nil))
size: 2, start offset: 0
ofs> str stk:type addr:opcode
0> "ab" 0:Alt 0:[push:(+41)]
0> "ab" 1:Alt 5:[repeat:0:27]
0> "ab" 2:Rep 12:[null-check-start:0]
0> "ab" 3:NulChS 15:[mem-start-push:1]
0> "ab" 4:MemS 18:[push:(+5)]
0> "ab" 5:Alt 23:[jump:(+2)]
0> "ab" 5:Alt 30:[mem-end:1]
0> "ab" 5:Alt 33:[null-check-end-memst:0]
0> "ab" 5:Alt 36:[repeat-inc:0]
0> "ab" 6:RepInc 12:[null-check-start:0]
0> "ab" 7:NulChS 15:[mem-start-push:1]
0> "ab" 8:MemS 18:[push:(+5)]
0> "ab" 9:Alt 23:[jump:(+2)]
0> "ab" 9:Alt 30:[mem-end:1]
0> "ab" 9:Alt 33:[null-check-end-memst:0]
NULL_CHECK_END_MEMST: skip id:0, s:140072854131304 (0x7f6540b69268)
0> "ab" 9:Alt 39:[exact1:b]
0> "ab" 8:MemS 28:[exact1:a]
1> "b" 8:MemS 30:[mem-end:1]
1> "b" 8:MemS 33:[null-check-end-memst:0]
1> "b" 8:MemS 36:[repeat-inc:0]
1> "b" 9:RepInc 12:[null-check-start:0]
1> "b" 10:NulChS 15:[mem-start-push:1]
1> "b" 11:MemS 18:[push:(+5)]
1> "b" 12:Alt 23:[jump:(+2)]
1> "b" 12:Alt 30:[mem-end:1]
1> "b" 12:Alt 33:[null-check-end-memst:0]
1> "b" 12:Alt 36:[repeat-inc:0]
1> "b" 13:RepInc 39:[exact1:b]
2> "" 13:RepInc 41:[jump:(+0)]
2> "" 13:RepInc 46:[end]
</code></pre> Ruby master - Bug #20315 (Open): Quantifier expansion leads to different results in Regexp.https://bugs.ruby-lang.org/issues/203152024-02-29T16:59:34Zjirkamarsik (Jirka Marsik)
<p>Consider the following series of regular expression matches:</p>
<pre><code>irb(main):001:0> /(|a)(|a)(|a)(|a)(|a)b/.match("aaaab")
=> #<MatchData "aaaab" 1:"" 2:"a" 3:"a" 4:"a" 5:"a">
irb(main):002:0> /(|a)(|a)(|a)(|a)b/.match("aaab")
=> #<MatchData "aaab" 1:"" 2:"a" 3:"a" 4:"a">
irb(main):003:0> /(|a)(|a)(|a)b/.match("aab")
=> #<MatchData "aab" 1:"" 2:"a" 3:"a">
irb(main):004:0> /(|a)(|a)b/.match("ab")
=> #<MatchData "ab" 1:"" 2:"a">
</code></pre>
<p>Let <code>X^{N}</code> mean <code>N</code> concatenated repetitions of <code>X</code>. When matching the pattern <code>/(|a)^{N}b/</code> against <code>a^{N-1}b</code>, the first group will match the empty string and the last <code>N-1</code> groups will match <code>a</code>.</p>
<p>Now, let's look at this series of similar expressions, in which <code>(|a)^{N}</code> is replaced with <code>(|a){N}</code>, i.e. a counted quantifier.</p>
<pre><code>irb(main):001:0> /(|a){5}b/.match("aaaab")
=> #<MatchData "aaaab" 1:"">
irb(main):002:0> /(|a){4}b/.match("aaab")
=> #<MatchData "aaab" 1:"">
irb(main):003:0> /(|a){3}b/.match("aab")
=> #<MatchData "aab" 1:"">
irb(main):004:0> /(|a){2}b/.match("ab")
=> #<MatchData "ab" 1:"a">
</code></pre>
<p>When matching the pattern <code>/(|a){N}b/</code> against <code>a^{N-1}b</code>, the first <code>N-1</code> iterations will match <code>a</code> and the <code>N</code>-th iteration will match the empty string (compare this with the behavior of the first series of expressions). However, something strange happens when <code>N</code> is 2. We end up getting a result which is not consistent with this series, but looks like a result that belongs to the first series discussed above.</p>
<p>This is due to quantifier expansion done by the regexp compiler (see usages of <code>QUANTIFIER_EXPAND_LIMIT_SIZE</code> in <code>regcomp.c</code>). This is an optimization that tries to remove the overhead of managing a counted repetition during regex execution at the cost of increasing the size of the compiled regex bytecode. The source of the inconsistency is caused by the fact that this optimization can actually change the semantics of the regular expression, because as we have seen above, <code>X^{N}</code> (<code>X</code> repeated <code>N</code> times) can have different semantics from <code>X{N}</code> (a single <code>X</code> with an <code>{N}</code> quantifier).</p>
<p>Compilation and execution of <code>/(|a){3}b/.match("aab")</code> with <code>ONIG_DEBUG_PARSE_TREE</code>, <code>ONIG_DEBUG_COMPILE</code> and <code>ONIG_DEBUG_MATCH</code>:</p>
<pre><code>PATTERN: /(|a){3}b/ (US-ASCII)
<list:556161bb11f0>
<quantifier:556161bb1230>{3,3}
<enclose:556161bb1330> memory:1
<alt:556161bb11b0>
<string:556161bb12f0>
<string:556161bb12b0>a
<string:556161bb13b0>b
optimize: EXACT
anchor: []
sub anchor: []
exact: [b]: length: 1
code length: 37
0:[repeat:0:27] 7:[null-check-start:0] 10:[mem-start:1] 13:[push:(+5)] 18:[jump:(+2)]
23:[exact1:a] 25:[mem-end:1] 28:[null-check-end-memst:0] 31:[repeat-inc:0] 34:[exact1:b]
36:[end]
match_at: str: 140607416406704 (0x7fe1b71b92b0), end: 140607416406706 (0x7fe1b71b92b2), start: 140607416406704 (0x7fe1b71b92b0), sprev: 0 ((nil))
size: 2, start offset: 0
ofs> str stk:type addr:opcode
0> "ab" 0:Alt 0:[repeat:0:27]
0> "ab" 1:Rep 7:[null-check-start:0]
0> "ab" 2:NulChS 10:[mem-start:1]
0> "ab" 2:NulChS 13:[push:(+5)]
0> "ab" 3:Alt 18:[jump:(+2)]
0> "ab" 3:Alt 25:[mem-end:1]
0> "ab" 3:Alt 28:[null-check-end-memst:0]
NULL_CHECK_END_MEMST: skip id:0, s:140607416406704 (0x7fe1b71b92b0)
0> "ab" 3:Alt 34:[exact1:b]
0> "ab" 2:NulChS 23:[exact1:a]
1> "b" 2:NulChS 25:[mem-end:1]
1> "b" 2:NulChS 28:[null-check-end-memst:0]
1> "b" 2:NulChS 31:[repeat-inc:0]
1> "b" 3:RepInc 7:[null-check-start:0]
1> "b" 4:NulChS 10:[mem-start:1]
1> "b" 4:NulChS 13:[push:(+5)]
1> "b" 5:Alt 18:[jump:(+2)]
1> "b" 5:Alt 25:[mem-end:1]
1> "b" 5:Alt 28:[null-check-end-memst:0]
NULL_CHECK_END_MEMST: skip id:0, s:140607416406705 (0x7fe1b71b92b1)
1> "b" 5:Alt 34:[exact1:b]
2> "" 5:Alt 36:[end]
</code></pre>
<p>Compilation and execution of <code>/(|a){2}b/.match("ab")</code> with <code>ONIG_DEBUG_PARSE_TREE</code>, <code>ONIG_DEBUG_COMPILE</code> and <code>ONIG_DEBUG_MATCH</code>:</p>
<pre><code>PATTERN: /(|a){2}b/ (US-ASCII)
<list:55bbc826c1f0>
<quantifier:55bbc826c230>{2,2}
<enclose:55bbc826c330> memory:1
<alt:55bbc826c1b0>
<string:55bbc826c2f0>
<string:55bbc826c2b0>a
<string:55bbc826c3b0>b
optimize: EXACT
anchor: []
sub anchor: []
exact: [b]: length: 1
code length: 39
0:[mem-start:1] 3:[push:(+5)] 8:[jump:(+2)] 13:[exact1:a] 15:[mem-end:1]
18:[mem-start:1] 21:[push:(+5)] 26:[jump:(+2)] 31:[exact1:a] 33:[mem-end:1]
36:[exact1:b] 38:[end]
match_at: str: 140139875963504 (0x7f74db869270), end: 140139875963506 (0x7f74db869272), start: 140139875963504 (0x7f74db869270), sprev: 0 ((nil))
size: 2, start offset: 0
ofs> str stk:type addr:opcode
0> "ab" 0:Alt 0:[mem-start:1]
0> "ab" 0:Alt 3:[push:(+5)]
0> "ab" 1:Alt 8:[jump:(+2)]
0> "ab" 1:Alt 15:[mem-end:1]
0> "ab" 1:Alt 18:[mem-start:1]
0> "ab" 1:Alt 21:[push:(+5)]
0> "ab" 2:Alt 26:[jump:(+2)]
0> "ab" 2:Alt 33:[mem-end:1]
0> "ab" 2:Alt 36:[exact1:b]
0> "ab" 1:Alt 31:[exact1:a]
1> "b" 1:Alt 33:[mem-end:1]
1> "b" 1:Alt 36:[exact1:b]
2> "" 1:Alt 38:[end]
</code></pre> Ruby master - Bug #20314 (Open): Simultaneous Timeout expires may raise an exception after the blockhttps://bugs.ruby-lang.org/issues/203142024-02-29T06:25:26Zmame (Yusuke Endoh)mame@ruby-lang.org
<p>Launchable reports <code>TestTimeout#test_nested_timeout</code> as a flaky test, and I reproduced it as follows.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s2">"timeout"</span>
<span class="k">class</span> <span class="nc">A</span> <span class="o"><</span> <span class="no">Exception</span>
<span class="k">end</span>
<span class="k">class</span> <span class="nc">B</span> <span class="o"><</span> <span class="no">Exception</span>
<span class="k">end</span>
<span class="k">begin</span>
<span class="no">Timeout</span><span class="p">.</span><span class="nf">timeout</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="no">A</span><span class="p">)</span> <span class="k">do</span>
<span class="no">Timeout</span><span class="p">.</span><span class="nf">timeout</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="no">B</span><span class="p">)</span> <span class="k">do</span>
<span class="kp">nil</span> <span class="k">while</span> <span class="kp">true</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">rescue</span> <span class="no">A</span><span class="p">,</span> <span class="no">B</span>
<span class="nb">p</span> <span class="vg">$!</span> <span class="c1">#=> #<A: execution expired></span>
<span class="c1"># Exception B is raised after the above call returns</span>
<span class="c1">#=> test.rb:16:in `p': execution expired (B)</span>
<span class="nb">p</span> <span class="ss">:end</span> <span class="c1"># not reach</span>
<span class="k">end</span>
</code></pre>
<p>This is because the timer thread performs two consecutive <code>Thread#raise</code> to the target thread.</p>
<p>I have discussed this with <a class="user active user-mention" href="https://bugs.ruby-lang.org/users/17">@ko1 (Koichi Sasada)</a> and have come up with three solutions.</p>
<a name="Solution-1"></a>
<h3 >Solution 1<a href="#Solution-1" class="wiki-anchor">¶</a></h3>
<p>When multiple nested Timeouts expire simultaneously, raise an exception for the outer-most Timeout and let the inner Timeouts expire without throwing an exception. In the above example, it would only raise A.</p>
<p>The problem with this approach is that if you are rescuing A in the inner block, it may never ends:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">Timeout</span><span class="p">.</span><span class="nf">timeout</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="no">A</span><span class="p">)</span> <span class="k">do</span>
<span class="no">Timeout</span><span class="p">.</span><span class="nf">timeout</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="no">B</span><span class="p">)</span> <span class="k">do</span>
<span class="k">begin</span>
<span class="nb">sleep</span>
<span class="k">rescue</span> <span class="no">A</span>
<span class="nb">sleep</span> <span class="c1"># The exception A is caught. The inner Timeout is already expired, so the code (may) never end.</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>Note that, if A and B did not occur at the same time, it would raise B. This is a race condition.</p>
<a name="Solution-2"></a>
<h3 >Solution 2<a href="#Solution-2" class="wiki-anchor">¶</a></h3>
<p>When multiple nested Timeouts expire simultaneously, raise an exception for the inner-most Timeout and let the outer Timeouts wait until the inner-most Timeout returns. In the above example, it would raise either A or B, not both.</p>
<p>The problem with this approach is that if you are rescuing B in the inner block, it never ends:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">Timeout</span><span class="p">.</span><span class="nf">timeout</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="no">A</span><span class="p">)</span> <span class="k">do</span>
<span class="no">Timeout</span><span class="p">.</span><span class="nf">timeout</span><span class="p">(</span><span class="mf">0.1</span><span class="p">,</span> <span class="no">B</span><span class="p">)</span> <span class="k">do</span>
<span class="k">begin</span>
<span class="nb">sleep</span>
<span class="k">rescue</span> <span class="no">B</span>
<span class="nb">sleep</span> <span class="c1"># The outer Timeout waits for the inner timeout, and the inner Timeout never return. So this code never ends.</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<a name="Solution-3"></a>
<h3 >Solution 3<a href="#Solution-3" class="wiki-anchor">¶</a></h3>
<p>Make thread interrupt queue one length. If the target thread has already been <code>Thread#raise(A)</code>, the new <code>Thread#raise(B)</code> blocks until the target thread processes A.</p>
<p>Since there will be no more simultaneous Thread#raise, there will be no more exceptions after the end of the block. The timeout timer thread should be changed in consideration that <code>Thread#raise</code> may block.</p> Ruby master - Feature #20309 (Assigned): Bundled gems for Ruby 3.5https://bugs.ruby-lang.org/issues/203092024-02-27T22:16:20Zhsbt (Hiroshi SHIBATA)hsbt@ruby-lang.org
<p>I propose migrate the following default gems to bundled gems at Ruby 3.5. So, It means users will get warnings if users try to load them.</p>
<p>(Update with 2024/03/14)</p>
<ul>
<li>ostruct
<ul>
<li>I make ostruct as optional on json at <a href="https://github.com/flori/json/pull/565" class="external">https://github.com/flori/json/pull/565</a>
</li>
</ul>
</li>
<li>logger
<ul>
<li>activesupport needs to add logger to its dependency same as bigdecimal, drb or etc.</li>
</ul>
</li>
<li>fiddle</li>
<li>pstore</li>
<li>win32ole</li>
</ul>
<p>I have a plan to migrate the following default gems too. But I need to more feedback from other committers about them.</p>
<ul>
<li>irb
<ul>
<li>We need to consider how works <code>binding.irb</code> after Ruby 3.5.</li>
<li>I consider to use <code>irb</code> without Gemfile.</li>
</ul>
</li>
<li>reline</li>
<li>readline (wrapper file for readline-ext and reline)</li>
<li>io-console
<ul>
<li>rubygems uses that. Should we make optional that?</li>
</ul>
</li>
<li>open-uri</li>
<li>yaml (wrapper file for psych)
<ul>
<li>syck is retired today. I'm not sure what people uses <code>psych</code> directly, not <code>yaml</code>.</li>
</ul>
</li>
<li>rdoc
<ul>
<li>We need to change build task like download rdoc gem before document generation.
<ul>
<li>extract <code>make doc</code> from <code>make all</code> and invoke <code>make doc</code> before <code>make install</code>.</li>
</ul>
</li>
<li>or We make document generation is optional from Ruby 3.5
<ul>
<li>We explicitly separate <code>make install</code> and <code>make install-doc</code>
</li>
</ul>
</li>
</ul>
</li>
<li>un
<ul>
<li>
<code>ruby -run</code> is one of cool feature of Ruby. Should we avoid uninstalling <code>un</code> gem?</li>
<li>mkmf uses <code>ruby -run</code> for that. I need to investigate that.</li>
</ul>
</li>
<li>singleton
<ul>
<li>This is famous design pattern. Should we enforce users add them to their Gemfile?</li>
</ul>
</li>
<li>forwadable
<ul>
<li>
<code>reline</code> needs to add forwardable their <code>runtime_dependency</code> after migration.</li>
</ul>
</li>
<li>weakref
<ul>
<li>I'm not sure how impact after migrating bundled gems.</li>
</ul>
</li>
<li>fcntl
<ul>
<li>Should we integrate these constants into ruby core?</li>
</ul>
</li>
</ul>
<p>I would like to migrate <code>ipaddr</code> and <code>uri</code> too. But these are used by webrick that is mock server for our test suite. We need to rewrite <code>webrick</code> with <code>TCPSocker</code> or extract <code>ipaddr</code> and <code>uri</code> dependency from <code>webrick</code></p>
<p>Other default gems depend on our build process or other libraries deeply. I will update this proposal if I could extract them from default gems.</p> Ruby master - Bug #20301 (Open): `Set#add?` does two hash look-upshttps://bugs.ruby-lang.org/issues/203012024-02-26T02:42:35ZAMomchilov (Alexander Momchilov)
<p>A common usage of <code>Set</code>s is to keep track of seen objects, and do something different whenever an object is seen for the first time, e.g.:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">SEEN_VALUES</span> <span class="o">=</span> <span class="no">Set</span><span class="p">.</span><span class="nf">new</span>
<span class="k">def</span> <span class="nf">receive_value</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">if</span> <span class="no">SEEN_VALUES</span><span class="p">.</span><span class="nf">add?</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="nb">puts</span> <span class="s2">"Saw </span><span class="si">#{</span><span class="n">value</span><span class="si">}</span><span class="s2"> for the first time."</span>
<span class="k">else</span>
<span class="nb">puts</span> <span class="s2">"Already seen </span><span class="si">#{</span><span class="n">value</span><span class="si">}</span><span class="s2">, ignoring."</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">receive_value</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># Saw 1 for the first time.</span>
<span class="n">receive_value</span><span class="p">(</span><span class="mi">2</span><span class="p">)</span> <span class="c1"># Saw 2 for the first time.</span>
<span class="n">receive_value</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="c1"># Saw 3 for the first time.</span>
<span class="n">receive_value</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="c1"># Already seen 1, ignoring.</span>
</code></pre>
<p>Readers might reasonably assume that <code>add?</code> is only looking up into the set a single time, but it's actually doing two separate look-ups! (<a href="https://github.com/ruby/ruby/blob/c976cb5/lib/set.rb#L517-L525" class="external">source</a>)</p>
<pre><code class="rb syntaxhl" data-language="rb"><span class="k">class</span> <span class="nc">Set</span>
<span class="k">def</span> <span class="nf">add?</span><span class="p">(</span><span class="n">o</span>
<span class="c1"># 1. `include?(o)` looks up into `@hash`</span>
<span class="c1"># 2. if the value isn't there, `add(o)` does a second look-up into `@hash`</span>
<span class="n">add</span><span class="p">(</span><span class="n">o</span><span class="p">)</span> <span class="k">unless</span> <span class="kp">include</span><span class="p">?(</span><span class="n">o</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>This gets especially expensive if the values are large hash/arrays/objects, whose <code>#hash</code> is expensive to compute.</p>
<p>We can optimize this if it was possible to set a value in hash, <em>and</em> retrieve the value that was already there, in a single go. I propose adding <code>Hash#exchange_value</code> to do exactly that. If that existed, we can re-implement <code>#add?</code> as:</p>
<pre><code class="rb syntaxhl" data-language="rb"><span class="k">class</span> <span class="nc">Set</span>
<span class="k">def</span> <span class="nf">add?</span><span class="p">(</span><span class="n">o</span><span class="p">)</span>
<span class="c1"># Only requires a single look-up into `@hash`!</span>
<span class="nb">self</span> <span class="k">unless</span> <span class="vi">@hash</span><span class="p">.</span><span class="nf">exchange_value</span><span class="p">(</span><span class="n">o</span><span class="p">,</span> <span class="kp">true</span><span class="p">)</span>
<span class="k">end</span>
</code></pre>
<p>Here's a proof-of-concept implementation: <a href="https://github.com/ruby/ruby/pull/10093" class="external">https://github.com/ruby/ruby/pull/10093</a></p>
<a name="Theory"></a>
<h1 >Theory<a href="#Theory" class="wiki-anchor">¶</a></h1>
<p>How much of a benefit this has depends on 2 factors:</p>
<ol>
<li>How much <code>#hash</code> is called, which depends on how many <strong>new</strong> objects are added to the set.
<ul>
<li>If every object is new, then <code>#hash</code> used to be called twice on every <code>#add?</code>.
<ul>
<li>This is where this improvement makes the biggest (2x!) change.</li>
</ul>
</li>
<li>If every object has already been seen, then <code>#hash</code> was never being called twice before anyway, so there would be no improvement.
<ul>
<li>It's important to not regress in this case, because many use cases of sets don't deal with many distinct objects, but just need to do quick checks against an existing set.</li>
</ul>
</li>
<li>Every other case lies somewhere in between those two, depending on the % of objects which are new.</li>
</ul>
</li>
<li>How slow <code>#hash</code> is to compute for the key
<ul>
<li>If the hash is slow to compute, this change will make a bigger improvement</li>
<li>If the hash value is fast to compute, then it won't matter as much. Even if we called it half as much, it's a minority of the total time, so it won't have much net impact.</li>
</ul>
</li>
</ol>
<a name="Benchmark-summary"></a>
<h1 >Benchmark summary<a href="#Benchmark-summary" class="wiki-anchor">¶</a></h1>
<table>
<thead>
<tr>
<th></th>
<th align="right">All objects are new</th>
<th align="right">All objects are preexisting</th>
</tr>
</thead>
<tbody>
<tr>
<td>objects with slow <code>#hash</code>
</td>
<td align="right">100.0%</td>
<td align="right">~0.0%</td>
</tr>
<tr>
<td>objects with fast <code>#hash</code>
</td>
<td align="right">24.5%</td>
<td align="right">4.6%</td>
</tr>
</tbody>
</table>
<p>As we see, this change makes a huge improvement the cases where it helps, and crucially, doesn't slow down the cases where it can't.</p>
<p>For the complete benchmark source code and results, see the PR: <a href="https://github.com/ruby/ruby/pull/10093" class="external">https://github.com/ruby/ruby/pull/10093</a></p> Ruby master - Feature #20300 (Open): Hash: set value and get pre-existing value in one callhttps://bugs.ruby-lang.org/issues/203002024-02-26T02:42:29ZAMomchilov (Alexander Momchilov)
<p>When using a Hash, sometimes you want to set a new value, <strong>and</strong> see what was already there. Today, you <strong>have</strong> to do this in two steps:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">h</span> <span class="o">=</span> <span class="p">{</span> <span class="ss">k: </span><span class="s2">"old value"</span> <span class="p">}</span>
<span class="c1"># 1. Do a look-up for `:k`.</span>
<span class="n">old_value</span> <span class="o">=</span> <span class="n">h</span><span class="p">[</span><span class="ss">:k</span><span class="p">]</span>
<span class="c1"># 2. Do another look-up for `:k`, even though we just did that!</span>
<span class="n">h</span><span class="p">[</span><span class="ss">:k</span><span class="p">]</span> <span class="o">=</span> <span class="s2">"new value"</span>
<span class="n">use</span><span class="p">(</span><span class="n">old_value</span><span class="p">)</span>
</code></pre>
<p>This requires two separate <code>Hash</code> look-ups for <code>:k</code>. This is fine for symbols, but is expensive if computing <code>#hash</code> or <code>#eql?</code> is expensive for the key. It's impossible to work around this today from pure Ruby code.</p>
<p>One example use case is <code>Set#add?</code>. See <a href="https://bugs.ruby-lang.org/issues/20301" class="external">https://bugs.ruby-lang.org/issues/20301</a> for more details.</p>
<p>I propose adding <code>Hash#exchange_value</code>, which has semantics are similar to this Ruby snippet:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Hash</span>
<span class="c1"># Exact method name TBD.</span>
<span class="k">def</span> <span class="nf">exchange_value</span><span class="p">(</span><span class="n">key</span><span class="p">,</span> <span class="n">new_value</span><span class="p">)</span>
<span class="n">old_value</span> <span class="o">=</span> <span class="nb">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span>
<span class="nb">self</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">new_value</span>
<span class="n">old_value</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>... except it'll be implemented in C, with modifications to <code>tbl_update</code> that achieves this with a hash-lookup.</p>
<p>I'm opening to alternative name suggestions. <a class="user active user-mention" href="https://bugs.ruby-lang.org/users/4">@nobu (Nobuyoshi Nakada)</a> came up with <code>exchange_value</code>, which I think is great.</p>
<p>Here's a PR with a PoC implementation: <a href="https://github.com/ruby/ruby/pull/10092" class="external">https://github.com/ruby/ruby/pull/10092</a></p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">h</span> <span class="o">=</span> <span class="p">{</span> <span class="ss">k: </span><span class="s2">"old value"</span> <span class="p">}</span>
<span class="c1"># Does only a single hash look-up</span>
<span class="n">old_value</span> <span class="o">=</span> <span class="n">h</span><span class="p">.</span><span class="nf">exchange_value</span><span class="p">(</span><span class="ss">:k</span><span class="p">,</span> <span class="s2">"new value"</span><span class="p">)</span>
<span class="n">use</span><span class="p">(</span><span class="n">old_value</span><span class="p">)</span>
</code></pre> Ruby master - Bug #20299 (Open): Tracepoint staying enable after a disablehttps://bugs.ruby-lang.org/issues/202992024-02-26T01:06:28ZMaxLap (Maxime Lapointe)hunter_spawn@hotmail.com
<p>Problem is present in Ruby 3.2.2, 3.2.3, 3.3.0. Didn't check before.</p>
<p>It seems that TracePoint can sometime be "stuck" enabled after using disabled once on it.</p>
<p>Here is a reproduction step using a "check speed" method that just does some work and print out how long it takes. This makes it pretty clear when TracePoint was on.</p>
<p>Put this in a Ruby file:</p>
<pre><code>def check_speed(msg)
t1 = Time.now.to_f
a = 0
1000000.times { |i|
a += 10
}
t2 = Time.now.to_f
puts "#{t2-t1} - #{msg}"
end
check_speed("before") # fast
trace = TracePoint.new(:line) {}
trace.enable
check_speed("after enable") # slow
trace.enable {
check_speed("in block enable") # slow
}
check_speed("after block enable") # slow
trace.disable
check_speed("after disable") # slow !!!!
trace.disable
check_speed("after disable again") # fast !!!!
# And yet, using enable multiple time doesn't have a "counter" or similar
trace.enable
trace.enable
trace.enable
check_speed("after triple enable") # slow
trace.disable
check_speed("after single disable") # fast
</code></pre>
<p>Running the file, we get this:</p>
<pre><code>$ ruby -v
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-linux]
$ ruby local.rb
0.03473854064941406 - before
0.18935227394104004 - after enable
0.17757630348205566 - in block enable
0.18320131301879883 - after block enable
0.1818866729736328 - after disable
0.03412747383117676 - after disable again
0.18405628204345703 - after triple enable
0.033496856689453125 - after single disable
</code></pre>
<p>The first "after disable" should probably have been fast. If it's possible to have multiple nested enable/disable, then one would instead assume that after the last "single disable", things would still be slow.</p>
<p>Note: This code patterns comes directly for a ruby/spec: ctrl+f for "enables trace object on calling with a block if it was already enabled"</p>
<p>I note that in Ruby 3.2, the timing are a lot less similar. I don't know why. It would seem like TracePoint got slower in Ruby 3.3.0. Is that worth checking out / making a distincct bug for?</p>
<pre><code>$ rvm use 3.2.3
Using /home/max/.rvm/gems/ruby-3.2.3
$ ruby local.rb
0.03246927261352539 - before
0.07910513877868652 - after enable
0.10309600830078125 - in block enable
0.12397646903991699 - after block enable
0.07114601135253906 - after disable
0.028218746185302734 - after disable again
0.12534689903259277 - after triple enable
0.02810525894165039 - after single disable
</code></pre> Ruby master - Feature #20298 (Open): Introduce `Time()` type-cast / constructor.https://bugs.ruby-lang.org/issues/202982024-02-26T00:34:27Zioquatix (Samuel Williams)samuel@oriontransfer.net
<p>Many Ruby primitive types have constructors, e.g. <code>Integer(...)</code>, <code>String(...)</code>, <code>Float(...)</code>, etc. These usually convert from some subset of types, e.g. <code>Float(1) -> 1.0</code> will convert an Integer to a Float, and <code>Float("1") -> 1.0</code> will parse a String to a Float, and similar for other type casts/constructors.</p>
<p>I'd like to propose we introduce something similar for <code>Time</code> (and possibly this extends to <code>Date</code>/<code>DateTime</code> in a follow up proposal).</p>
<p>Suggested implementation could look something like this:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">Time</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">case</span> <span class="n">value</span>
<span class="k">when</span> <span class="no">Time</span>
<span class="n">value</span>
<span class="k">when</span> <span class="no">Integer</span>
<span class="no">Time</span><span class="p">.</span><span class="nf">at</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">when</span> <span class="no">String</span> <span class="c1"># The format is assumed to be the result of `Time#to_s`.</span>
<span class="no">Time</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">value</span><span class="p">)</span>
<span class="k">else</span>
<span class="n">value</span><span class="p">.</span><span class="nf">to_time</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>Alternatively, we might like to be a little more specific with the <code>else</code> clause/error handling.</p>
<a name="Background"></a>
<h2 >Background<a href="#Background" class="wiki-anchor">¶</a></h2>
<p>In a project, I need to support multiple serialization formats/coders, including MessagePack, Marshal and JSON.</p>
<p>While Marshal and MessagePack are capable of serializing <code>Time</code> instances, <code>JSON</code> is not.</p>
<p>The code looks a bit like this:</p>
<pre><code>data = fetch_job_data
job = @coder.load(data)
scheduled_at = Time(job[:scheduled_at]) # Hypothetical type-cast as outlined above
</code></pre>
<a name="Additional-Observations"></a>
<h2 >Additional Observations<a href="#Additional-Observations" class="wiki-anchor">¶</a></h2>
<p>While some primitive data types accept themselves as arguments and construct by copy, e.g. <code>Array.new(Array.new)</code>, others do not, e.g. <code>Hash</code> and <code>Time</code>. Perhaps <code>Time.new(Time.new)</code> should behave similarly to <code>Array.new(Array.new)</code> - the outer instance is a copy of the inner.</p> Ruby master - Bug #20294 (Open): Parser no longer warns on some duplicated keyshttps://bugs.ruby-lang.org/issues/202942024-02-22T14:09:39Zkddnewton (Kevin Newton)kddnewton@gmail.com
<p>Previously, the parser would warn on all duplicated keys. Now some cases are not handled:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="p">{</span> <span class="mf">100.0</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span> <span class="mf">1e2</span> <span class="o">=></span> <span class="mi">1</span> <span class="p">}</span>
<span class="p">{</span> <span class="mf">100.0</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span> <span class="mf">1E2</span> <span class="o">=></span> <span class="mi">1</span> <span class="p">}</span>
<span class="p">{</span> <span class="mf">100.0</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span> <span class="mf">100.00</span> <span class="o">=></span> <span class="mi">1</span> <span class="p">}</span>
<span class="p">{</span> <span class="mf">100.0</span><span class="n">r</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span> <span class="mf">100.00</span><span class="n">r</span> <span class="o">=></span> <span class="mi">1</span> <span class="p">}</span>
<span class="p">{</span> <span class="mf">100.0</span><span class="n">i</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span> <span class="mf">100.00</span><span class="n">i</span> <span class="o">=></span> <span class="mi">1</span> <span class="p">}</span>
</code></pre> Ruby master - Feature #20291 (Open): Add --warning=category option the same as -W:categoryhttps://bugs.ruby-lang.org/issues/202912024-02-22T11:56:09Znobu (Nobuyoshi Nakada)nobu@ruby-lang.org
<p>I propose a <code>--warning</code> option that corresponds to the <code>-W</code> option, like the <code>--encoding</code> option to the <code>-E</code> option.<br>
The argument after <code>--warning=</code> is same as <code>-W:</code>.</p>
<p><a href="https://github.com/ruby/ruby/pull/4113" class="external">https://github.com/ruby/ruby/pull/4113</a></p> Ruby master - Misc #20287 (Open): DevMeeting before or after RubyKaigihttps://bugs.ruby-lang.org/issues/202872024-02-21T08:29:56Zduerst (Martin Dürst)duerst@it.aoyama.ac.jp
<p>RubyKaigi itself runs from May 15-17 (Wed-Fri) in Naha.</p>
<p>It would be nice to have a DevMeeting before or afterwards. We should try to plan ahead, so that people can make the right flight and hotel reservations early.</p>
<p>I have never been to Okinawa before and don't know any facilities that would be available.</p> Ruby master - Bug #20285 (Assigned): Stale inline method caches when refinement modules are reopenedhttps://bugs.ruby-lang.org/issues/202852024-02-21T02:44:55Zjhawthorn (John Hawthorn)
<p>This is essentially the same issue as <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: refinement (Closed)" href="https://bugs.ruby-lang.org/issues/11672">#11672</a>, but for inline method caches rather than class caches.</p>
<p>In Ruby 3.3 we started using inline caches for refinements. However, we weren't clearing inline caches when defined on a reopened refinement module.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">C</span>
<span class="k">end</span>
<span class="k">module</span> <span class="nn">R</span>
<span class="n">refine</span> <span class="no">C</span> <span class="k">do</span>
<span class="k">def</span> <span class="nf">m</span>
<span class="ss">:foo</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">using</span> <span class="no">R</span>
<span class="k">def</span> <span class="nf">m</span>
<span class="no">C</span><span class="p">.</span><span class="nf">new</span><span class="p">.</span><span class="nf">m</span>
<span class="k">end</span>
<span class="k">raise</span> <span class="k">unless</span> <span class="ss">:foo</span> <span class="o">==</span> <span class="n">m</span><span class="p">()</span>
<span class="k">module</span> <span class="nn">R</span>
<span class="n">refine</span> <span class="no">C</span> <span class="k">do</span>
<span class="k">alias</span> <span class="n">m</span> <span class="n">m</span>
<span class="k">def</span> <span class="nf">m</span>
<span class="ss">:bar</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">v</span> <span class="o">=</span> <span class="n">m</span><span class="p">()</span>
<span class="k">raise</span> <span class="s2">"expected :bar, got </span><span class="si">#{</span><span class="n">v</span><span class="p">.</span><span class="nf">inspect</span><span class="si">}</span><span class="s2">"</span> <span class="k">unless</span> <span class="ss">:bar</span> <span class="o">==</span> <span class="n">v</span>
</code></pre>
<p>This will raise in Ruby 3.3 as the inline cache finds a stale refinement, but passes in previous versions.</p> Ruby master - Bug #20283 (Open): Build failed since Ruby 3.2.3 if Xcode.app was renamed to space ...https://bugs.ruby-lang.org/issues/202832024-02-20T06:41:28Zwatson1978 (Shizuo Fujita)watson1978@gmail.com
<p>When I renamed Xcode.app to space contained name (like <code>Xcode 15.2.0.app</code>), then I met build error with Ruby 3.2.3 and Ruby 3.3.0.<br>
(Ruby 3.2.2 can be built with successfully.)</p>
<a name="How-to-reproduce"></a>
<h2 >How to reproduce<a href="#How-to-reproduce" class="wiki-anchor">¶</a></h2>
<pre><code>$ sudo mv /Applications/Xcode.app '/Applications/Xcode 15.2.app'
$ sudo xcode-select --switch '/Applications/Xcode 15.2.app'
$ tar xzf ruby-3.2.3.tar.xz
$ cd ruby-3.2.3
$ ./configure
$ make V=1
:
clang -fdeclspec -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wextra-tokens -Wdeprecated-declarations -Wdivision-by-zero -Wdiv-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wundef -pipe -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT -fPIE -I. -I.ext/include/arm64-darwin23 -I./include -I. -I./enc/unicode/15.0.0 -I/opt/homebrew/include -D_XOPEN_SOURCE -D_DARWIN_C_SOURCE -D_DARWIN_UNLIMITED_SELECT -D_REENTRANT -o dmyenc.o -c dmyenc.c
rustc --crate-name=yjit --crate-type=staticlib --edition=2021 -g -C opt-level=3 -C overflow-checks=on '--out-dir=/Users/watson/prj/ruby-3.2.3/yjit/target/release/' ./yjit/src/lib.rs
touch yjit/target/release/libyjit.a
clang -fdeclspec -O3 -fno-fast-math -ggdb3 -Wall -Wextra -Wextra-tokens -Wdeprecated-declarations -Wdivision-by-zero -Wdiv-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition -Wmissing-noreturn -Wno-cast-function-type -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter -Wno-unused-value -Wunused-variable -Wundef -pipe -L. -L/opt/homebrew/lib -fstack-protector-strong -fstack-protector-strong -Wl,-pie -framework CoreFoundation main.o dmydln.o miniinit.o dmyext.o array.o ast.o bignum.o class.o compar.o compile.o complex.o cont.o debug.o debug_counter.o dir.o dln_find.o encoding.o enum.o enumerator.o error.o eval.o file.o gc.o hash.o inits.o io.o io_buffer.o iseq.o load.o marshal.o math.o memory_view.o mjit.o mjit_c.o node.o numeric.o object.o pack.o parse.o proc.o process.o ractor.o random.o range.o rational.o re.o regcomp.o regenc.o regerror.o regexec.o regparse.o regsyntax.o ruby.o scheduler.o shape.o signal.o sprintf.o st.o strftime.o string.o struct.o symbol.o thread.o time.o transcode.o transient_heap.o util.o variable.o version.o vm.o vm_backtrace.o vm_dump.o vm_sync.o vm_trace.o yjit.o coroutine/arm64/Context.o enc/ascii.o enc/us_ascii.o enc/unicode.o enc/utf_8.o enc/trans/newline.o explicit_bzero.o setproctitle.o addr2line.o yjit/target/release/libyjit.a -lgmp -ldl -lobjc -lpthread -lpthread -o miniruby
ld: warning: ignoring duplicate libraries: '-lpthread'
ld: Undefined symbols:
_coroutine_transfer, referenced from:
_fiber_setcontext in cont.o
clang: error: linker command failed with exit code 1 (use -v to see invocation)
</code></pre>
<a name="Environment"></a>
<h2 >Environment<a href="#Environment" class="wiki-anchor">¶</a></h2>
<ul>
<li>Apple M1 Max</li>
<li>macOS 14.3.1</li>
<li>clang 15.0.0 (clang-1500.1.0.2.5)</li>
<li>rustc 1.75.0</li>
</ul>
<a name="Note"></a>
<h2 >Note<a href="#Note" class="wiki-anchor">¶</a></h2>
<p>This problem occurs on Intel Mac and Apple M1 Mac both.</p> Ruby master - Feature #20282 (Open): Enhancing Ruby's Coverage with Per-Test Coverage Reportshttps://bugs.ruby-lang.org/issues/202822024-02-19T22:51:10Zioquatix (Samuel Williams)samuel@oriontransfer.net
<p>As Ruby applications grow in complexity, the need for more sophisticated testing and coverage analysis tools becomes paramount. Current coverage tools in Ruby offer a good starting point but fall short in delivering the granularity and flexibility required by modern development practices. Specifically, there is a significant gap in "per-test coverage" reporting, which limits developers' ability to pinpoint exactly which tests exercise which lines of code. This proposal seeks to initiate a discussion around improving Ruby's coverage module to address this gap.</p>
<a name="Objectives"></a>
<h2 >Objectives<a href="#Objectives" class="wiki-anchor">¶</a></h2>
<p>The primary goal of this initiative is to introduce support for per-test coverage reports within Ruby, focusing on three key areas:</p>
<ol>
<li>
<p>Scoped Coverage Data Capture: Implementing the capability to capture coverage data within user-defined scopes, such as global, thread, or fiber scopes. This would allow for more granular control over the coverage analysis process.</p>
</li>
<li>
<p>Efficient Data Capture Controls: Developing mechanisms to efficiently control the capture of coverage data. This includes the ability to exclude specific files, include/ignore/merge eval'd code, to ensure that the coverage data is both relevant and manageable.</p>
</li>
<li>
<p>Compatibility and Consistency: Ensuring that the coverage data is exposed in a manner that is consistent with existing coverage tools and standards. This compatibility is crucial for integrating with a wide array of tooling and for facilitating a seamless developer experience.</p>
</li>
</ol>
<a name="Proposed-Solutions"></a>
<h2 >Proposed Solutions<a href="#Proposed-Solutions" class="wiki-anchor">¶</a></h2>
<p>The heart of this proposal lies in the introduction of a new subclassable component within the Coverage module, tentatively named <code>Coverage::Capture</code>. This component would allow users to define custom coverage capture behaviors tailored to their specific needs. Below is a hypothetical interface for such a mechanism:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Coverage::Capture</span>
<span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">start</span>
<span class="nb">self</span><span class="p">.</span><span class="nf">new</span><span class="p">.</span><span class="nf">tap</span><span class="p">(</span><span class="o">&</span><span class="ss">:start</span><span class="p">)</span>
<span class="k">end</span>
<span class="c1"># Start receiving coverage callbacks.</span>
<span class="k">def</span> <span class="nf">start</span>
<span class="k">end</span>
<span class="c1"># Stop receiving coverage callbacks.</span>
<span class="k">def</span> <span class="nf">stop</span>
<span class="k">end</span>
<span class="c1"># User-overridable statement coverage callback.</span>
<span class="k">def</span> <span class="nf">statement</span><span class="p">(</span><span class="n">iseq</span><span class="p">,</span> <span class="n">location</span><span class="p">)</span>
<span class="n">fetch</span><span class="p">(</span><span class="n">iseq</span><span class="p">)</span><span class="o">&</span><span class="p">.</span><span class="nf">statement_coverage</span><span class="p">.</span><span class="nf">increment</span><span class="p">(</span><span class="n">location</span><span class="p">)</span>
<span class="k">end</span>
<span class="c1"># Additional methods for branch/declaration coverage would follow a similar pattern.</span>
<span class="k">end</span>
<span class="k">class</span> <span class="nc">MyCoverageCapture</span> <span class="o"><</span> <span class="no">Coverage</span><span class="o">::</span><span class="no">Capture</span>
<span class="c1"># Provides efficient data capture controls - can return nil if skipping coverage for this iseq, or can store coverage data per-thread, per-fiber, etc.</span>
<span class="k">def</span> <span class="nf">fetch</span><span class="p">(</span><span class="n">iseq</span><span class="p">)</span>
<span class="vi">@coverage</span><span class="p">[</span><span class="n">iseq</span><span class="p">]</span> <span class="o">||=</span> <span class="no">Coverage</span><span class="p">.</span><span class="nf">default_coverage</span><span class="p">(</span><span class="n">iseq</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="c1"># Usage example:</span>
<span class="n">my_coverage_capture</span> <span class="o">=</span> <span class="no">MyCoverageCapture</span><span class="p">.</span><span class="nf">start</span>
<span class="c1"># Execute test suite or specific tests</span>
<span class="n">my_coverage_capture</span><span class="p">.</span><span class="nf">stop</span>
<span class="c1"># Access detailed coverage data</span>
<span class="nb">puts</span> <span class="n">my_coverage_capture</span><span class="p">.</span><span class="nf">coverage</span><span class="p">.</span><span class="nf">statement_coverage</span>
</code></pre>
<p>In addition, we'd need a well defined interface for <code>Coverage.default_coverage</code>, which includes line, branch and declaration coverage statistics. I suggest we take inspiration from the proposed interface defined by the vscode text editor: <a href="https://github.com/microsoft/vscode/blob/b44593a612337289c079425a5b2cc7010216eef4/src/vscode-dts/vscode.proposed.testCoverage.d.ts" class="external">https://github.com/microsoft/vscode/blob/b44593a612337289c079425a5b2cc7010216eef4/src/vscode-dts/vscode.proposed.testCoverage.d.ts</a> - this interface was designed to be compatible with a wide range of coverage libraries, so represents the intersection of that functionality.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># Hypothetical interface (mostly copied from vscode's proposed interface):</span>
<span class="k">module</span> <span class="nn">Coverage</span>
<span class="c1"># Contains coverage metadata for a file</span>
<span class="k">class</span> <span class="nc">Target</span>
<span class="nb">attr_reader</span> <span class="ss">:instruction_sequence</span>
<span class="nb">attr_accessor</span> <span class="ss">:statement_coverage</span><span class="p">,</span> <span class="ss">:branch_coverage</span><span class="p">,</span> <span class="ss">:declaration_coverage</span><span class="p">,</span> <span class="ss">:detailed_coverage</span>
<span class="c1"># @param statement_coverage [Hash(Location, StatementCoverage)] A hash table of statement coverage instances keyed on location.</span>
<span class="c1"># Similar structures for other coverage data.</span>
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">instruction_sequence</span><span class="p">,</span> <span class="n">statement_coverage</span><span class="p">,</span> <span class="n">branch_coverage</span><span class="o">=</span><span class="kp">nil</span><span class="p">,</span> <span class="n">declaration_coverage</span><span class="o">=</span><span class="kp">nil</span><span class="p">)</span>
<span class="vi">@instruction_sequence</span> <span class="o">=</span> <span class="n">instruction_sequence</span>
<span class="vi">@statement_coverage</span> <span class="o">=</span> <span class="n">statement_coverage</span>
<span class="vi">@branch_coverage</span> <span class="o">=</span> <span class="n">branch_coverage</span>
<span class="vi">@declaration_coverage</span> <span class="o">=</span> <span class="n">declaration_coverage</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="c1"># Coverage information for a single statement or line.</span>
<span class="k">class</span> <span class="nc">StatementCoverage</span>
<span class="c1"># The number of times this statement was executed, or a boolean indicating</span>
<span class="c1"># whether it was executed if the exact count is unknown. If zero or false,</span>
<span class="c1"># the statement will be marked as un-covered.</span>
<span class="nb">attr_accessor</span> <span class="ss">:executed</span>
<span class="c1"># Statement location (line number? or range? or position? AST?)</span>
<span class="nb">attr_accessor</span> <span class="ss">:location</span>
<span class="c1"># Coverage from branches of this line or statement. If it's not a</span>
<span class="c1"># conditional, this will be empty.</span>
<span class="nb">attr_accessor</span> <span class="ss">:branches</span>
<span class="c1"># Initializes a new instance of the StatementCoverage class.</span>
<span class="c1">#</span>
<span class="c1"># @parameter executed [Number, Boolean] The number of times this statement was executed, or a</span>
<span class="c1"># boolean indicating whether it was executed if the exact count is unknown. If zero or false,</span>
<span class="c1"># the statement will be marked as un-covered.</span>
<span class="c1">#</span>
<span class="c1"># @parameter location [Position, Range] The statement position.</span>
<span class="c1">#</span>
<span class="c1"># @parameter branches [Array(BranchCoverage)] Coverage from branches of this line.</span>
<span class="c1"># If it's not a conditional, this should be omitted.</span>
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">executed</span><span class="p">,</span> <span class="n">location</span><span class="p">,</span> <span class="n">branches</span><span class="o">=</span><span class="p">[])</span>
<span class="vi">@executed</span> <span class="o">=</span> <span class="n">executed</span>
<span class="vi">@location</span> <span class="o">=</span> <span class="n">location</span>
<span class="vi">@branches</span> <span class="o">=</span> <span class="n">branches</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="c1"># Coverage information for a branch</span>
<span class="k">class</span> <span class="nc">BranchCoverage</span>
<span class="c1"># The number of times this branch was executed, or a boolean indicating</span>
<span class="c1"># whether it was executed if the exact count is unknown. If zero or false,</span>
<span class="c1"># the branch will be marked as un-covered.</span>
<span class="nb">attr_accessor</span> <span class="ss">:executed</span>
<span class="c1"># Branch location.</span>
<span class="nb">attr_accessor</span> <span class="ss">:location</span>
<span class="c1"># Label for the branch, used in the context of "the ${label} branch was</span>
<span class="c1"># not taken," for example.</span>
<span class="nb">attr_accessor</span> <span class="ss">:label</span>
<span class="c1"># Initializes a new instance of the BranchCoverage class.</span>
<span class="c1">#</span>
<span class="c1"># @param executed [Number, Boolean] The number of times this branch was executed, or a</span>
<span class="c1"># boolean indicating whether it was executed if the exact count is unknown. If zero or false,</span>
<span class="c1"># the branch will be marked as un-covered.</span>
<span class="c1">#</span>
<span class="c1"># @param location [Position, Range] (optional) The branch position.</span>
<span class="c1">#</span>
<span class="c1"># @param label [String] (optional) Label for the branch, used in the context of</span>
<span class="c1"># "the ${label} branch was not taken," for example.</span>
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">executed</span><span class="p">,</span> <span class="n">location</span><span class="o">=</span><span class="kp">nil</span><span class="p">,</span> <span class="n">label</span><span class="o">=</span><span class="kp">nil</span><span class="p">)</span>
<span class="vi">@executed</span> <span class="o">=</span> <span class="n">executed</span>
<span class="vi">@location</span> <span class="o">=</span> <span class="n">location</span>
<span class="vi">@label</span> <span class="o">=</span> <span class="n">label</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="c1"># Coverage information for a declaration</span>
<span class="k">class</span> <span class="nc">DeclarationCoverage</span>
<span class="c1"># Name of the declaration. Depending on the reporter and language, this</span>
<span class="c1"># may be types such as functions, methods, or namespaces.</span>
<span class="nb">attr_accessor</span> <span class="ss">:name</span>
<span class="c1"># The number of times this declaration was executed, or a boolean</span>
<span class="c1"># indicating whether it was executed if the exact count is unknown. If</span>
<span class="c1"># zero or false, the declaration will be marked as un-covered.</span>
<span class="nb">attr_accessor</span> <span class="ss">:executed</span>
<span class="c1"># Declaration location.</span>
<span class="nb">attr_accessor</span> <span class="ss">:location</span>
<span class="c1"># Initializes a new instance of the DeclarationCoverage class.</span>
<span class="c1">#</span>
<span class="c1"># @param name [String] Name of the declaration.</span>
<span class="c1">#</span>
<span class="c1"># @param executed [Number, Boolean] The number of times this declaration was executed, or a</span>
<span class="c1"># boolean indicating whether it was executed if the exact count is unknown. If zero or false,</span>
<span class="c1"># the declaration will be marked as un-covered.</span>
<span class="c1">#</span>
<span class="c1"># @param location [Position, Range] The declaration position.</span>
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="nb">name</span><span class="p">,</span> <span class="n">executed</span><span class="p">,</span> <span class="n">location</span><span class="p">)</span>
<span class="vi">@name</span> <span class="o">=</span> <span class="nb">name</span>
<span class="vi">@executed</span> <span class="o">=</span> <span class="n">executed</span>
<span class="vi">@location</span> <span class="o">=</span> <span class="n">location</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>By following this format, we will be compatible with a wide range of external tools.</p> Ruby master - Feature #20278 (Open): syntax error, unexpected local variable or method, expecting...https://bugs.ruby-lang.org/issues/202782024-02-18T22:32:05ZrubyFeedback (robert heiler)
<p>So this is not quite a bug, but I thought it may fit better here, as it is neither a feature, and also not quite fitting under misc.</p>
<p>Before I will explain the issue, let me copy/paste the code I use so that others can reproduce what I mean:</p>
<pre><code>class Foobar
def foo1
var1 = 1
var2 = 2
Foobar.some_method(
var1
var2
)
end
def self.some_method(a, b)
puts a
end
end
Foobar.new
</code></pre>
<p>If it helps, the faulty lines are those between line 7 and 8, where I passed two variables var1 and var2, but I forgot a ',' between these two.</p>
<p>I actually had this happen just now in another (real) code, and the error message confused me.</p>
<p>Anyway, there are two things I want to report here. First, the smaller issue - the description show on the commandline is strange:</p>
<pre><code>expected a `)` to close the argumentsexpected a newline or semicolon after the statementcannot parse the expression
</code></pre>
<p>Normally it should read "to close the arguments expected". It seems the ' ' space character between "arguments expected" is swallowed; same with the "statementcannot". But that is just description - I report it in the event someone else also finds it strange. I actually did not see it at first as I always look at the bottom first, so I tend to miss what appears on top. Anyway.</p>
<p>The second one, and reason why I wrote this issue here, is that the error shown is a bit confusing:</p>
<pre><code>ack.rb:8: syntax error, unexpected local variable or method, expecting ')' (SyntaxError)
var2
</code></pre>
<p>So ruby indicates that there is an issue with var2 and a ')' was expecting. But I think ruby should instead have<br>
expected a ','. I don't know whether ruby can distinguish between this; both var1 and var2 were already defined prior, so I think in theory the ruby parser could find out that there are two separate variables, and assume that a ',' could also be missing. I don't know if this is always the case, but at the least I think in the example code I showed, ruby saying that a ')' was expected, was wrong, in my opinion.</p>
<p>Again, perhaps ruby has no way to distinguish, but as ruby gives a specific suggestion that there is a missing ')', when in reality I was missing the ',', is in my opinion incorrect. Perhaps it is not worth to fix it, but being able to distinguish at the least between two local variables (as in var1 and var2) should be possible, and perhaps the overall message shown could be improved a bit. For instance, the line " the argumentsexpected" could perhaps not only NOT swallow the ' ' but also be displayed on two lines. I am not sure if this makes it better or worse, since people's preferences are different. Either way I wanted to bring this to attention here.</p> Ruby master - Misc #20272 (Open): Ambiguity around Ractor message sending FIFO semanticshttps://bugs.ruby-lang.org/issues/202722024-02-16T18:26:09Zforthoney (Seong-Heon Jung)castlehoneyjung@gmail.com
<p>The docs should explicitly state the semantics/properties of Ractor message, especially when it comes to FIFO.<br>
For example, assume I have two Ractors, Ractor A and Ractor B. Ractor A sends two messages <code>"hello"</code> and <code>"world"</code> in this order to Ractor B.<br>
If I call <code>Ractor.receive</code> on Ractor B, am I guaranteed to see <code>"hello"</code> and then <code>"world"</code> or is it possible the messages are delivered out of order?</p> Ruby master - Bug #20271 (Open): Issue with moving embedded string across ractorshttps://bugs.ruby-lang.org/issues/202712024-02-16T16:29:35Zluke-gru (Luke Gruber)luke.gru@gmail.com
<p>When embedded strings are moved, not all the embedded bytes are copied over to the new embedded string. This shows itself when<br>
an embedded string has more than 16 characters.</p>
<p>For example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span>
<span class="n">foo</span> <span class="o">=</span> <span class="n">receive</span>
<span class="nb">puts</span> <span class="n">foo</span>
<span class="n">foo</span>
<span class="p">}</span>
<span class="n">obj</span> <span class="o">=</span> <span class="s2">"12345678"</span> <span class="o">*</span> <span class="mi">3</span>
<span class="nb">puts</span> <span class="n">obj</span>
<span class="n">r</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="ss">move: </span><span class="kp">true</span><span class="p">)</span>
<span class="n">r</span><span class="p">.</span><span class="nf">take</span>
</code></pre>
<pre><code>123456781234567812345678
1234567812345678
</code></pre> Ruby master - Bug #20269 (Open): bignum too big to convert into `long' when running String#bytesl...https://bugs.ruby-lang.org/issues/202692024-02-15T16:22:39Zsimpliandy (Andy Pfister)andy.pfister@simplificator.com
<p>Running <code>String#byteslice</code> on Ruby 3.3 on Windows results in an error when using any number bigger than 32 bits:</p>
<pre><code>"".byteslice(0, 2547483647)
(irb):1:in `byteslice': bignum too big to convert into `long' (RangeError)
from (irb):1:in `<main>'
from <internal:kernel>:187:in `loop'
from C:/Ruby33-x64/lib/ruby/gems/3.3.0/gems/irb-1.11.0/exe/irb:9:in `<top (required)>'
from C:/Ruby33-x64/bin/irb:33:in `load'
from C:/Ruby33-x64/bin/irb:33:in `<main>'
</code></pre>
<p>It works fine on MacOS:</p>
<pre><code>irb(main):001> "".byteslice(0, 2547483647)
=> ""
irb(main):002> exit
Andys-MBP:project apf$ ruby -v
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-darwin23]
</code></pre> Ruby master - Bug #20267 (Open): Hashes that use ar_table aren't moved properly across ractorshttps://bugs.ruby-lang.org/issues/202672024-02-15T15:56:49Zluke-gru (Luke Gruber)luke.gru@gmail.com
<p>This crashes in debug build and gives weird results in non debug build, because the ar_table values aren't copied over to the new "embedded" hash during a move across ractors.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span>
<span class="nb">hash</span> <span class="o">=</span> <span class="n">receive</span>
<span class="nb">puts</span> <span class="nb">hash</span>
<span class="p">}</span>
<span class="n">obj</span> <span class="o">=</span> <span class="p">{</span>
<span class="s2">"1"</span> <span class="o">=></span> <span class="mi">1</span><span class="p">,</span>
<span class="s2">"2"</span> <span class="o">=></span> <span class="mi">2</span><span class="p">,</span>
<span class="s2">"3"</span> <span class="o">=></span> <span class="mi">3</span><span class="p">,</span>
<span class="p">}</span>
<span class="nb">puts</span> <span class="n">obj</span>
<span class="n">r</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="n">obj</span><span class="p">,</span> <span class="ss">move: </span><span class="kp">true</span><span class="p">)</span>
<span class="n">r</span><span class="p">.</span><span class="nf">take</span>
</code></pre>
<p>Crash log:</p>
<pre><code>/home/lukeg/workspace/ruby-build/miniruby(sigsegv+0x4d) [0x5641e67d105d] ../ruby/signal.c:926
/lib/x86_64-linux-gnu/libc.so.6(0x7fb4baa42520) [0x7fb4baa42520]
/home/lukeg/workspace/ruby-build/miniruby(RB_BUILTIN_TYPE+0x0) [0x5641e6778db0] ../ruby/ractor.c:3128
/home/lukeg/workspace/ruby-build/miniruby(rbimpl_RB_TYPE_P_fastpath) ../ruby/include/ruby/internal/value_type.h:351
/home/lukeg/workspace/ruby-build/miniruby(RB_TYPE_P) ../ruby/include/ruby/internal/value_type.h:378
/home/lukeg/workspace/ruby-build/miniruby(RB_FL_ABLE) ../ruby/include/ruby/internal/fl_type.h:449
/home/lukeg/workspace/ruby-build/miniruby(RB_FL_TEST_RAW) ../ruby/include/ruby/internal/fl_type.h:471
/home/lukeg/workspace/ruby-build/miniruby(rb_ractor_shareable_p) ../ruby/include/ruby/ractor.h:256
/home/lukeg/workspace/ruby-build/miniruby(reset_belonging_enter) ../ruby/ractor.c:3121
</code></pre> Ruby master - Feature #20266 (Open): New syntax to escape embed strings in Regexp literalhttps://bugs.ruby-lang.org/issues/202662024-02-15T08:45:41Zusa (Usaku NAKAMURA)usa@garbagecollect.jp
<a name="Premise"></a>
<h1 >Premise<a href="#Premise" class="wiki-anchor">¶</a></h1>
<p>When using embed strings in Regexp literal, it is interpreted as a part of the Regexp.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">foo</span> <span class="o">=</span> <span class="s2">"[a-z]"</span>
<span class="nb">p</span> <span class="sr">/</span><span class="si">#{</span><span class="n">foo</span><span class="si">}</span><span class="sr">/</span> <span class="c1">#=> /[a-z]/</span>
</code></pre>
<p>So, currently we often have to escape the embed strings.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">foo</span> <span class="o">=</span> <span class="s2">"[a-z]"</span>
<span class="nb">p</span> <span class="sr">/</span><span class="si">#{</span><span class="no">Regexp</span><span class="p">.</span><span class="nf">quote</span><span class="p">(</span><span class="n">foo</span><span class="p">)</span><span class="si">}</span><span class="sr">/</span> <span class="c1">#=> /\[a\-z\]/</span>
</code></pre>
<p>This is very long and painful to write every time.<br>
So, I propose new syntax to escape embed strings automatically.</p>
<a name="Proposal"></a>
<h1 >Proposal<a href="#Proposal" class="wiki-anchor">¶</a></h1>
<p>Adding new token <code>#{=</code> in Regexp literal:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">foo</span> <span class="o">=</span> <span class="s2">"[a-z]"</span>
<span class="nb">p</span> <span class="sr">/</span><span class="si">#{</span><span class="o">=</span><span class="n">foo</span><span class="si">}</span><span class="sr">/</span> <span class="c1">#=> /\[a\-z\]/</span>
</code></pre>
<p>When <code>#{=</code> is used instead of <code>#{</code>, ruby calls <code>Regexp.quote</code> internally.</p>
<a name="Compatibility"></a>
<h1 >Compatibility<a href="#Compatibility" class="wiki-anchor">¶</a></h1>
<p>Current ruby causes syntax error when using <code>#{=</code>, then there is no incompatibilty.</p>
<a name="Out-of-scope-of-this-proposal"></a>
<h1 >Out of scope of this proposal<a href="#Out-of-scope-of-this-proposal" class="wiki-anchor">¶</a></h1>
<p>I do not propose about <code>#{=</code> in another literals. They are out of scope of this proposal.</p> Ruby master - Bug #20262 (Open): Regex mismatch between Ruby 3.2.2 and 3.3.0https://bugs.ruby-lang.org/issues/202622024-02-13T06:28:11Zweilandia (Nick Weiland)
<p>This might be a duplicate of <a href="https://bugs.ruby-lang.org/issues/20098" class="external">https://bugs.ruby-lang.org/issues/20098</a>, but I cannot make it match with the backref so maybe not.</p>
<p>Below example matches in 3.2.2 but not in 3.3.0</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">str</span> <span class="o">=</span> <span class="s2">"------------abcdefg------------#3895912"</span>
<span class="n">re</span> <span class="o">=</span> <span class="sr">/()\1\b\w*[a-zA-Z-]*\d+[\w-]{3,}\w+\b/</span>
<span class="n">re</span><span class="p">.</span><span class="nf">match?</span><span class="p">(</span><span class="n">str</span><span class="p">)</span>
</code></pre> Ruby master - Feature #20261 (Open): Add symbol synonyms for '' and nil for IO method line separa...https://bugs.ruby-lang.org/issues/202612024-02-12T20:34:51Zburdettelamar (Burdette Lamar)
<p>[Feature 20261] For IO's line-oriented read methods, there are two special values for the line-separator argument <code>sep</code>; I'm proposing to add (user-friendlier) symbol synonyms for those values:</p>
<ul>
<li>
<code>:paragraph</code> as synonym for <code>''</code> (read paragraphs).</li>
<li>
<code>:slurp</code> as synonym for <code>nil</code> (read all).</li>
</ul>
<p>Details (code, documentation, tests) may be seen at <a href="https://github.com/ruby/ruby/pull/9921" class="external">https://github.com/ruby/ruby/pull/9921</a>.</p> Ruby master - Misc #20259 (Open): Proposal to add "ruby --irb" and / or "ruby --start-irb" to sta...https://bugs.ruby-lang.org/issues/202592024-02-12T18:48:24ZrubyFeedback (robert heiler)
<p>This issue proposes to add:</p>
<p>a) a commandline flag to bin/ruby that allows the user to start irb,</p>
<p>and</p>
<p>b) allow the user to make use of ruby to start irb, via the commandline (thus, the<br>
proposal's a) and b) are naturally connected to one another, meaning that we would<br>
have a commandline flag for the binary "ruby", and this flag, when invoked, will<br>
start irb, in the current terminal, just as if we would have typed "irb")</p>
<p>Background to this proposal, including prior proposals:</p>
<p>I believe there are prior proposals that are related, such as this one here from<br>
~3 years ago:</p>
<p><a href="https://bugs.ruby-lang.org/issues/17859" class="external">https://bugs.ruby-lang.org/issues/17859</a></p>
<p>by deivid.</p>
<p>Note that my proposal is a bit different: I don't propose that "ruby" would behave<br>
like python here, but instead I would propose that bin/ruby gets a specific flag<br>
such as "--irb" and/or "--start-irb" (the latter is a bit longer to type, so the<br>
former is more convenient, but I also like that the latter, aka --start-irb is more<br>
specific, showing the intent more clearly; and we can add both flags anyway, so<br>
people can just pick what they prefer. I would probably just make an alias such<br>
as "rirb" for "ruby --start-irb" on my local system).</p>
<p>The way I came yesterday to a somewhat similar conclusion as deivid did, shall be<br>
explained next, even though my path is an indirect one.</p>
<p>As some may know, Tim (and others) are creating natalie, a ruby "dialect" (well,<br>
it'll be ruby in the end I believe but right now it does not satisfy the full<br>
ruby specification):</p>
<p><a href="https://github.com/natalie-lang/natalie" class="external">https://github.com/natalie-lang/natalie</a></p>
<p>Although there are some issues natalie currently has (it's a bit slow right now, for<br>
instance), they did invest quite a lot of time into it and it is slowly shaping up -<br>
at the least presently. More work to be done on satisfying ruby's specification.</p>
<p>Yesterday I compiled natalie from a git checkout and it compiled and installed fine.<br>
I was confused that under bin/ there was only "natalie", but no irb. I may be wrong<br>
but I think in the past I had bin/irb there too. Anyway, that then got me thinking<br>
that I may have made a mistake - but, also, why can't we just use ruby to start<br>
irb, as-is? That is, the executable called "ruby", under bin/ruby.</p>
<p>Yes, this is natalie, not ruby, I understand that. I also fully understand that MRI<br>
ruby having --irb and --start-irb does not change the situation for natalie, jruby,<br>
truffleruby - you name it. I get that, although I should like to point out that they<br>
may often follow suit what MRI ruby decides, so if they have a variant of irb, it<br>
may be likely that they would add the same or similar commandline flags to support<br>
changes in MRI, even if it may take a while (see jruby issue tracker having tons<br>
of todo-entries on github, to keep track of new ruby releases and what changed<br>
between version).</p>
<p>But I was then also wondering why ruby itself would not allow us to start irb in such<br>
a way, via "ruby". I understand that we have bin/irb, so this is not a real problem -<br>
people can just start "irb" normally. And I think we can require irb from a ruby .rb<br>
file just fine, as well, and use irb that way, all fine too. But even then I still<br>
wondered why we can not run irb via "ruby". Is there any reason that speaks against<br>
"ruby --start-irb" starting irb? I don't think the stdlib idea for ruby was to prevent<br>
ruby itself from providing convenience to the user. I also don't propose other gems<br>
to be started like that either, supporting many different commandline flags or<br>
--start=name_of_gem_here; irb is more important, in my opinion, than many other<br>
gems. The key idea for irb is to have "interactive ruby". pry pushed that idea<br>
further, and I think the recent irb releases included some ideas from pry too. ALL<br>
of these focus on an "interactive ruby", no matter the real name (be it irb,<br>
pry or anything else) - just as "python" without arguments focuses on "interactive<br>
python".</p>
<p>If we look at python, python kind of provides two ways to run things: "python foobar.py",<br>
and without argument, the interactive python. Again, I am not proposing to join that<br>
together, different to deivid's proposal, but indeed, it made me question ruby's current<br>
behaviour.</p>
<p>I think python's behaviour to be able to select either way, via "python" itself, is better;<br>
that we are unable to select which behaviour to use via commandline flag, in python, is a<br>
drawback, as jeremy pointed out since he prefers the current ruby heaviour, but via an<br>
additional commandline flag I think we can at the least get python's interactive behaviour<br>
into ruby (that is, IRB; although it should be mentioned that the new IRB is a bit different<br>
to the older IRB, but I leave it at that, since the proposal here is about starting IRB,<br>
not about IRB's behaviour - the latter is for the github project of IRB, rather than MRI's<br>
issue tracker here).</p>
<p>deivid reasoned that python's behaviour is useful for newbies, which I do not doubt. jeremy<br>
said that he prefers the current behaviour of ruby, which is also fine. An explicit commandline<br>
flag for starting irb may be a compromise, but I should like to say that my rationale today<br>
was different from deivid's one, in that I actually really want bin/ruby to give us a SIMPLE<br>
means to start irb, rather than merely "ruby" showing the same behaviour as "python" does,<br>
in regarsd to starting its interactive variant.</p>
<p>Again, I can work around this just fine, using a .rb file to start IRB and so forth, but I<br>
really think having this supported via a simple commandline flag may be more convenient. Of<br>
course, a secondary proposal to this may then be to add another commandline flag to get<br>
to support deivid's suggestion :) - but that would also be for another issue request on the<br>
bugtracker here. For this proposal, I really merely suggest to add --irb and/or --start-irb<br>
(or any other variant that may be more fitting, perhaps --interactive; the name is not so<br>
important, although it should be a convenient name and ideally short. The functionality is<br>
more important than the name.)</p>
<p>Implementation details:</p>
<p>Let's for a moment assume people may find this useful. Then the question is, which irb should<br>
be started when using "ruby --irb"?</p>
<p>Probably the most sensible default option here is to simply use whatever irb version has been<br>
installed on the target computer. Hiroshi Shibata and others worked towards gemifying ruby's<br>
stdlib, so it makes sense that "ruby --start-irb" would use the currently installed irb version,<br>
whatever that is. For most ruby users this is probably the one that came distributed with<br>
whatever ruby version they are using, at the least for modern ruby versions.</p>
<p>Otherwise they may just install a new irb version from e. g.</p>
<pre><code>https://github.com/ruby/irb
</code></pre>
<p>or whatever:</p>
<pre><code>gem install irb
</code></pre>
<p>installs. And this is then started when they do "ruby --start-irb". So, "ruby --start-irb"<br>
would be exactly the same as the user typing "irb" on the commandline, without any further<br>
arguments.</p>
<p>Of course the user can also start irb via "irb", as-is. So they'd only get an additional<br>
way to start irb. They can continue to use "irb" just fine. All that would change is that<br>
"ruby" itself would get an additional commandline argument, one that starts its "interactive<br>
part".</p>
<p>Anyway - I have no idea how much support the above would find; perhaps if jeremy is active<br>
he could compare it towards deivid's suggestion and comment on it too. I thought about<br>
appending to deivid's suggestion, but the suggestion here is a bit different, so I think<br>
it may be better to propose it as a separate one, even though it is somewhat close to his<br>
proposal, even though it is unrelated (see how I reached that conclusion, which I think is<br>
different than deivid's proposal).</p>
<p>I am not sure if there are even older proposals or not, but there may be. It's also fine<br>
to close this issue here, by the way, to keep the issue tracker list shorter (and perhaps<br>
link it towards deivid's above issue too, if this is closed, which is fine). I kind of<br>
wanted to contribute a bit to the discussion from a different point of view. Perhaps to<br>
avoid having too many open issues, this issue here could be left open for a month or<br>
two, to allow for a bit of more discussion, then it can be closed and e. g. referred to<br>
deivids' issue; and if deivid has time he may comment on the one here or his older<br>
proposal. At any rate, thank you for reading this proposal.</p>
<p>(PS: I filed it under Misc because it did not seem to necessarily be a Feature of the<br>
ruby language itself. Of course it could also fit under Feature, so I was not sure<br>
where to categorize it.)</p> Ruby master - Bug #20255 (Open): Embedded arrays aren't moved correctly across ractorshttps://bugs.ruby-lang.org/issues/202552024-02-10T17:31:30Zluke-gru (Luke Gruber)luke.gru@gmail.com
<p><code>ractor.send(ary, move: true)</code> works incorrectly because if <code>ary</code> is embedded, the new moved object doesn't populate its own embedded space, it uses the MovedObject's embedded space.</p>
<p>example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span>
<span class="n">inner_ary</span> <span class="o">=</span> <span class="n">receive</span>
<span class="n">values</span> <span class="o">=</span> <span class="p">{}</span>
<span class="n">values</span><span class="p">[</span><span class="ss">:equal</span><span class="p">]</span> <span class="o">=</span> <span class="p">(</span><span class="n">inner_ary</span> <span class="o">==</span> <span class="p">[</span><span class="s2">""</span><span class="p">,{},</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">])</span>
<span class="n">values</span><span class="p">[</span><span class="ss">:string</span><span class="p">]</span> <span class="o">=</span> <span class="n">inner_ary</span><span class="p">.</span><span class="nf">to_s</span>
<span class="n">values</span>
<span class="p">}</span>
<span class="n">ary</span> <span class="o">=</span> <span class="p">[</span><span class="no">String</span><span class="p">.</span><span class="nf">new</span><span class="p">,</span><span class="no">Hash</span><span class="p">.</span><span class="nf">new</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span><span class="p">,</span><span class="mi">4</span><span class="p">,</span><span class="mi">5</span><span class="p">,</span><span class="mi">6</span><span class="p">]</span>
<span class="n">r</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="n">ary</span><span class="p">,</span> <span class="ss">move: </span><span class="kp">true</span><span class="p">)</span>
<span class="n">r_values</span> <span class="o">=</span> <span class="n">r</span><span class="p">.</span><span class="nf">take</span>
<span class="nb">p</span> <span class="n">r_values</span><span class="p">[</span><span class="ss">:equal</span><span class="p">]</span>
<span class="nb">p</span> <span class="n">r_values</span><span class="p">[</span><span class="ss">:string</span><span class="p">]</span>
<span class="c1"># => false</span>
<span class="c1"># => "[\"\", {}, 2, 2.0, 21747991570, String, 3]"</span>
</code></pre> Ruby master - Feature #20249 (Open): Introduce a backtrace-only mode for rb_bug()https://bugs.ruby-lang.org/issues/202492024-02-09T06:37:45Zosyoyu (Daisuke Aritomo)
<a name="Background"></a>
<h2 >Background<a href="#Background" class="wiki-anchor">¶</a></h2>
<p>When a segfault or some unexpected situation occurs, <code>rb_bug()</code> is called and prints some few hundred to thousands of lines.</p>
<p>The most helpful parts are (arguably) "Ruby level backtrace information" and "C-level backtrace information", but those parts are buried in the very lengthy report.<br>
In particular, the "Other runtime information" which contains the list of loaded features (scripts?) and the process memory map could be extremely long despite it does not come very useful, at least when developing C extensions.</p>
<p>Even a minimal report from a simple script would consist of 250 lines and require 7 PgUps on my MacBook Air (13 inch) to reach the backtrace part, which contains all the information I need.</p>
<a name="Proposal"></a>
<h2 >Proposal<a href="#Proposal" class="wiki-anchor">¶</a></h2>
<p>My proposal is to default to a "minimal report" mode with a limited set of sections, perhaps only "Ruby level backtrace information" and "C level backtrace information" only</p>
<p>When a full report is desired (i.e. for bug reports), the user could re-run the script with an special environment variable, such as <code>RUBY_FULL_CRASH_REPORT=1</code>.<br>
Rust implmements a similar pattern. It doesn't print the full backtrace on panics by default; instead, it guides the user to re-run the program with <code>RUST_BACKTRACE=1</code>.</p>
<p>It might be hard to reproduce some crashes and segfaults, especially in long-running daemons. It might be nice to default to the "full" mode when stdout is not a tty, since daemons tend to run in non-tty environments.</p>
<a name="Appendix"></a>
<h2 >Appendix<a href="#Appendix" class="wiki-anchor">¶</a></h2>
<p>A typical crash report would look like this:</p>
<pre><code>../../example.rb: [BUG]
ruby 3.4.0dev (2024-01-20T15:27:19Z master 366b14c0cd) [arm64-darwin23]
-- Crash Report log information --------------------------------------------
(5 lines)
-- Control frame information -----------------------------------------------
(~50 lines)
-- Ruby level backtrace information ----------------------------------------
(depends on program; typically ~50 lines in Rails)
-- C level backtrace information -------------------------------------------
(50+-ish lines, depends on program)
-- Machine register context ------------------------------------------------
(~10 lines)
-- Threading information ---------------------------------------------------
(2 lines)
-- Other runtime information -----------------------------------------------
* Loaded script (1 line)
* Loaded features (depends on program; 800+ lines in Rails)
* Process memory map (depends on environment; around 200 lines?)
</code></pre> Ruby master - Bug #20243 (Open): M:N threading VM_ASSERT failure in rb_current_execution_context ...https://bugs.ruby-lang.org/issues/202432024-02-07T09:18:09Zkjtsanaktsidis (KJ Tsanaktsidis)kjtsanaktsidis@gmail.com
<p>When building with Clang 17 and <code>-DVM_CHECK_MODE=1</code> (with the following configure)</p>
<pre><code>optflags="-ggdb3 -fno-omit-frame-pointer -fno-optimize-sibling-calls -O3" cflags="-DVM_CHECK_MODE=1" CC=clang ../configure --prefix=/home/kj/ruby/installed --enable-yjit=dev --disable-install-doc
</code></pre>
<p>And then running the following script with the built <code>./miniruby</code> (which is actually from <code>bootstraptest/test_ractor.rb</code>):</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">counts</span> <span class="o">=</span> <span class="p">[]</span>
<span class="n">counts</span> <span class="o"><<</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">count</span>
<span class="n">ractors</span> <span class="o">=</span> <span class="p">(</span><span class="mi">1</span><span class="o">..</span><span class="mi">3</span><span class="p">).</span><span class="nf">map</span> <span class="p">{</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">receive</span> <span class="p">}</span> <span class="p">}</span>
<span class="n">counts</span> <span class="o"><<</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">count</span>
<span class="n">ractors</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nf">send</span><span class="p">(</span><span class="s1">'End 0'</span><span class="p">).</span><span class="nf">take</span>
<span class="nb">sleep</span> <span class="mf">0.1</span> <span class="k">until</span> <span class="n">ractors</span><span class="p">[</span><span class="mi">0</span><span class="p">].</span><span class="nf">inspect</span> <span class="o">=~</span> <span class="sr">/terminated/</span>
<span class="n">counts</span> <span class="o"><<</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">count</span>
<span class="n">ractors</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nf">send</span><span class="p">(</span><span class="s1">'End 1'</span><span class="p">).</span><span class="nf">take</span>
<span class="nb">sleep</span> <span class="mf">0.1</span> <span class="k">until</span> <span class="n">ractors</span><span class="p">[</span><span class="mi">1</span><span class="p">].</span><span class="nf">inspect</span> <span class="o">=~</span> <span class="sr">/terminated/</span>
<span class="n">counts</span> <span class="o"><<</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">count</span>
<span class="n">ractors</span><span class="p">[</span><span class="mi">2</span><span class="p">].</span><span class="nf">send</span><span class="p">(</span><span class="s1">'End 2'</span><span class="p">).</span><span class="nf">take</span>
<span class="nb">sleep</span> <span class="mf">0.1</span> <span class="k">until</span> <span class="n">ractors</span><span class="p">[</span><span class="mi">2</span><span class="p">].</span><span class="nf">inspect</span> <span class="o">=~</span> <span class="sr">/terminated/</span>
<span class="n">counts</span> <span class="o"><<</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">count</span>
<span class="n">counts</span><span class="p">.</span><span class="nf">inspect</span>
</code></pre>
<p>I get the following crash:</p>
<pre><code>Assertion Failed: ../vm_core.h:1957:rb_current_execution_context:ec == rb_current_ec_noinline()
ruby 3.4.0dev (2024-02-07T07:52:06Z ktsanaktsidis/igno.. 5cc6d944c2) [x86_64-linux]
-- Control frame information -----------------------------------------------
c:0003 p:0003 s:0010 e:000009 METHOD <internal:ractor>:431
c:0002 p:0004 s:0006 e:000005 BLOCK ractor_crash.rb:3 [FINISH]
c:0001 p:---- s:0003 e:000002 DUMMY [FINISH]
-- Ruby level backtrace information ----------------------------------------
ractor_crash.rb:3:in `block (2 levels) in <main>'
<internal:ractor>:431:in `receive'
-- Threading information ---------------------------------------------------
Total ractor count: 2
Ruby thread count for this ractor: 1
-- C level backtrace information -------------------------------------------
/home/kj/ruby/build/miniruby(rb_print_backtrace+0x14) [0x55faa97a4ebd] ../vm_dump.c:820
/home/kj/ruby/build/miniruby(rb_vm_bugreport) ../vm_dump.c:1151
/home/kj/ruby/build/miniruby(rb_assert_failure+0x81) [0x55faa94d2719] ../error.c:1131
./miniruby(thread_sched_wait_running_turn+0x2e9) [0x55faa9726f59]
/home/kj/ruby/build/miniruby(rb_ractor_sched_sleep+0x10b) [0x55faa972687b] ../thread_pthread.c:1348
/home/kj/ruby/build/miniruby(ractor_check_ints+0x0) [0x55faa968b328] ../ractor.c:683
/home/kj/ruby/build/miniruby(ractor_sleep_with_cleanup) ../ractor.c:684
/home/kj/ruby/build/miniruby(ractor_sleep+0x15) [0x55faa968adf4] ../ractor.c:701
/home/kj/ruby/build/miniruby(ractor_wait_receive) ../ractor.c:748
/home/kj/ruby/build/miniruby(ractor_receive+0x1f) [0x55faa968768e] ../ractor.c:762
/home/kj/ruby/build/miniruby(builtin_inline_class_431) ../ractor.rb:432
/home/kj/ruby/build/miniruby(builtin_invoker0+0x6) [0x55faa978fc66] ../vm_insnhelper.c:6746
/home/kj/ruby/build/miniruby(invoke_bf+0x39) [0x55faa979816e] ../vm_insnhelper.c:6886
/home/kj/ruby/build/miniruby(vm_invoke_builtin_delegate) ../vm_insnhelper.c:6909
/home/kj/ruby/build/miniruby(rb_vm_check_ints+0x0) [0x55faa9771fac] ../insns.def:1533
/home/kj/ruby/build/miniruby(vm_pop_frame) ../vm_insnhelper.c:419
/home/kj/ruby/build/miniruby(vm_exec_core) ../insns.def:1537
/home/kj/ruby/build/miniruby(vm_exec_loop+0x0) [0x55faa9767f02] ../vm.c:2489
/home/kj/ruby/build/miniruby(rb_vm_exec) ../vm.c:2492
/home/kj/ruby/build/miniruby(invoke_block+0x6f) [0x55faa9781a58] ../vm.c:1512
/home/kj/ruby/build/miniruby(invoke_iseq_block_from_c) ../vm.c:1582
/home/kj/ruby/build/miniruby(invoke_block_from_c_proc) ../vm.c:1680
/home/kj/ruby/build/miniruby(vm_invoke_proc) ../vm.c:1710
/home/kj/ruby/build/miniruby(rb_vm_invoke_proc_with_self+0x5a) [0x55faa9781eaa] ../vm.c:1745
/home/kj/ruby/build/miniruby(thread_do_start_proc+0x199) [0x55faa9739e19] ../thread.c:574
/home/kj/ruby/build/miniruby(thread_do_start+0x6c) [0x55faa973933f] ../thread.c:618
/home/kj/ruby/build/miniruby(thread_start_func_2) ../thread.c:668
/home/kj/ruby/build/miniruby(rb_native_mutex_lock+0x0) [0x55faa973a141] ../thread_pthread.c:2234
/home/kj/ruby/build/miniruby(thread_sched_lock_) ../thread_pthread.c:387
/home/kj/ruby/build/miniruby(call_thread_start_func_2) ../thread_pthread_mn.c:436
/home/kj/ruby/build/miniruby(co_start) ../thread_pthread_mn.c:434
</code></pre>
<p>The failing assertion is this one in vm_core.h: <a href="https://github.com/ruby/ruby/blob/42c36269403baac67b0d5dc1d6d6e31168cf6a1f/vm_core.h#L1957" class="external">https://github.com/ruby/ruby/blob/42c36269403baac67b0d5dc1d6d6e31168cf6a1f/vm_core.h#L1957</a>. It actually has a very helpful comment.</p>
<pre><code> /* On the shared objects, `__tls_get_addr()` is used to access the TLS
* and the address of the `ruby_current_ec` can be stored on a function
* frame. However, this address can be mis-used after native thread
* migration of a coroutine.
* 1) Get `ptr =&ruby_current_ec` op NT1 and store it on the frame.
* 2) Context switch and resume it on the NT2.
* 3) `ptr` is used on NT2 but it accesses to the TLS on NT1.
* This assertion checks such misusage.
*
* To avoid accidents, `GET_EC()` should be called once on the frame.
* Note that inlining can produce the problem.
*/
VM_ASSERT(ec == rb_current_ec_noinline());
</code></pre>
<p>What seems to be happening is exactly that. This is a disassembly of the relevant bits of <code>thread_sched_wait_running_turn</code>:</p>
<pre><code>........
# This is the only bits of the entire function which access the TLS base register %fs.
# It seems to have spilled the value of ruby_current_ec into %r13.
0x000055603d2e1cf8 <+136>: mov $0xffffffffffffff90,%rax
0x000055603d2e1cff <+143>: mov %fs:0x0,%r12
0x000055603d2e1d08 <+152>: add %rax,%r12
0x000055603d2e1d0b <+155>: mov %fs:(%rax),%r13
........
# There's a call to coroutine_transfer, so after this point we're returned to on a
# different thread
0x000055603d2e1e90 <+544>: call 0x55603d7fce84 <coroutine_transfer>
# But nothing ever loads the address of ruby_current_ec from %fs again (i didn't trace
# exactly the data flow from %r13 at 0x000055603d2e1d0b to here, but i assume it spilled
# somewhere and now got loaded back into %r15 here). In any case, that means %r15 here
# contains the value of ruby_current_ec from the _old_ thread, not the current one.
0x000055603d2e1e95 <+549>: mov %rbx,0x28(%r14)
0x000055603d2e1e99 <+553>: mov (%r12),%r15
0x000055603d2e1e9d <+557>: call 0x55603d33a010 <rb_current_ec_noinline>
0x000055603d2e1ea2 <+562>: cmp %rax,%r15
=> 0x000055603d2e1ea5 <+565>: jne 0x55603d2e1f3a <thread_sched_wait_running_turn+714>
........
# assertion failure code path.
0x000055603d2e1f3a <+714>: lea 0x542c0c(%rip),%rdi # 0x55603d824b4d
0x000055603d2e1f41 <+721>: lea 0x542c12(%rip),%rdx # 0x55603d824b5a
0x000055603d2e1f48 <+728>: lea 0x542c28(%rip),%rcx # 0x55603d824b77
0x000055603d2e1f4f <+735>: mov $0x7a5,%esi
0x000055603d2e1f54 <+740>: call 0x55603d08d698 <rb_assert_failure>
</code></pre>
<p>if we look at the register values from <code>0x000055603d2e1ea2</code>:</p>
<pre><code>(rr) print/x $rax
$2 = 0x55603e159ad0
(rr) print/x $r15
$3 = 0x0
</code></pre>
<p>So the value from <code>%rax</code> which came from <code>ruby_current_ec_noinline</code> is correctly the value of <code>ruby_current_ec</code> for this thread, and <code>%r15</code> contains a stale value from a previous thread.</p>
<ul>
<li>
</ul>
<p>Now, what can we <em>do</em> about this, is a different question :/ There's a really good stackoverflow answer about it here: <a href="https://stackoverflow.com/questions/75592038/how-to-disable-clang-expression-elimination-for-thread-local-variable" class="external">https://stackoverflow.com/questions/75592038/how-to-disable-clang-expression-elimination-for-thread-local-variable</a>, but to summarise</p>
<ul>
<li>longstanding GCC and Clang bugs for this exist and have been marked as WONTFIX (<a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=26461" class="external">https://gcc.gnu.org/bugzilla/show_bug.cgi?id=26461</a>, <a href="https://github.com/llvm/llvm-project/issues/19551" class="external">https://github.com/llvm/llvm-project/issues/19551</a>)</li>
<li>It's even worse than this EC problem - things like <code>errno</code> also might be incorrectly persisted across coroutine switches (so e.g. an inlined C library function could in theory set <code>errno</code> in another thread, for example)</li>
<li>C++ actually has coroutines now, so this <em>must</em> work for those. Clang at least has fixed some TLS problems in their C++ coroutine implementation (<a href="https://github.com/llvm/llvm-project/issues/47179" class="external">https://github.com/llvm/llvm-project/issues/47179</a>)</li>
</ul>
<p>Other than reimplementing all of our coroutine stuff on top of C++ coroutines, I'm not sure what else we can do. AFAICT there's no way to tell the compiler that we clobbered the <code>%fs</code> register because that's just not a thing in its model (<a href="https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66631" class="external">https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66631</a>, but i assume clang is similar).</p>
<p>Thoughts? For now I think my workaround is to disable M:N at build time when building with ASAN (or turn optimizations down). At least this isn't a problem with <code>Fiber</code> because we never move them across threads (probably for this reason in part).</p> Ruby master - Misc #20240 (Open): Unable to build ruby 3.1.0 on macOS when shared due to dylibs (...https://bugs.ruby-lang.org/issues/202402024-02-06T10:53:26Zjmarrec (Julien Marrec)
<p>I am trying to develop a conan (the C/C++ package manager) recipe for Ruby. The recipe would allow downstream users to 1) get a runnable ruby executable, and 2) be able to link to ruby, or embbed it in a C/C++ program if built statically, in an easy way.</p>
<p>Currently there is an existing ruby 3.1.0 recipe that I'm trying to adapt, so I have to support this version.</p>
<p>First off, let me say that I can succesfully build with 3.3.0, so I know something has changed for the better since then. I'm just at a lost when figuring out what I need to backport to make 3.1.0 work.</p>
<p>The original issue is that it appears miniruby is looking for some dylibs and not finding them. Even if I do define <code>LD_LIBRARY_PATH</code>, <code>DYLD_LIBRARY_PATH</code> or <code>DYLD_FALLBACK_LIBRARY_PATH</code> (any combinations of these three) in my env.</p>
<pre><code class="shell syntaxhl" data-language="shell">dsymutil exe/ruby<span class="p">;</span> <span class="o">{</span> <span class="nb">test</span> <span class="nt">-z</span> <span class="s1">''</span> <span class="o">||</span> codesign <span class="nt">-s</span> <span class="s1">''</span> <span class="nt">-f</span> exe/ruby<span class="p">;</span> <span class="o">}</span>
./miniruby <span class="se">\</span>
<span class="nt">-e</span> <span class="s1">'prog, dest, inst = ARGV; dest += "/ruby"'</span> <span class="se">\</span>
<span class="nt">-e</span> <span class="s1">'exit unless prog==inst'</span> <span class="se">\</span>
<span class="nt">-e</span> <span class="s1">'unless prog=="ruby"'</span> <span class="se">\</span>
<span class="nt">-e</span> <span class="s1">' begin File.unlink(dest); rescue Errno::ENOENT; end'</span> <span class="se">\</span>
<span class="nt">-e</span> <span class="s1">' File.symlink(prog, dest)'</span> <span class="se">\</span>
<span class="nt">-e</span> <span class="s1">'end'</span> <span class="se">\</span>
ruby exe ruby
dyld[59344]: Library not loaded: @rpath/libgmp.10.dylib
Referenced from: <356E0011-6223-321A-9179-D55618D248D0> /Users/julien/.conan2/p/b/ruby9cafa28a7060d/b/build-release/miniruby
Reason: no LC_RPATH<span class="s1">'s found
make: *** [exe/ruby] Abort trap: 6
make: *** Deleting file `exe/ruby'</span>
</code></pre>
<p>It seems that something is unsetting the variables, because this for eg works fine</p>
<pre><code class="shell syntaxhl" data-language="shell"><span class="nv">DYLD_LIBRARY_PATH</span><span class="o">=</span>/Users/julien/.conan2/p/b/zlib1f8e7d96319f0/p/lib:/Users/julien/.conan2/p/b/opense854e464e8ff6/p/lib:/Users/julien/.conan2/p/b/libyae2f0aa15c9e92/p/lib:/Users/julien/.conan2/p/b/libff05fe9d5b96f79/p/lib:/Users/julien/.conan2/p/b/readl0d0041a63fa03/p/lib:/Users/julien/.conan2/p/b/termc22b5bb1515971/p/lib:/Users/julien/.conan2/p/b/gmp676fa41eaa3d6/p/lib: /Users/julien/.conan2/p/b/ruby9cafa28a7060d/b/build-release/miniruby <span class="nt">-e</span> <span class="s2">"puts 'Hello, world'"</span>
</code></pre>
<p>My configure call is like this:</p>
<pre><code class="shell syntaxhl" data-language="shell">./configure <span class="nt">--enable-shared</span> <span class="nt">--disable-static</span> <span class="nt">--prefix</span><span class="o">=</span>/ <span class="s1">'--bindir=${prefix}/bin'</span> <span class="s1">'--sbindir=${prefix}/bin'</span> <span class="s1">'--libdir=${prefix}/lib'</span> <span class="s1">'--includedir=${prefix}/include'</span> <span class="s1">'--oldincludedir=${prefix}/include'</span> <span class="nt">--disable-install-doc</span> <span class="nt">--enable-load-relative</span> <span class="nt">--with-zlib-dir</span><span class="o">=</span>/Users/julien/.conan2/p/b/zlib1f8e7d96319f0/p <span class="nt">--with-openssl-dir</span><span class="o">=</span>/Users/julien/.conan2/p/b/opense854e464e8ff6/p <span class="nt">--with-libffi-dir</span><span class="o">=</span>/Users/julien/.conan2/p/b/libff05fe9d5b96f79/p <span class="nt">--with-libyaml-dir</span><span class="o">=</span>/Users/julien/.conan2/p/b/libyae2f0aa15c9e92/p <span class="nt">--with-readline-dir</span><span class="o">=</span>/Users/julien/.conan2/p/b/readl0d0041a63fa03/p <span class="nt">--with-gmp-dir</span><span class="o">=</span>/Users/julien/.conan2/p/b/gmp676fa41eaa3d6/p <span class="nt">--with-opt-dir</span><span class="o">=</span>/Users/julien/.conan2/p/b/opense854e464e8ff6/p:/Users/julien/.conan2/p/b/libff05fe9d5b96f79/p:/Users/julien/.conan2/p/b/libyae2f0aa15c9e92/p:/Users/julien/.conan2/p/b/readl0d0041a63fa03/p:/Users/julien/.conan2/p/b/gmp676fa41eaa3d6/p <span class="nt">--disable-jit-support</span>
</code></pre>
<p>I have tried to backport <a href="https://github.com/ruby/ruby/pull/6296/files" class="external">https://github.com/ruby/ruby/pull/6296/files</a> and <a href="https://github.com/ruby/ruby/commit/48644e71096c70132be9dfdcbfb414ec2e68d18b" class="external">https://github.com/ruby/ruby/commit/48644e71096c70132be9dfdcbfb414ec2e68d18b</a> and <a href="https://github.com/ruby/ruby/pull/8730" class="external">https://github.com/ruby/ruby/pull/8730</a> amongst other things but I can't make it work. (I even tried a more brute force approach patching a lot of files by diffing 3.3.0 with 3.1.0, but please note I don't know what I'm doing... and I can get to the install step but then I get some errors about Psych / libymal and undefined Gem::Install:Zlib).</p>
<p>I would <strong>greatly</strong> appreciate if someone can spare some time to help me wrap this up (I've been trying to make the recipe work for so long that I'm about to give up...)</p> Ruby master - Misc #20238 (Open): Use prism for mk_builtin_loader.rbhttps://bugs.ruby-lang.org/issues/202382024-02-05T20:52:02Zkddnewton (Kevin Newton)kddnewton@gmail.com
<p>I would like to propose that we use prism for mk_builtin_loader.rb.</p>
<p>Right now the Ruby syntax that you can use in builtin classes is restricted to the base Ruby version (2.7). This means you can't use a lot of the nicer syntax that Ruby has shipped in the last couple of years.</p>
<p>If we switch to using prism to parse the builtin files instead of using ripper, then we can always use the latest version of Ruby syntax. A pull request for this is here: <a href="https://github.com/kddnewton/ruby/pull/65" class="external">https://github.com/kddnewton/ruby/pull/65</a>. The approach for the PR is taken from how RJIT bindgen works.</p> Ruby master - Bug #20237 (Assigned): Unable to unshare(CLONE_NEWUSER) in Linux because of timer t...https://bugs.ruby-lang.org/issues/202372024-02-05T04:59:20Zhanazuki (Kasumi Hanazuki)
<a name="Backgrounds"></a>
<h2 >Backgrounds<a href="#Backgrounds" class="wiki-anchor">¶</a></h2>
<p><a href="https://man7.org/linux/man-pages/man2/unshare.2.html" class="external">unshare(2)</a> is a syscall in Linux to move the calling process into a fresh execution context. With <code>unshare(CLONE_NEWUSER)</code> you can move a process into a new <a href="https://man7.org/linux/man-pages/man7/user_namespaces.7.html" class="external">user_namespace(7)</a>, where the process gains the full capability on the resources within the namespace. This is fundamental for Linux containers to achieve privilege separation. <code>unshare(CLONE_NEWUSER)</code> requires the calling process to be single-threaded (or no background threads are running). So, it is often invoked after <code>fork(2)</code> as forking propagates only the calling thread to the child process.</p>
<a name="Problem"></a>
<h2 >Problem<a href="#Problem" class="wiki-anchor">¶</a></h2>
<p>It becomes a problem that Ruby 3.3 on Linux uses timer threads even for a single-<code>Thread</code>ed application. Because <code>Kernel#fork</code> spawns a thread in the child process before the control returns to the user code, there is no chance to call <code>unshare(CLONE_NEWUSER)</code> in Ruby.</p>
<p>The following snippet is a reproducer of this problem. This program first forks and then shows the user namespace to which the process belongs before and after calling unshare(2). It also shows the threads of the child process after forking.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">p</span><span class="p">(</span><span class="no">RUBY_DESCRIPTION</span><span class="p">:)</span>
<span class="nb">require</span> <span class="s1">'fiddle/import'</span>
<span class="k">module</span> <span class="nn">C</span>
<span class="kp">extend</span> <span class="no">Fiddle</span><span class="o">::</span><span class="no">Importer</span>
<span class="n">dlload</span> <span class="s1">'libc.so.6'</span>
<span class="n">extern</span> <span class="s1">'int unshare(int flags)'</span>
<span class="no">CLONE_NEWUSER</span> <span class="o">=</span> <span class="mh">0x10000000</span>
<span class="k">def</span> <span class="nc">self</span><span class="o">.</span><span class="nf">raise_system_call_error</span>
<span class="k">raise</span> <span class="no">SystemCallError</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="no">Fiddle</span><span class="p">.</span><span class="nf">last_error</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">pid</span> <span class="o">=</span> <span class="nb">fork</span> <span class="k">do</span>
<span class="nb">system</span><span class="p">(</span><span class="s2">"ps -O tid -T -p #$$"</span><span class="p">)</span>
<span class="nb">system</span><span class="p">(</span><span class="s2">"ls -l /proc/self/ns/user"</span><span class="p">)</span>
<span class="k">if</span> <span class="no">C</span><span class="p">.</span><span class="nf">unshare</span><span class="p">(</span><span class="no">C</span><span class="o">::</span><span class="no">CLONE_NEWUSER</span><span class="p">)</span> <span class="o">!=</span> <span class="mi">0</span>
<span class="no">C</span><span class="p">.</span><span class="nf">raise_system_call_error</span> <span class="c1"># => EINVAL with Ruby 3.3</span>
<span class="k">end</span>
<span class="nb">system</span><span class="p">(</span><span class="s2">"ls -l /proc/self/ns/user"</span><span class="p">)</span>
<span class="k">end</span>
<span class="nb">p</span> <span class="no">Process</span><span class="p">.</span><span class="nf">wait2</span><span class="p">(</span><span class="n">pid</span><span class="p">)</span>
</code></pre>
<p>The program successfully changes the user namespace with Ruby 3.2, but it raises EINVAL with Ruby 3.3. You can see Ruby 3.3 has two threads running after forking.</p>
<pre><code>% rbenv shell 3.2 && ruby ./test.rb
{:RUBY_DESCRIPTION=>"ruby 3.2.3 (2024-01-18 revision 52bb2ac0a6) [x86_64-linux]"}
PID TID S TTY TIME COMMAND
1585787 1585787 S pts/12 00:00:00 ruby ./test.rb
lrwxrwxrwx 1 kasumi kasumi 0 Feb 5 02:25 /proc/self/ns/user -> 'user:[4026531837]'
lrwxrwxrwx 1 nobody nogroup 0 Feb 5 02:25 /proc/self/ns/user -> 'user:[4026532675]'
[1585787, #<Process::Status: pid 1585787 exit 0>]
% rbenv shell 3.3 && ruby ./test.rb
{:RUBY_DESCRIPTION=>"ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-linux]"}
PID TID S TTY TIME COMMAND
1585849 1585849 S pts/12 00:00:00 ruby ./test.rb
1585849 1585851 S pts/12 00:00:00 ruby ./test.rb
lrwxrwxrwx 1 kasumi kasumi 0 Feb 5 02:25 /proc/self/ns/user -> 'user:[4026531837]'
./test.rb:10:in `raise_system_call_error': Invalid argument (Errno::EINVAL)
from ./test.rb:24:in `block in <main>'
from ./test.rb:19:in `fork'
from ./test.rb:19:in `<main>'
[1585849, #<Process::Status: pid 1585849 exit 1>]
% rbenv shell master && ruby ./test.rb
{:RUBY_DESCRIPTION=>"ruby 3.4.0dev (2024-02-04T16:05:02Z master 8bc6fff322) [x86_64-linux]"}
PID TID S TTY TIME COMMAND
1585965 1585965 S pts/12 00:00:00 ruby ./test.rb
1585965 1585967 S pts/12 00:00:00 ruby ./test.rb
lrwxrwxrwx 1 kasumi kasumi 0 Feb 5 02:25 /proc/self/ns/user -> 'user:[4026531837]'
./test.rb:10:in `raise_system_call_error': Invalid argument (Errno::EINVAL)
from ./test.rb:24:in `block in <main>'
from ./test.rb:19:in `fork'
from ./test.rb:19:in `<main>'
[1585965, #<Process::Status: pid 1585965 exit 1>]
</code></pre>
<a name="Workaround"></a>
<h2 >Workaround<a href="#Workaround" class="wiki-anchor">¶</a></h2>
<p>My workaround is to rebuild ruby with <code>rb_thread_stop_timer_thread</code> and <code>rb_thread_start_timer_thread</code> exported, and use a C-ext that stops the timer thread before calling <code>unshare</code>. This seems not robust because the process cannot know when the terminated thread is reclaimed by the kernel, after which the process is considered single-threaded.</p>
<pre><code class="c syntaxhl" data-language="c"><span class="cp">#define _GNU_SOURCE 1
#include</span> <span class="cpf"><sched.h></span><span class="cp">
#include</span> <span class="cpf"><ruby/ruby.h></span><span class="cp">
</span>
<span class="k">static</span> <span class="n">VALUE</span> <span class="nf">Unshare_s_unshare</span><span class="p">(</span><span class="n">VALUE</span> <span class="n">_self</span><span class="p">,</span> <span class="n">VALUE</span> <span class="n">rflags</span><span class="p">)</span> <span class="p">{</span>
<span class="kt">int</span> <span class="k">const</span> <span class="n">flags</span> <span class="o">=</span> <span class="n">NUM2INT</span><span class="p">(</span><span class="n">rflags</span><span class="p">);</span>
<span class="n">rb_thread_stop_timer_thread</span><span class="p">();</span>
<span class="n">usleep</span><span class="p">(</span><span class="mi">1000</span><span class="p">);</span> <span class="c1">// FIXME: It takes some time for the kernel to remove the stopped thread?</span>
<span class="kt">int</span> <span class="k">const</span> <span class="n">ret</span> <span class="o">=</span> <span class="n">unshare</span><span class="p">(</span><span class="n">flags</span><span class="p">);</span>
<span class="n">rb_thread_start_timer_thread</span><span class="p">();</span>
<span class="k">if</span><span class="p">(</span><span class="n">ret</span> <span class="o">!=</span> <span class="mi">0</span><span class="p">)</span> <span class="n">rb_sys_fail_str</span><span class="p">(</span><span class="n">rb_sprintf</span><span class="p">(</span><span class="s">"unshare(%#x)"</span><span class="p">,</span> <span class="n">flags</span><span class="p">));</span>
<span class="k">return</span> <span class="n">Qnil</span><span class="p">;</span>
<span class="p">}</span>
<span class="n">RUBY_FUNC_EXPORTED</span> <span class="kt">void</span>
<span class="nf">Init_unshare</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span> <span class="p">{</span>
<span class="n">VALUE</span> <span class="n">rb_mUnshare</span> <span class="o">=</span> <span class="n">rb_define_module</span><span class="p">(</span><span class="s">"Unshare"</span><span class="p">);</span>
<span class="n">rb_define_singleton_method</span><span class="p">(</span><span class="n">rb_mUnshare</span><span class="p">,</span> <span class="s">"unshare"</span><span class="p">,</span> <span class="n">Unshare_s_unshare</span><span class="p">,</span> <span class="mi">1</span><span class="p">);</span>
<span class="n">rb_define_const</span><span class="p">(</span><span class="n">rb_mUnshare</span><span class="p">,</span> <span class="s">"CLONE_NEWUSER"</span><span class="p">,</span> <span class="n">INT2FIX</span><span class="p">(</span><span class="n">CLONE_NEWUSER</span><span class="p">));</span>
<span class="p">}</span>
</code></pre>
<a name="Questions"></a>
<h2 >Questions<a href="#Questions" class="wiki-anchor">¶</a></h2>
<ul>
<li>Is this a limitation of Ruby?</li>
<li>Is it safe (or even possible) to stop the timer thread during execution?
<ul>
<li>If so, can we export it as the public API?</li>
<li>But it may not so useful for this problem as explained in the workaround.</li>
</ul>
</li>
<li>Is it guaranteed that no other threads are running after forks?</li>
<li>Are there any better ways to solve this issue?
<ul>
<li>Can we somehow delay the start of the timer thread after forking, or hook into <code>fork</code> to run some code in the child process immediately after it spawns.</li>
<li>Can they be Ruby API instead of C API?</li>
</ul>
</li>
</ul> Ruby master - Feature #20235 (Open): Deprecate CHAR syntaxhttps://bugs.ruby-lang.org/issues/202352024-02-03T16:53:15ZDan0042 (Daniel DeLorme)
<p>I propose deprecating the <code>?c</code> syntax. It served a purpose in ruby <= 1.8, but no longer.</p>
<p>The reason I'm proposing this is because today I ran into this error:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">p</span> <span class="vg">$stdin</span><span class="p">.</span><span class="nf">closed?</span><span class="o">=></span><span class="kp">true</span> <span class="c1"># comparison of String with true failed (ArgumentError)</span>
</code></pre>
<p>I was completed mystified, and had to resort to Ripper to figure out what's going on</p>
<pre><code>p *Ripper.lex("p $stdin.closed?=>true")
[[1, 0], :on_ident, "p", CMDARG]
[[1, 1], :on_sp, " ", CMDARG]
[[1, 2], :on_gvar, "$stdin", END]
[[1, 8], :on_period, ".", DOT]
[[1, 9], :on_ident, "closed", ARG]
[[1, 15], :on_CHAR, "?=", END] #OOOOHH!!!!!
[[1, 17], :on_op, ">", BEG]
[[1, 18], :on_kw, "true", END]
</code></pre>
<p>We don't have to commit to a removal schedule right now, but I think it would at least be good to print a deprecation message if $VERBOSE.</p> Ruby master - Feature #20233 (Open): pkg-config not working on MSVChttps://bugs.ruby-lang.org/issues/202332024-02-02T08:48:23Zjmarrec (Julien Marrec)
<p>The PKG_CONFIG variable is not respected in win32/Makefile.sub</p>
<p>Also, need to ideally use the <code>--msvc-syntax</code> flag (pkgconf 1.4.0, released 7 years ago, adds it).</p>
<p>But mostly, I realized that the <code>try_ldflags</code> in <code>lib/mkmf.rb</code> actually passes these ldflags as the <code>opt</code> parameter to the <code>link_command</code> function, and not as <code>ldflags</code>. While the UNIX systems are forgiving, the MSVC compiler is not, and because the flags are passed before the <code>-link</code>, MSVC complains that it ignores it and therefore cannot find the requested library.</p> Ruby master - Misc #20232 (Open): Document Kernel#require and Module#autoload concurrency guaranteeshttps://bugs.ruby-lang.org/issues/202322024-02-01T05:20:04Zfxn (Xavier Noria)fxn@hashref.com
<p>I'd like to document <code>Kernel#require</code> and <code>Module#autoload</code> concurrency guarantees.</p>
<p>In the case of multiple threads loading the same file concurrently, <code>Kernel#require</code> will succeed in just one of them and the rest will wait and return false. If a constant that has an autoload is concurrently referenced, the same can be said. Assuming no errors, only one thread will succeed, and the rest wait. There will be no context switching in the middle of an autoload that will result in a <code>NameError</code> in other threads waiting for that constant.</p>
<p>Now, I'd like to have a discussion about those guarantees with fibers.</p>
<p>In the case of manually managed fibers, users can enter a deadlock by hand:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># This produces a deadlock.</span>
<span class="no">File</span><span class="p">.</span><span class="nf">write</span><span class="p">(</span><span class="s1">'/tmp/bar.rb'</span><span class="p">,</span> <span class="o"><<~</span><span class="no">RUBY</span><span class="p">)</span><span class="sh">
Fiber.yield
</span><span class="no">RUBY</span>
<span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="nb">require</span> <span class="s1">'/tmp/bar.rb'</span> <span class="p">}.</span><span class="nf">resume</span>
<span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="nb">require</span> <span class="s1">'/tmp/bar.rb'</span> <span class="p">}.</span><span class="nf">resume</span>
</code></pre>
<p>If this is expected, I guess users should be told this is a possibility in the API dosc? Because from a user perspective, you don't really have elements to anticipate a deadlock there if the docs don't warn you.</p>
<p>A similar deadlock can be triggered with an <code>autoload</code> instead of a <code>require</code>:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># This produces a deadlock.</span>
<span class="no">File</span><span class="p">.</span><span class="nf">write</span><span class="p">(</span><span class="s1">'/tmp/bar.rb'</span><span class="p">,</span> <span class="o"><<~</span><span class="no">RUBY</span><span class="p">)</span><span class="sh">
Fiber.yield
Bar = 1
</span><span class="no">RUBY</span>
<span class="nb">autoload</span> <span class="ss">:Bar</span><span class="p">,</span> <span class="s1">'/tmp/bar.rb'</span>
<span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="no">Bar</span> <span class="p">}.</span><span class="nf">resume</span>
<span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="no">Bar</span> <span class="p">}.</span><span class="nf">resume</span>
</code></pre>
<p>A different matter is fibers managed by fiber schedulers. I have not been able to enter a deadlock with the fiber schedulers I have tried, but from the point of view of the user, doing something like I/O or sleeping at the top-level is not unlike that manual <code>Fiber.yield</code> above. The contract for fiber schedulers is mostly an interface, but it does not address this, at least in an explicit way. Do fiber schedulers guarantee anything about this with the current contract?</p>
<p>I'd be glad to volunteer docs with the conclusions of this thread.</p> Ruby master - Bug #20225 (Open): Inconsistent behavior of regex matching for a regex has a null loophttps://bugs.ruby-lang.org/issues/202252024-01-30T02:53:03Zmake_now_just (Hiroya Fujinami)make.just.on@gmail.com
<p>Usually, in Ruby (Onigmo), when a null loop (a loop consuming no characters) occurs on regex matching, this loop is terminated. But, if a loop has a capture and some complex condition is satisfied, this causes backtracking. This behavior invokes unexpected results, for example,</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">p</span> <span class="sr">/(?:.B.(?<a>(?:[C-Z]|.)*)+){2}/</span> <span class="o">=~</span> <span class="s2">"ABCABC"</span> <span class="c1"># => nil</span>
<span class="nb">p</span> <span class="sr">/(?:.B.(?:(?:[C-Z]|.)*)+){2}/</span> <span class="o">=~</span> <span class="s2">"ABCABC"</span> <span class="c1"># => 0</span>
</code></pre>
<p>Because the above regex has a capture and the below does not, different matching results are returned. It is not very intuitive that the presence of a capture changes the matching result.</p>
<p>The detailed condition for changing the null-loop behavior is 1) a previous capture in this loop holds the empty string, and 2) this capture's position is different from the current matching position. This condition is checked in <code>STACK_NULL_CHECK_MEMST</code> (<a href="https://github.com/ruby/ruby/blob/bbb7ab906ec64b963bd4b5d37e47b14796d64371/regexec.c#L1766-L1778" class="external">https://github.com/ruby/ruby/blob/bbb7ab906ec64b963bd4b5d37e47b14796d64371/regexec.c#L1766-L1778</a>).</p>
<p>Perhaps, you cannot understand what this condition means. Don't worry, I also cannot understand. This condition has been introduced for at least 20 years, and no one may remember the reason for this necessity. (If you know, please tell me!) Even if there is a reason, I believe that there is no reasonable authority for allowing counter-intuitive behavior, such as the above example.</p>
<p>This behavior can also cause memoization to be buggy. Memoization relies on the fact that backtracking only depends on positions and states (byte-code offsets of a regex). However, this condition additionally refers to captures, and the memoization is broken.</p>
<p>My proposal is to <strong>correct this inconsistent behavior</strong>. Specifically, a null loop should be determined solely on the basis of whether the matching position has changed, without referring to captures.</p>
<p>This fix changes the behavior of regex matching, but I believe that the probability that this will actually cause backward compatibility problems is remarkably low. This is because I have never seen any mention of this puzzling behavior before.</p> Ruby master - Feature #20215 (Open): Introduce `IO#readable?`https://bugs.ruby-lang.org/issues/202152024-01-26T05:19:16Zioquatix (Samuel Williams)samuel@oriontransfer.net
<p>There are some cases where, as an optimisation, it's useful to know whether more data is potentially available.</p>
<p>We already have <code>IO#eof?</code> but the problem with using <code>IO#eof?</code> is that it can block indefinitely for sockets.</p>
<p>Therefore, code which uses <code>IO#eof?</code> to determine if there is potentially more data, may hang.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">make_request</span><span class="p">(</span><span class="n">path</span> <span class="o">=</span> <span class="s2">"/"</span><span class="p">)</span>
<span class="n">client</span> <span class="o">=</span> <span class="n">connect_remote_host</span>
<span class="c1"># HTTP/1.0 request:</span>
<span class="n">client</span><span class="p">.</span><span class="nf">write</span><span class="p">(</span><span class="s2">"GET </span><span class="si">#{</span><span class="n">path</span><span class="si">}</span><span class="s2"> HTTP/1.0</span><span class="se">\r\n\r\n</span><span class="s2">"</span><span class="p">)</span>
<span class="c1"># Read response</span>
<span class="n">client</span><span class="p">.</span><span class="nf">gets</span><span class="p">(</span><span class="s2">"</span><span class="se">\r\n</span><span class="s2">"</span><span class="p">)</span> <span class="c1"># => "HTTP/1.0 200 OK\r\n"</span>
<span class="c1"># Assuming connection close, there are two things the server can do:</span>
<span class="c1"># 1. peer.close</span>
<span class="c1"># 2. peer.write(...); peer.close</span>
<span class="k">if</span> <span class="n">client</span><span class="p">.</span><span class="nf">eof?</span> <span class="c1"># <--- Can hang here!</span>
<span class="nb">puts</span> <span class="s2">"Connection closed"</span>
<span class="c1"># Avoid yielding as we know there definitely won't be any data.</span>
<span class="k">else</span>
<span class="nb">puts</span> <span class="s2">"Connection open, data may be available..."</span>
<span class="c1"># There might be data available, so yield.</span>
<span class="k">yield</span><span class="p">(</span><span class="n">client</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">ensure</span>
<span class="n">client</span><span class="o">&</span><span class="p">.</span><span class="nf">close</span>
<span class="k">end</span>
<span class="n">make_request</span> <span class="k">do</span> <span class="o">|</span><span class="n">client</span><span class="o">|</span>
<span class="nb">puts</span> <span class="n">client</span><span class="p">.</span><span class="nf">read</span> <span class="c1"># <--- Prefer to wait here.</span>
<span class="k">end</span>
</code></pre>
<p>The proposed <code>IO#readable?</code> is similar to <code>IO#eof?</code> but rather than blocking, would simply return false. The expectation is the user will subsequently call <code>read</code> which may then wait.</p>
<p>The proposed implementation would look something like this:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">IO</span>
<span class="k">def</span> <span class="nf">readable?</span>
<span class="o">!</span><span class="nb">self</span><span class="p">.</span><span class="nf">closed?</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">class</span> <span class="nc">BasicSocket</span>
<span class="c1"># Is it likely that the socket is still connected?</span>
<span class="c1"># May return false positive, but won't return false negative.</span>
<span class="k">def</span> <span class="nf">readable?</span>
<span class="k">return</span> <span class="kp">false</span> <span class="k">unless</span> <span class="k">super</span>
<span class="c1"># If we can wait for the socket to become readable, we know that the socket may still be open.</span>
<span class="n">result</span> <span class="o">=</span> <span class="nb">self</span><span class="p">.</span><span class="nf">recv_nonblock</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span> <span class="no">MSG_PEEK</span><span class="p">,</span> <span class="ss">exception: </span><span class="kp">false</span><span class="p">)</span>
<span class="c1"># No data was available - newer Ruby can return nil instead of empty string:</span>
<span class="k">return</span> <span class="kp">false</span> <span class="k">if</span> <span class="n">result</span><span class="p">.</span><span class="nf">nil?</span>
<span class="c1"># Either there was some data available, or we can wait to see if there is data avaialble.</span>
<span class="k">return</span> <span class="o">!</span><span class="n">result</span><span class="p">.</span><span class="nf">empty?</span> <span class="o">||</span> <span class="n">result</span> <span class="o">==</span> <span class="ss">:wait_readable</span>
<span class="k">rescue</span> <span class="no">Errno</span><span class="o">::</span><span class="no">ECONNRESET</span>
<span class="c1"># This might be thrown by recv_nonblock.</span>
<span class="k">return</span> <span class="kp">false</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>For <code>IO</code> itself, when there is buffered data, <code>readable?</code> would also return true immediately, similar to <code>eof?</code>. This is not shown in the above implementation as I'm not sure if there is any Ruby method which exposes "there is buffered data".</p> Ruby master - Feature #20211 (Open): Consider re-adding 3.2-style support of Anonymous Args/Blockshttps://bugs.ruby-lang.org/issues/202112024-01-25T05:00:13Zjohnnyshields (Johnny Shields)
<p>(My sincere apologies if this issue has already been raised, I didn't see it in Ruby 3.4 backlog.)</p>
<p>As per <a href="https://bugs.ruby-lang.org/issues/19370" class="external">https://bugs.ruby-lang.org/issues/19370</a>, Ruby 3.3 no longer allows the following:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">m</span><span class="p">(</span><span class="o">*</span><span class="p">)</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">].</span><span class="nf">each</span> <span class="p">{</span> <span class="o">|*|</span> <span class="nb">p</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="p">}</span>
<span class="k">end</span>
<span class="n">m</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s1">'test'</span><span class="p">,</span> <span class="s1">'test'</span><span class="p">)</span>
<span class="c1">#=> Ruby 3.2: p(*) uses args from m(*) #=> test, test, test</span>
<span class="c1">#=> Ruby 3.3: raises SyntaxError: anonymous rest parameter is also used within block</span>
</code></pre>
<p>I am concerned because Rubocop auto-corrects Ruby 3.1+ code to syntax which is no longer supported in Ruby 3.3. There may be quite a bit of Ruby code in the wild which breaks on 3.3 (my own app broke in about 50 places).</p>
<ul>
<li><a href="https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Naming/BlockForwarding" class="external">Ruby 3.1+: Naming/BlockForwarding (default true)</a></li>
<li><a href="https://www.rubydoc.info/gems/rubocop/RuboCop/Cop/Style/ArgumentsForwarding" class="external">Ruby 3.2+: Style/ArgumentsForwarding with UseAnonymousForwarding (default true)</a></li>
</ul>
<p>It would be nice if the Ruby 3.4 syntax could allow the old nested syntax, supporting arg shadowing with different behavior between implicit and explicit |*| usage.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">m</span><span class="p">(</span><span class="o">*</span><span class="p">)</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">].</span><span class="nf">each</span> <span class="p">{</span> <span class="nb">p</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="p">}</span>
<span class="k">end</span>
<span class="n">m</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s1">'test'</span><span class="p">,</span> <span class="s1">'test'</span><span class="p">)</span>
<span class="c1">#=> Ruby 3.2: p(*) uses args from m(*) #=> test, test, test</span>
<span class="c1">#=> Ruby 3.4: p(*) uses args from m(*) #=> test, test, test</span>
<span class="k">def</span> <span class="nf">m</span><span class="p">(</span><span class="o">*</span><span class="p">)</span>
<span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="mi">3</span><span class="p">].</span><span class="nf">each</span> <span class="p">{</span> <span class="o">|*|</span> <span class="nb">p</span><span class="p">(</span><span class="o">*</span><span class="p">)</span> <span class="p">}</span>
<span class="k">end</span>
<span class="n">m</span><span class="p">(</span><span class="s1">'test'</span><span class="p">,</span> <span class="s1">'test'</span><span class="p">,</span> <span class="s1">'test'</span><span class="p">)</span>
<span class="c1">#=> Ruby 3.2: p(*) uses args from m(*) #=> test, test, test</span>
<span class="c1">#=> Ruby 3.4: p(*) uses args from each #=> 1, 2, 3</span>
</code></pre>
<p>The same would also apply to anonymous blocks.</p> Ruby master - Bug #20203 (Open): `TestEnumerable` test failures with GCC 14https://bugs.ruby-lang.org/issues/202032024-01-22T17:10:42Zvo.x (Vit Ondruch)v.ondruch@tiscali.cz
<p>There is ongoing mass rebuild in Fedora and that is first time GCC 14 is used and we observe test failures in <code>TestEnumerable</code>. Here are a few examples:</p>
<pre><code>[ 3000/26419] TestEnumerable#test_transient_heap_sort_bymalloc_consolidate(): unaligned fastbin chunk detected
</code></pre>
<pre><code>[ 2455/26535] TestEnumerable#test_transient_heap_sort_bycorrupted size vs. prev_size in fastbins
</code></pre>
<pre><code>[ 9716/26532] TestEnumerable#test_any_with_unused_blockdouble free or corruption (fasttop)
</code></pre>
<p>The full logs are accessible <a href="https://koji.fedoraproject.org/koji/taskinfo?taskID=112176941" class="external">here</a>. Please drill through <code>Descendants</code> and <code>build.log</code></p> Ruby master - Feature #20196 (Open): Proposal: Binary data literalhttps://bugs.ruby-lang.org/issues/201962024-01-20T02:59:58Zziggythehamster (Keith Gable)
<p>I sometimes find myself needing to write some bytes in a Ruby string literal, and this experience leaves a lot to be desired:</p>
<ul>
<li>Bare strings don't work (potential for encoding corruption unless you remember to <code>.force_encoding</code> and never copy-paste just the literal into somewhere else) and are not particularly pleasant given all of the backslashes</li>
<li>Wrapping this in <code>String.new("\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00</code>\x00\x00\x00<code>\b\x06\x00\x00\x00\xE2\x98w8\x00\x000%IDAT", encoding: 'BINARY')</code> is better, but many tools explode with this because they expect all strings to be valid UTF-8 even if they're an argument to String.new, and it still doesn't have the "beauty" one might expect from Ruby (also it's not frozen unless you also freeze it)</li>
<li>
<code>["9805e474d0a0a1a0000000d094844425000000060000000680600000002e8977830000035294441445"].pack("h*")</code> parses in all tools and is less harsh to look at, but if you're writing binary data, you probably want to annotate it</li>
</ul>
<p>Here's my basic syntax proposal:</p>
<pre><code>%b[
89504e470d0a1a0a # PNG header
0000000d # Length = 13 bytes
49484452 # IHDR chunk
00000060 # Width = 96px
00000060 # Height = 96px
08 06 # 8bpp RGBA
00 00 00 # deflate / no filter / non-interlaced
]
# => "\x89PNG\r\n\x1A\n\x00\x00\x00\rIHDR\x00\x00\x00`\x00\x00\x00`\b\x06\x00\x00\x00"
</code></pre>
<p>More formally:</p>
<ul>
<li>To match the nibble ordering of a regular string escape, the hex characters are high nibble first (the same as the <code>H</code> unpack character).</li>
<li>It follows the same rules as other percent literals, and I am flexible on what character is used. I chose <code>b</code> because <code>h</code> could be confusing paired with the <code>h</code>/<code>H</code> unpack characters and the inverted meaning.</li>
<li>We could say that high-nibble-first is capitalized and the lower-case version is low-nibble-first, but I imagine most people will want high-nibble-first. We could also say that <code>%b[]</code> returns a <code>String</code> but <code>%B[]</code> returns an <code>IO::Buffer</code>, which has greater utility than having the capability of writing low-nibble-first literals</li>
<li>Whitespace is ignored</li>
<li>Comments are allowed</li>
<li>The encoding is always <code>Encoding::BINARY</code>
</li>
<li>The resulting string is always frozen (and if <code>%B[]</code> means buffer then that is read-only as well)</li>
<li>a-f can also be written A-F</li>
</ul>
<p>Things to consider:</p>
<ul>
<li>Interpolation could be allowed like normal strings</li>
<li>Embedding strings could be allowed (example below)</li>
<li>
<code>?</code> literals (characters) should be handled identically to how other kinds of strings are embedded if that is allowed</li>
<li>If interpolation is allowed and you interpolate a number, this should either interpolate <code>.to_s</code> as you would expect in a string or raise an error, because there is no unsurprising way to take a number and convert it to one or more bytes</li>
<li>Strings encoded as <code>Encoding::BINARY</code> could have their <code>.inspect</code> output use this literal</li>
<li>When dealing with bitmasks, it's often convenient to write them out in binary instead of hex so the on bits are easier to identify, but there is no syntax for that here that I am fond of... but someone might have an idea. I thought about <code>.00001111</code> or <code>!00001111</code> with mandatory whitespace before resuming hex characters, but those didn't feel right to me</li>
</ul>
<p>Example with embedded strings:</p>
<pre><code>%b[
89 "PNG" 0d0a1a0a # PNG header
0000000d # Length = 13 bytes
"IHDR" # IHDR chunk
00000060 # Width = 96px
00000060 # Height = 96px
08 06 # 8bpp RGBA
00 00 00 # deflate / no filter / non-interlaced
]
</code></pre>
<p>Example with interpolation:</p>
<pre><code>%b[
#{png_header}
#{ihdr = chunk(:ihdr, width: 96, height: 96, bpp: 8, format: :rgba)}
#{png_crc(ihdr)} # I didn't include this in the other examples but I needed something to demonstrate here
]
</code></pre>
<p>Other possible alternatives:</p>
<ul>
<li>A library (possibly standard library/gem) could have a function like <code>binary</code> take a string (potentially a heredoc) and parse it according to the same rules I wrote above. You would have to make the parser strip whitespace and comments, and only hex bytes could be interpolated.</li>
<li>A new pack/unpack symbol could be created that does the same thing as above, so you could <code>["hex #comments\netc"].pack("...")</code>
</li>
<li>You could probably do a lot of this with an array of hex strings and <code>pack</code> but it doesn't allow for freeform whitespace and the way you do it is not obvious without reading the docs for <code>pack</code> ... and also you allocate a bunch of strings you don't need</li>
<li>A <code>Data</code>-like object more closely related to <code>IO::Buffer</code> could be defined that declares the size of things contained within a buffer and then a constant could be written to create an instance of the Data-subclass containing the actual data you want to write out ... but this is a lot of work</li>
</ul>
<p>Potential users:</p>
<ul>
<li>People writing protocol code in Ruby</li>
<li>People who need to write out magic constants (in my case: the RDB encoding of a Redis value)</li>
<li>People using something like Metasploit Framework to reverse engineer something</li>
<li>Tools could e.g. disassemble x86 into a literal with comments showing the assembly mnemonics</li>
</ul> Ruby master - Bug #20189 (Open): `rb_str_resize` does not clear coderange when expandinghttps://bugs.ruby-lang.org/issues/201892024-01-16T12:56:47Ztompng (tomoya ishida)tomoyapenguin@gmail.com
<p>Expanding string in some encoding (utf16 utf32) can change coderange to either valid or broken, but rb_str_resize does not clear coderange.</p>
<p>This will cause a bug in c-extension libraries that use rb_str_resize.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># Example for stringio</span>
<span class="n">s</span> <span class="o">=</span> <span class="no">StringIO</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="s2">"</span><span class="se">\0</span><span class="s2">"</span><span class="p">.</span><span class="nf">encode</span><span class="p">(</span><span class="s1">'UTF-16LE'</span><span class="p">))</span>
<span class="n">s</span><span class="p">.</span><span class="nf">truncate</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> <span class="n">s</span><span class="p">.</span><span class="nf">truncate</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span> <span class="n">s</span><span class="p">.</span><span class="nf">string</span><span class="p">.</span><span class="nf">valid_encoding?</span>
<span class="c1">#=> true</span>
<span class="n">s</span><span class="p">.</span><span class="nf">truncate</span><span class="p">(</span><span class="mi">1</span><span class="p">);</span> <span class="n">s</span><span class="p">.</span><span class="nf">string</span><span class="p">.</span><span class="nf">valid_encoding?</span><span class="p">;</span> <span class="n">s</span><span class="p">.</span><span class="nf">truncate</span><span class="p">(</span><span class="mi">2</span><span class="p">);</span> <span class="n">s</span><span class="p">.</span><span class="nf">string</span><span class="p">.</span><span class="nf">valid_encoding?</span>
<span class="c1">#=> false (expect to be true)</span>
</code></pre> Ruby master - Bug #20186 (Open): Ripper does not generate AST for some keywords in Ruby 3.3https://bugs.ruby-lang.org/issues/201862024-01-16T06:39:52Zkzkn (Kazuki Nishikawa)
<p>Ripper does not generate AST for the below keyword:</p>
<ul>
<li>break</li>
<li>next</li>
<li>redo</li>
<li>retry</li>
<li>yield</li>
</ul>
<p>Ruby 3.2</p>
<pre><code>$ ruby -v
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]
$ ruby -rripper -e "p Ripper.sexp('break')"
[:program, [[:break, []]]]
$ ruby -rripper -e "p Ripper.sexp('next')"
[:program, [[:next, []]]]
$ ruby -rripper -e "p Ripper.sexp('redo')"
[:program, [[:redo]]]
$ ruby -rripper -e "p Ripper.sexp('retry')"
[:program, [[:retry]]]
$ ruby -rripper -e "p Ripper.sexp('yield')"
[:program, [[:yield0]]]
</code></pre>
<p>Ruby 3.3</p>
<pre><code>$ ruby -v
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-linux]
$ ruby -rripper -e "p Ripper.sexp('break')"
nil
$ ruby -rripper -e "p Ripper.sexp('next')"
nil
$ ruby -rripper -e "p Ripper.sexp('redo')"
nil
$ ruby -rripper -e "p Ripper.sexp('retry')"
nil
$ ruby -rripper -e "p Ripper.sexp('yield')"
nil
</code></pre>
<p>EDIT)<br>
Here is a case of real-world problem: <a href="https://github.com/ruby-formatter/rufo/issues/319" class="external">https://github.com/ruby-formatter/rufo/issues/319</a></p> Ruby master - Bug #20179 (Open): `--with-ruby-version` configure option is not correctly applied ...https://bugs.ruby-lang.org/issues/201792024-01-12T13:18:55Zvo.x (Vit Ondruch)v.ondruch@tiscali.cz
<p>I am trying to configure ruby using <code>--with-ruby-version=ruby3.3</code>. Here is the configure output:</p>
<pre><code>$ /builddir/build/BUILD/ruby-3.3.0/configure --build=x86_64-redhat-linux-gnu --host=x86_64-redhat-linux-gnu --program-prefix= --disable-dependency-tracking --prefix=/usr --exec-prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --sysconfdir=/etc --datadir=/usr/share --includedir=/usr/include --libdir=/usr/lib64 --libexecdir=/usr/libexec --localstatedir=/var --runstatedir=/run --sharedstatedir=/var/lib --mandir=/usr/share/man --infodir=/usr/share/info --with-compress-debug-sections=no --disable-rpath --enable-mkmf-verbose --enable-shared --with-ruby-version=ruby3.3 --enable-yjit
... snip ...
---
Configuration summary for ruby version 3.3.0
* Installation prefix: /usr
* exec prefix: /usr
* arch: x86_64-linux
* site arch: ${arch}
* RUBY_BASE_NAME: ruby
* enable shared: yes
* ruby lib prefix: ${libdir}/${RUBY_BASE_NAME}
* site libraries path: ${rubylibprefix}/${sitearch}
* vendor path: ${rubylibprefix}/vendor_ruby
* target OS: linux
* compiler: gcc
* with thread: pthread
* with coroutine: amd64
* enable shared libs: yes
* dynamic library ext: so
* CFLAGS: ${optflags} ${debugflags} ${warnflags}
* LDFLAGS: -L. -Wl,-z,relro -Wl,--as-needed \
-Wl,-z,pack-relative-relocs -Wl,-z,now \
-specs=/usr/lib/rpm/redhat/redhat-hardened-ld \
-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 \
-Wl,--build-id=sha1 -fstack-protector-strong \
-rdynamic -Wl,-export-dynamic -Wl,--no-as-needed
* DLDFLAGS: -Wl,-z,relro -Wl,--as-needed \
-Wl,-z,pack-relative-relocs -Wl,-z,now \
-specs=/usr/lib/rpm/redhat/redhat-hardened-ld \
-specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 \
-Wl,--build-id=sha1
* optflags: -O3 -fno-fast-math
* debugflags: -ggdb3
* warnflags: -Wall -Wextra -Wdeprecated-declarations \
-Wdiv-by-zero -Wduplicated-cond \
-Wimplicit-function-declaration -Wimplicit-int \
-Wpointer-arith -Wwrite-strings \
-Wold-style-definition -Wimplicit-fallthrough=0 \
-Wmissing-noreturn -Wno-cast-function-type \
-Wno-constant-logical-operand -Wno-long-long \
-Wno-missing-field-initializers \
-Wno-overlength-strings \
-Wno-packed-bitfield-compat \
-Wno-parentheses-equality -Wno-self-assign \
-Wno-tautological-compare -Wno-unused-parameter \
-Wno-unused-value -Wsuggest-attribute=format \
-Wsuggest-attribute=noreturn -Wunused-variable \
-Wmisleading-indentation -Wundef
* strip command: strip -S -x
* install doc: rdoc
* YJIT support: yes
* RJIT support: yes
* man page type: doc
---
</code></pre>
<p>However, the option is not applied consistently, especially the <code>rubyhdrdir</code> stands out:</p>
<pre><code>$ find . -name \*ruby3.3\*
./usr/lib64/ruby/ruby3.3
./usr/lib64/ruby/site_ruby/ruby3.3
./usr/lib64/ruby/vendor_ruby/ruby3.3
./usr/lib64/ruby/gems/ruby3.3
./usr/lib64/ruby/gems/ruby3.3/extensions/x86_64-linux/ruby3.3
./usr/include/ruby-ruby3.3
./usr/share/ri/ruby3.3
</code></pre>
<p>The correct path should be IMHO <code>./usr/include/ruby3.3</code>. I can likely workaround it by <code>--with-rubyhdrdir</code>, but I think this should behave consistently.</p> Ruby master - Feature #20177 (Open): Optimized $LOADED_FEATURES.include?https://bugs.ruby-lang.org/issues/201772024-01-10T23:06:27Zpalkan (Vladimir Dementyev)dementiev.vm@gmail.com
<p>I'd like to propose adding the optimized <code>$LOADED_FEATURES.include?</code> (not the one provided by the Array class) for faster feature checks in large codebases (when there are thousands of entries in the features list). I hit this problem while working on <a href="https://github.com/ruby-next/require-hooks#results" class="external">require-hooks</a>.</p>
<p>We can use the internal <code>vm->loaded_features_realpaths</code> Hash to achieve faster lookups (it's used by MRI's <code>require / load</code> mechanism).</p>
<p>Alternatively to overriding the <code>#include?</code> method, we can introduce a custom API similar to how <code>$LOAD_PATH.resolve_feature_path</code> has been introduced (e.g., <code>$LOADED_FEATURES.feature_loaded?(path)</code>); but since the behaviour is similar to <code>Array#include?</code>, I'd suggest re-using it (and stay backward compatible).</p> Ruby master - Feature #20176 (Open): Array#pack: support offset kwarghttps://bugs.ruby-lang.org/issues/201762024-01-10T12:46:19Zchucke (Tiago Cardoso)
<p>I was changing some code to use ruby 3.3's new <code>buffer</code> kwarg (great addition btw!) when using <code>Array#pack</code>. There are a few cases however, where I could perform the change, as not all my usages rely on appending; in some, I'm actually prepending it.</p>
<p>To solve this, I'd like to propose the <code>offset</code> kwarg, which declares where to add the resulting string. picking up on example from the docs:</p>
<pre><code>[65, 66].pack('C*', buffer: 'foo') # => "fooAB"
[65, 66].pack('C*', buffer: 'foo', offset: 0) # => "ABfoo"
[65, 66].pack('C*', buffer: 'foo', offset: 1) # => "fABoo"
</code></pre> Ruby master - Bug #20171 (Open): ri -i ruby interactive pressing tab does not autocompletehttps://bugs.ruby-lang.org/issues/201712024-01-09T17:45:34ZMystorium (Josh Goldfarb)
<p>When typing a Object or Object with a method, the tab button does not pull up autocomplete options.</p>
<p>This issue is not present in ruby 3.2.2</p>
<p>Ex</p>
<p>Type</p>
<ul>
<li>
<p>ri - i</p>
</li>
<li>
<p>String.cap</p>
</li>
</ul>
<p>Press.</p>
<ul>
<li>"Tab"</li>
</ul>
<p>What is expected</p>
<ul>
<li>autocomplete options to populate</li>
</ul>
<p>What is happening</p>
<ul>
<li>Nothing Happens when pressing tab.</li>
</ul> Ruby master - Misc #20170 (Open): Drop support for GCC < 11https://bugs.ruby-lang.org/issues/201702024-01-09T13:40:59Zkddnewton (Kevin Newton)kddnewton@gmail.com
<p>Right now, CI compiles everything from GCC 7+. However, GCC 7-10 are all end-of-life and no longer supported. We should drop support for the end-of-life compilers.</p> Ruby master - Bug #20168 (Open): Process won't exit when Ractor.select waiting a Ractorhttps://bugs.ruby-lang.org/issues/201682024-01-09T09:29:43Zshia (Sangyong Sim)
<a name="Reproduction-code"></a>
<h2 >Reproduction code<a href="#Reproduction-code" class="wiki-anchor">¶</a></h2>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">trap</span><span class="p">(</span><span class="ss">:INT</span><span class="p">)</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="s2">"SIGINT"</span>
<span class="nb">exit</span>
<span class="k">end</span>
<span class="nb">trap</span><span class="p">(</span><span class="ss">:TERM</span><span class="p">)</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="s2">"SIGTERM"</span>
<span class="nb">exit</span>
<span class="k">end</span>
<span class="n">r</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="kp">loop</span> <span class="k">do</span>
<span class="nb">sleep</span> <span class="mi">1</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">select</span><span class="p">(</span><span class="n">r</span><span class="p">)</span> <span class="c1"># stucked.</span>
<span class="c1"># SIGINT/SIGTERM sent to Ruby process(confirmed by trap),</span>
<span class="c1"># but process won't exit.</span>
</code></pre>
<a name="Expected-behavior"></a>
<h2 >Expected behavior<a href="#Expected-behavior" class="wiki-anchor">¶</a></h2>
<p>Process killed successfully with exit code 0.</p>
<a name="Affected-Ruby-version"></a>
<h2 >Affected Ruby version<a href="#Affected-Ruby-version" class="wiki-anchor">¶</a></h2>
<p>3.3.0<br>
3.2.x works as expected.</p> Ruby master - Bug #20167 (Open): Code execution isn't recorded in Ractorhttps://bugs.ruby-lang.org/issues/201672024-01-09T09:08:58Zshia (Sangyong Sim)
<a name="reproduction-code"></a>
<h2 >reproduction code<a href="#reproduction-code" class="wiki-anchor">¶</a></h2>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># frozen-string-literal: true</span>
<span class="nb">require</span> <span class="s2">"coverage"</span>
<span class="no">Coverage</span><span class="p">.</span><span class="nf">start</span>
<span class="nb">require_relative</span> <span class="s2">"./some_lib"</span>
<span class="c1"># # some_lib.rb</span>
<span class="c1"># class C</span>
<span class="c1"># def hoge(i)</span>
<span class="c1"># i</span>
<span class="c1"># end</span>
<span class="c1"># end</span>
<span class="n">r</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="kp">loop</span> <span class="k">do</span>
<span class="n">v</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">receive</span>
<span class="n">ret_v</span> <span class="o">=</span> <span class="no">C</span><span class="p">.</span><span class="nf">new</span><span class="p">.</span><span class="nf">hoge</span><span class="p">(</span><span class="n">v</span><span class="p">)</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">yield</span> <span class="n">ret_v</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="mi">2</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span> <span class="o">|</span><span class="n">i</span><span class="o">|</span>
<span class="n">r</span> <span class="o"><<</span> <span class="n">i</span>
<span class="n">r</span><span class="p">.</span><span class="nf">take</span>
<span class="k">end</span>
<span class="no">Coverage</span><span class="p">.</span><span class="nf">result</span><span class="p">.</span><span class="nf">each</span> <span class="k">do</span> <span class="o">|</span><span class="n">file</span><span class="p">,</span> <span class="n">lines</span><span class="o">|</span>
<span class="k">if</span> <span class="n">file</span><span class="p">.</span><span class="nf">include?</span><span class="p">(</span><span class="s2">"some_ractor_lib"</span><span class="p">)</span>
<span class="k">if</span> <span class="n">lines</span> <span class="o">==</span> <span class="p">[</span><span class="mi">1</span><span class="p">,</span> <span class="mi">1</span><span class="p">,</span> <span class="mi">2</span><span class="p">,</span> <span class="kp">nil</span><span class="p">,</span> <span class="kp">nil</span><span class="p">]</span>
<span class="nb">puts</span> <span class="s2">"OK"</span>
<span class="k">else</span>
<span class="nb">puts</span> <span class="s2">"expected: [1, 1, 2, nil, nil]"</span>
<span class="nb">puts</span> <span class="s2">"actual: </span><span class="si">#{</span><span class="n">lines</span><span class="p">.</span><span class="nf">inspect</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<a name="Target-ruby-version"></a>
<h2 >Target ruby version<a href="#Target-ruby-version" class="wiki-anchor">¶</a></h2>
<p>3.2.0+ affected</p> Ruby master - Bug #20165 (Open): Ractors moving a Struct breaks beyond the first 3 fieldshttps://bugs.ruby-lang.org/issues/201652024-01-08T21:02:19Zcodekitchen (Brian Palmer)
<p>Experimenting with Ractors on ruby 3.3.0, and I'm seeing a bug where if you move a struct between ractors, all but the first 3 fields are set to nil.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">Foo</span> <span class="o">=</span> <span class="no">Struct</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">:a</span><span class="p">,</span><span class="ss">:b</span><span class="p">,</span><span class="ss">:c</span><span class="p">,</span><span class="ss">:d</span><span class="p">,</span><span class="ss">:e</span><span class="p">,</span><span class="ss">:f</span><span class="p">)</span>
<span class="n">r</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span>
<span class="n">foo</span> <span class="o">=</span> <span class="no">Foo</span><span class="p">[</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">,</span><span class="mi">0</span><span class="p">]</span>
<span class="nb">p</span> <span class="n">foo</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">yield</span><span class="p">(</span><span class="n">foo</span><span class="p">,</span> <span class="ss">move: </span><span class="kp">true</span><span class="p">)</span>
<span class="p">}</span>
<span class="nb">p</span> <span class="n">r</span><span class="p">.</span><span class="nf">take</span>
</code></pre>
<pre><code>❯ ruby -v
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [arm64-darwin23]
❯ ruby rbug.rb
rbug.rb:3: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.
#<struct Foo a=0, b=0, c=0, d=0, e=0, f=0>
#<struct Foo a=0, b=0, c=0, d=nil, e=nil, f=nil>
</code></pre>
<p>This seems specific to moving, if I set <code>move: false</code> the struct makes it across OK.</p> Ruby master - Feature #20164 (Open): Add Exception#deconstruct_keyshttps://bugs.ruby-lang.org/issues/201642024-01-08T20:56:25ZDan0042 (Daniel DeLorme)
<p>It would be convenient to perform pattern matching with exception classes. So <code>Exception#deconstruct_keys</code> should return a hash with <code>:message</code> (original_message) as well as any other keys specific to the exception subclass.</p>
<p>Examples:</p>
<pre><code>begin
#code
rescue => err
case err
in StandardError(message: /Permission denied/)
abort "please select a different file"
in NameError(name: :foo)
retry if require "foo_helper
else
raise
end
end
</code></pre> Ruby master - Feature #20163 (Open): Introduce #bit_count method on Integerhttps://bugs.ruby-lang.org/issues/201632024-01-08T20:50:37Zgarrison (Garrison Jensen)
<p>This feature request is to implement a method called #bit_count on Integer that returns the number of ones in the binary representation of the absolute value of the integer.</p>
<pre><code>n = 19
n.bit_count #=> 3
(-n).bit_count #=> 3
</code></pre>
<p>This is often useful when you use an integer as a bitmask and want to count how many bits are set.</p>
<p>This would be equivalent to</p>
<pre><code>n.to_s(2).count("1")
</code></pre>
<p>However, this can be outperformed by</p>
<pre><code>def bit_count(n)
count = 0
while n > 0
n &= n - 1 # Flip the least significant 1 bit to 0
count += 1
end
count
end
</code></pre>
<p>I think this would be a useful addition because it would fit alongside the other bit-related methods defined on integer: <code>#bit_length,</code> <code>#allbits?</code>, <code>#anybits?</code>, <code>#nobits?</code>. Also, when working with bitmasks, a minor upgrade to performance often results in a significant improvement.</p>
<p>Similar methods from other languages:<br>
<a href="https://docs.python.org/3/library/stdtypes.html#int.bit_count" class="external">https://docs.python.org/3/library/stdtypes.html#int.bit_count</a><br>
<a href="https://doc.rust-lang.org/std/primitive.i32.html#method.count_ones" class="external">https://doc.rust-lang.org/std/primitive.i32.html#method.count_ones</a></p> Ruby master - Bug #20158 (Assigned): Ractor affects Coverage resultshttps://bugs.ruby-lang.org/issues/201582024-01-07T15:12:34Zjanosch-x (Janosch Müller)
<p>I have a large rspec test suite. I found that if I call a Ractor, the Coverage results are strongly affected, i.e. almost all files appear to be uncovered. This happens even if I only ever call a Ractor before the library or rspec are required.</p>
<p>Unfortunately, I was not able to build a simple repro yet.</p>
<p>I assume it is a timing thing and only affects larger suites, or it only happens if there are multiple files, and maybe if the library lazily requires its sub-modules?</p>
<p>However, I guess this should produce the same results when added to the spec_helper.rb of other large suites:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># Ractor.new { nil } # uncomment this to affect coverage results</span>
<span class="nb">require</span> <span class="s1">'coverage'</span>
<span class="no">Coverage</span><span class="p">.</span><span class="nf">start</span>
<span class="c1"># require library, set up rspec etc. </span>
<span class="no">RSpec</span><span class="p">.</span><span class="nf">configuration</span><span class="p">.</span><span class="nf">after</span><span class="p">(</span><span class="ss">:suite</span><span class="p">)</span> <span class="k">do</span>
<span class="c1"># this number is greatly reduced and unstable when calling Ractor above</span>
<span class="nb">p</span> <span class="no">Coverage</span><span class="p">.</span><span class="nf">result</span><span class="p">.</span><span class="nf">values</span><span class="p">.</span><span class="nf">sum</span> <span class="p">{</span> <span class="o">|</span><span class="n">arr</span><span class="o">|</span> <span class="n">arr</span><span class="p">.</span><span class="nf">sum</span><span class="p">(</span><span class="o">&</span><span class="ss">:to_i</span><span class="p">)</span> <span class="p">}</span>
<span class="k">end</span>
</code></pre>
<p>I had this problem in <a href="https://github.com/jaynetics/character_set/" class="external">this library</a>. The problem affects simplecov users as well, as described <a href="https://github.com/simplecov-ruby/simplecov/issues/1058" class="external">here</a>.</p> Ruby master - Misc #20156 (Open): C99 updateshttps://bugs.ruby-lang.org/issues/201562024-01-05T23:11:12Zkddnewton (Kevin Newton)kddnewton@gmail.com
<p>Now that we require Visual Studio 2015 and Oracle Developer Studio 12.5, we can do a couple of things to clean up:</p>
<ul>
<li>We should be able to remove our custom <code>stdbool.h</code> (added in VS2015 and Oracle SS 12.3)</li>
<li>Remove our usage of <code>__restrict</code> for Windows (added in VS2015)</li>
<li>Remove our custom <code>va_copy</code> (added in VS2015)</li>
</ul>
<p>Just notating, a couple of things that we <em>can</em> use now:</p>
<ul>
<li>snprintf</li>
<li>size_t printf format specifier (%z)</li>
</ul>
<p>I'm happy to do this work, but I wanted to open this ticket in case there is something besides Visual Studio or Oracle Solaris Studio that I would have missed for one of our compilation targets. Are there any other targets that do not fully implement C99?</p> Ruby master - Bug #20155 (Assigned): Using value of rb_fiber_scheduler_current() crashes Rubyhttps://bugs.ruby-lang.org/issues/201552024-01-05T22:14:24Zpaddor (Patrik Wenger)paddor@gmail.com
<p>While trying to manually block/unblock fibers from an extension using the Fiber Scheduler,<br>
I noticed that using the return value of <code>rb_fiber_scheduler_current()</code> crashes Ruby.</p>
<p>I've created a minimal extension gem called "fiber_blocker". Its test suite shows the behavior. See <a href="https://github.com/paddor/fiber_blocker" class="external">https://github.com/paddor/fiber_blocker</a>, especially the lines containing <code>FIXME</code>.</p>
<p>Passing <code>Fiber.scheduler</code> to the extension functions works. But letting it get the current scheduler itself does not seem to work.</p>
<p>Is <code>rb_fiber_scheduler_current()</code>(within a non-blocking Fiber) not the equivalent to <code>Fiber.scheduler</code>?<br>
Even just printing the its return value with <code>#p</code> will crash Ruby.</p>
<p>Ruby either crashes like this:</p>
<pre><code># Running:
T1 BEGIN
T2 BEGIN
T1 END
..T1 BEGIN
ext: blocking fiber
passed scheduler = #<Scheduler:0x00007fc5f22d39e8 @readable={}, @writable={}, @waiting={}, @closed=false, @lock=#<Thread::Mutex:0x00007fc5f22ec8d0>, @blocking={}, @ready=[], @urgent=[#<IO:fd 5>, #<IO:fd 6>]>
T2 BEGIN
ext: unblocking fiber
T1 END
.E
Finished in 1.007014s, 3.9721 runs/s, 2.9791 assertions/s.
1) Error:
TestFiberBlocker#test_fiber_blocker_current_fiber:
fatal: machine stack overflow in critical region
No backtrace
</code></pre>
<p>Or with a segfault:</p>
<pre><code># Running:
FiberBlocker.test works.
.T1 BEGIN
T2 BEGIN
T1 END
.T1 BEGIN
ext: blocking fiber
/home/user/dev/oss/async_ruby_test/rbnng/fiber_blocker/test/test_fiber_blocker.rb:40: [BUG] Segmentation fault at 0x00000000390d8f98
ruby 3.3.0 (2023-12-25 revision 5124f9ac75) [x86_64-linux]
-- Control frame information -----------------------------------------------
c:0003 p:---- s:0012 e:000011 CFUNC :block_fiber
c:0002 p:0014 s:0006 e:000005 BLOCK /home/user/dev/oss/async_ruby_test/rbnng/fiber_blocker/test/test_fiber_blocker.rb:40 [FINISH]
c:0001 p:---- s:0003 e:000002 DUMMY [FINISH]
-- Ruby level backtrace information ----------------------------------------
/home/user/dev/oss/async_ruby_test/rbnng/fiber_blocker/test/test_fiber_blocker.rb:40:in `block in test_fiber_blocking_in_ext'
/home/user/dev/oss/async_ruby_test/rbnng/fiber_blocker/test/test_fiber_blocker.rb:40:in `block_fiber'
-- Threading information ---------------------------------------------------
Total ractor count: 1
Ruby thread count for this ractor: 4
-- Machine register context ------------------------------------------------
RIP: 0x00007f1554f17ad8 RBP: 0x00000000390d8f90 RSP: 0x00007f153a79e280
RAX: 0x00007f1554addba8 RBX: 0x00007f153a79eab0 RCX: 0x0000000000000000
RDX: 0x00007f1554ade600 RDI: 0x00007f15551e8788 RSI: 0x0000000000000ae1
R8: 0x000000000000002b R9: 0x00007f153a79f038 R10: 0x00007f1554c0b9b0
R11: 0x00007f153a79e490 R12: 0x0000000000000ae1 R13: 0x0000000000000000
R14: 0x0000000000000000 R15: 0x000055ab732d7df0 EFL: 0x0000000000010206
-- C level backtrace information -------------------------------------------
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(rb_print_backtrace+0x14) [0x7f1554f24961] /home/user/src/ruby-3.3.0/vm_dump.c:820
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(rb_vm_bugreport) /home/user/src/ruby-3.3.0/vm_dump.c:1151
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(rb_bug_for_fatal_signal+0x104) [0x7f1554d1c214] /home/user/src/ruby-3.3.0/error.c:1065
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(sigsegv+0x4f) [0x7f1554e700df] /home/user/src/ruby-3.3.0/signal.c:926
/lib/x86_64-linux-gnu/libc.so.6(0x7f1554842520) [0x7f1554842520]
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(RBASIC_CLASS+0x0) [0x7f1554f17ad8] ./include/ruby/internal/globals.h:178
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(gccct_method_search) /home/user/src/ruby-3.3.0/vm_eval.c:475
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(rb_funcallv_scope) /home/user/src/ruby-3.3.0/vm_eval.c:1063
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(rb_funcallv) /home/user/src/ruby-3.3.0/vm_eval.c:1084
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(rb_inspect+0x19) [0x7f1554dc1569] /home/user/src/ruby-3.3.0/object.c:697
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(ruby__sfvextra+0x11a) [0x7f1554e7223a] /home/user/src/ruby-3.3.0/sprintf.c:1119
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(BSD_vfprintf+0xa69) [0x7f1554e73059] /home/user/src/ruby-3.3.0/vsnprintf.c:830
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(RBASIC_SET_CLASS_RAW+0x0) [0x7f1554e75b56] /home/user/src/ruby-3.3.0/sprintf.c:1168
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(ruby_vsprintf0) /home/user/src/ruby-3.3.0/sprintf.c:1169
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(rb_enc_vsprintf+0x5d) [0x7f1554e75ecd] /home/user/src/ruby-3.3.0/sprintf.c:1195
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(rb_sprintf+0x9d) [0x7f1554e7607d] /home/user/src/ruby-3.3.0/sprintf.c:1225
/home/user/dev/oss/async_ruby_test/rbnng/fiber_blocker/lib/fiber_blocker/fiber_blocker.so(block_fiber+0x4a) [0x7f1554ad430a] ../../../../ext/fiber_blocker/fiber_blocker.c:29
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(vm_cfp_consistent_p+0x0) [0x7f1554ef64b4] /home/user/src/ruby-3.3.0/vm_insnhelper.c:3490
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(vm_call_cfunc_with_frame_) /home/user/src/ruby-3.3.0/vm_insnhelper.c:3492
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(vm_call_cfunc_with_frame) /home/user/src/ruby-3.3.0/vm_insnhelper.c:3518
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(vm_call_cfunc_other) /home/user/src/ruby-3.3.0/vm_insnhelper.c:3544
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(vm_sendish+0x9e) [0x7f1554f06f87] /home/user/src/ruby-3.3.0/vm_insnhelper.c:5581
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(vm_exec_core) /home/user/src/ruby-3.3.0/insns.def:834
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(rb_vm_exec+0x19a) [0x7f1554f0d1fa] /home/user/src/ruby-3.3.0/vm.c:2486
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(rb_vm_invoke_proc+0x5f) [0x7f1554f12e0f] /home/user/src/ruby-3.3.0/vm.c:1728
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(rb_fiber_start+0x1ba) [0x7f1554cf098a] /home/user/src/ruby-3.3.0/cont.c:2536
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(fiber_entry+0x20) [0x7f1554cf0d00] /home/user/src/ruby-3.3.0/cont.c:847
/home/user/.rubies/ruby-3.3.0/lib/libruby.so.3.3(rb_threadptr_root_fiber_setup) (null):0
</code></pre>
<p>This happens with the Async scheduler as well as with Ruby’s test scheduler. My minimal extension uses Ruby’s.</p>
<p>I hope I'm not missing something obvious. My C isn't very good.</p> Ruby master - Bug #20154 (Open): aarch64: configure overrides `-mbranch-protection` if it was set...https://bugs.ruby-lang.org/issues/201542024-01-05T21:25:03Zjprokop (Jarek Prokop)
<p>Recently a GH PR was merged <a href="https://github.com/ruby/ruby/pull/9306" class="external">https://github.com/ruby/ruby/pull/9306</a> For PAC/BTI support on ARM CPUs for Coroutine.S.</p>
<p>Without proper compilation support in configure.ac it segfaults Ruby with fibers on CPUs where PAC is supported: <a href="https://bugs.ruby-lang.org/issues/20085" class="external">https://bugs.ruby-lang.org/issues/20085</a></p>
<p>At the time of writing, configure.ac appends the first option from a list for flag <code>-mbranch-protection</code> that successfully compiles a program <a href="https://github.com/ruby/ruby/blob/master/configure.ac#L829" class="external">https://github.com/ruby/ruby/blob/master/configure.ac#L829</a>,<br>
to XCFLAGS and now also ASFLAGS to fix issue 20085 for Ruby master.</p>
<p>This is suboptimal for Fedora as we set -mbranch-protection=standard by default in C{,XX}FLAGS:</p>
<pre><code>CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Werror=implicit-function-declaration -Werror=implicit-int -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer '
export CFLAGS
CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer'
export CXXFLAGS
</code></pre>
<p>And the appended flag overrides distribution's compilation configuration, which in this case ends up omitting BTI instructions and only using PAC.</p>
<p>Would it make sense to check if such flags exist and not overwrite them if they do?</p>
<p>Serious proposals:</p>
<ol>
<li>Simplest fix that does not overwrite what is set in the distribution and results in higher security is simply prepending the list of options with <code>-mbranch-protection=standard</code>, it should cause no problems on ARMv8 CPUs and forward, BTI similarly to PAC instructions result into NOP, it is only extending the capability.</li>
</ol>
<p>See attached 0001-aarch64-Check-mbranch-protection-standard-first-to-u.patch</p>
<ol start="2">
<li>Other fix that sounds more sane IMO and dodges this kind of guessing where are all the correct places for the flag is what another Fedora contributor Florian Weimer suggested: <a href="https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/CVTNF2OQCL3XZHUUFNYMDK6ZEF2SWUEN/" class="external">https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org/message/CVTNF2OQCL3XZHUUFNYMDK6ZEF2SWUEN/</a>
</li>
</ol>
<p>"The reliable way to do this would be to compile a C file and check<br>
whether that enables __ARM_FEATURE_PAC_DEFAULT, and if that's the case,<br>
define a <em>different</em> macro for use in the assembler implementation.<br>
This way, you don't need to care about the exact name of the option."</p>
<p>IOW instead of using _<em>ARM_FEATURE</em>* directly in that code, define a macro in the style of "USE_PAC" with value of the feature if it is defined, I think that way we shouldn't need to append ASFLAGS anymore.</p>
<p>However it's also important to catch the value of those macros as their values have meaning, I have an idea how to do that but I'd get on that monday earliest.</p> Ruby master - Feature #20152 (Open): mkmf / extconf: Add a proper way to not compile the extensionhttps://bugs.ruby-lang.org/issues/201522024-01-05T10:53:40Zbyroot (Jean Boussier)byroot@ruby-lang.org
<a name="Context"></a>
<h3 >Context<a href="#Context" class="wiki-anchor">¶</a></h3>
<p>There are various gems that ship with a native extension as a way to speedup part of the gem, but also ship with a pure Ruby version of these methods as a fallback. So they only want to compile the extension if the platform supports it, and if not, just fallback to the slightly slower Ruby version.</p>
<p>Right now users rely on one of two hacks to do this. Either they create an empty Makefile, but then still depend on <code>make</code> being available, or publish platform specific packages without any extension in them.</p>
<p>Examples:</p>
<ul>
<li><a href="https://github.com/Shopify/bootsnap/blob/070151f1305f23102365d6b4476a91c02dead35a/ext/bootsnap/extconf.rb" class="external"><code>bootsnap</code> skip compilation if not on MRI or TruffleRuby</a></li>
<li><a href="https://github.com/ruby/erb/issues/52" class="external"><code>erb</code> has an extension for MRI but then need to publish a <code>java</code> version of the gem that doesn't actually contain Java code, just to skip compilation on JRuby</a></li>
<li><a href="https://github.com/redis-rb/redis-client/blob/1ab081c1d0e47df5d55e011c9390c70b2eef6731/hiredis-client/ext/redis_client/hiredis/extconf.rb#L10-L17" class="external"><code>hiredis-client</code> skips the compilation for Windows and non-MRI rubies</a></li>
</ul>
<a name="Feature"></a>
<h3 >Feature<a href="#Feature" class="wiki-anchor">¶</a></h3>
<p>It would be very useful to have some proper first class API to skip compiling the extension.</p>
<p>Something like:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s2">"mkmf"</span>
<span class="k">if</span> <span class="no">RUBY_ENGINE</span> <span class="o">!=</span> <span class="s2">"ruby"</span> <span class="o">||</span> <span class="no">RUBY_PLATFORM</span><span class="p">.</span><span class="nf">match?</span><span class="p">(</span><span class="sr">/mswin/</span><span class="p">)</span>
<span class="n">skip_compilation</span>
<span class="k">else</span>
<span class="c1"># ...</span>
<span class="k">end</span>
</code></pre>
<p>cc <a class="user active user-mention" href="https://bugs.ruby-lang.org/users/10073">@k0kubun (Takashi Kokubun)</a> <a class="user active user-mention" href="https://bugs.ruby-lang.org/users/286">@headius (Charles Nutter)</a></p> Ruby master - Bug #20151 (Open): Can't build Ruby 3.1 on FreeBSD 14.0https://bugs.ruby-lang.org/issues/201512024-01-05T03:14:58Zhsbt (Hiroshi SHIBATA)hsbt@ruby-lang.org
<p>I couldn't install Ruby 3.1.3 on FreeBSD 14.0.</p>
<pre><code>compiling util.c
util.c:255:1: error: expected identifier or '('
ruby_qsort(void* base, const size_t nel, const size_t size, cmpfunc_t *cmp, void *d)
^
./include/ruby/util.h:124:21: note: expanded from macro 'ruby_qsort'
# define ruby_qsort qsort_r
^
/usr/include/stdlib.h:356:5: note: expanded from macro 'qsort_r'
__generic(arg5, int (*)(void *, const void *, const void *), \
^
/usr/include/sys/cdefs.h:322:2: note: expanded from macro '__generic'
_Generic(expr, t: yes, default: no)
^
1 error generated.
*** Error code 1
Stop.
</code></pre>
<p>Compiler version is here:</p>
<pre><code>FreeBSD clang version 16.0.6 (https://github.com/llvm/llvm-project.git llvmorg-16.0.6-0-g7cbf1a259152)
</code></pre>
<p>I could install Ruby 3.2.2.</p> Ruby master - Bug #20147 (Open): FreeBSD libyamlhttps://bugs.ruby-lang.org/issues/201472024-01-04T13:09:45Zkaiquekandykoga (Kaíque Koga)
<p>I use ruby-install to manage multiple Ruby versions. Some time ago I had issues installing Ruby 3.2.2 <a href="https://github.com/postmodern/ruby-install/issues/463" class="external">https://github.com/postmodern/ruby-install/issues/463</a>, and the same issue was open for ruby-build in <a href="https://github.com/rbenv/ruby-build/issues/2184" class="external">https://github.com/rbenv/ruby-build/issues/2184</a>. I am trying to install Ruby 3.3.0 using ruby-install, and the same behaviour is occurring. Please, take a look in the links I have provided for detailed information.</p>
<pre><code class="shell syntaxhl" data-language="shell">/usr/home/kandy/src/ruby-3.3.0/lib/yaml.rb:3: warning: It seems your ruby installation is missing psych <span class="o">(</span><span class="k">for </span>YAML output<span class="o">)</span><span class="nb">.</span>
To eliminate this warning, please <span class="nb">install </span>libyaml and reinstall your ruby.
uh-oh! RDoc had a problem:
cannot load such file <span class="nt">--</span> psych
run with <span class="nt">--debug</span> <span class="k">for </span>full backtrace
<span class="k">***</span> Error code 1
Stop.
make: stopped <span class="k">in</span> /usr/home/kandy/src/ruby-3.3.0
<span class="o">!!!</span> Compiling ruby 3.3.0 failed!
</code></pre>
<p>Thank you.</p> Ruby master - Bug #20146 (Assigned): Code using Ractor with env `RUBY_MAX_CPU=1` ends with unreac...https://bugs.ruby-lang.org/issues/201462024-01-04T02:17:54Zshia (Sangyong Sim)
<a name="Reproducible-code"></a>
<h2 >Reproducible code<a href="#Reproducible-code" class="wiki-anchor">¶</a></h2>
<pre><code class="rb syntaxhl" data-language="rb"><span class="c1"># sample-code.rb</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="mi">1</span> <span class="p">}</span>
</code></pre>
<pre><code class="bash syntaxhl" data-language="bash"><span class="nv">RUBY_MAX_CPU</span><span class="o">=</span>1 ruby sample-code.rb <span class="c"># This will not end with exit code 0</span>
<span class="nv">RUBY_MAX_CPU</span><span class="o">=</span>2 ruby sample-code.rb <span class="c"># This ends with exit code 0 as expected</span>
</code></pre>
<a name="Expected"></a>
<h2 >Expected<a href="#Expected" class="wiki-anchor">¶</a></h2>
<p>process with RUBY_MAX_CPU=1 exits successfully as same as RUBY_MAX_CPU more than 1.</p> Ruby master - Bug #20112 (Assigned): Ractors not working properly in ruby 3.3.0https://bugs.ruby-lang.org/issues/201122024-01-03T15:51:14Zariasdiniz (Aria Diniz)
<p>I recently installed Ruby 3.3.0, and noticed that some of my scripts that use Ractors started to struggle with performance. After doing some benchmarks, I noticed that, while Ractors seem to be working well on Ruby 3.2.2, they're not working properly on 3.3.0.</p>
<p>I'm using Ubuntu 22.04.3 LTS</p>
<p>Here is the benchmark code:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># frozen_string_literal: true</span>
<span class="nb">require</span> <span class="s1">'benchmark'</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="ss">:warmup</span> <span class="p">}</span> <span class="k">if</span> <span class="k">defined?</span><span class="p">(</span><span class="no">Ractor</span><span class="p">)</span>
<span class="no">Benchmark</span><span class="p">.</span><span class="nf">bmbm</span> <span class="k">do</span> <span class="o">|</span><span class="n">x</span><span class="o">|</span>
<span class="n">x</span><span class="p">.</span><span class="nf">report</span><span class="p">(</span><span class="s2">"Thread: "</span><span class="p">)</span> <span class="k">do</span>
<span class="n">threads</span> <span class="o">=</span> <span class="p">[]</span>
<span class="mi">8</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span> <span class="o">|</span><span class="n">i</span><span class="o">|</span>
<span class="n">threads</span> <span class="o"><<</span> <span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="mi">20000000</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span> <span class="o">|</span><span class="n">j</span><span class="o">|</span>
<span class="p">((</span><span class="n">i</span> <span class="o">*</span> <span class="mi">20000000</span><span class="p">)</span> <span class="o">+</span> <span class="n">j</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">threads</span><span class="p">.</span><span class="nf">each</span><span class="p">(</span><span class="o">&</span><span class="ss">:join</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">x</span><span class="p">.</span><span class="nf">report</span><span class="p">(</span><span class="s2">"Ractor: "</span><span class="p">)</span> <span class="k">do</span>
<span class="n">ractors</span> <span class="o">=</span> <span class="p">[]</span>
<span class="mi">0</span><span class="o">..</span><span class="mi">8</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span> <span class="o">|</span><span class="n">i</span><span class="o">|</span>
<span class="n">ractors</span> <span class="o"><<</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">i</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">k</span><span class="o">|</span>
<span class="mi">20000000</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span> <span class="o">|</span><span class="n">j</span><span class="o">|</span>
<span class="p">((</span><span class="n">k</span> <span class="o">*</span> <span class="mi">20000000</span><span class="p">)</span> <span class="o">+</span> <span class="n">j</span><span class="p">)</span><span class="o">**</span><span class="mi">2</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">ractors</span><span class="p">.</span><span class="nf">map</span><span class="p">(</span><span class="o">&</span><span class="ss">:take</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>Here is the results for Ruby 3.2.2:</p>
<p>Rehearsal --------------------------------------------<br>
Thread: 7.666909 0.001091 7.668000 ( 7.675266)<br>
Ractor: 19.318528 0.012017 19.330545 ( 2.505888)<br>
---------------------------------- total: 26.998545sec</p>
<pre><code> user system total real
</code></pre>
<p>Thread: 7.918141 0.004011 7.922152 ( 7.928772)<br>
Ractor: 19.366414 0.003954 19.370368 ( 2.517993)</p>
<p>Here is the results for Ruby 3.3.0:</p>
<p>Rehearsal --------------------------------------------<br>
Thread: 8.634152 0.010895 8.645047 ( 8.645104)<br>
Ractor: 100.172179 0.035985 100.208164 ( 15.213245)<br>
--------------------------------- total: 108.853211sec</p>
<pre><code> user system total real
</code></pre>
<p>Thread: 9.451236 0.004002 9.455238 ( 9.460132)<br>
Ractor: 118.463294 0.119942 118.583236 ( 18.462157)</p> Ruby master - Feature #20105 (Open): Introduce `IO::Stream` or something similar.https://bugs.ruby-lang.org/issues/201052024-01-01T07:43:50Zioquatix (Samuel Williams)samuel@oriontransfer.net
<p>Ruby's IO class has a general model for streaming IO, including some hidden classes like <code>IO::generic_readable</code> and <code>IO::generic_writable</code>.</p>
<p>As Ruby's core IO classes evolve, gems like <code>openssl</code> (see <code>OpenSSL::Buffering</code>) need to be updated to support changes to the interface.</p>
<p>As it stands, there are changes in <code>IO</code> which are not copied to <code>OpenSSL::Buffering</code>. I'd like to propose we introduce some shared interface for streams that is used by <code>IO</code>, <code>Socket</code>, and <code>OpenSSL</code> to start with. The general interface would be similar to <code>IO</code> and allow code like <code>OpenSSL</code> to avoid re-implementing the <code>IO</code> interface.</p>
<p>I don't have a strong idea for the interface yet, but it would probably look something like this:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">IO::Stream</span>
<span class="k">def</span> <span class="nf">initialize</span><span class="p">(</span><span class="n">io</span><span class="p">,</span> <span class="ss">buffered: </span><span class="kp">true</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">read</span><span class="p">(</span><span class="n">size</span><span class="p">,</span> <span class="n">buffer</span><span class="o">=</span><span class="kp">nil</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">write</span><span class="p">(</span><span class="n">size</span><span class="p">,</span> <span class="n">buffer</span><span class="o">=</span><span class="kp">nil</span><span class="p">)</span>
<span class="k">end</span>
<span class="c1"># Include general operations from IO, like gets, puts, etc</span>
<span class="k">end</span>
</code></pre>
<p>I think ideally we'd try implement with pure Ruby and a first goal would be to replace <code>OpenSSL::Buffering</code>.</p> Ruby master - Bug #20103 (Open): rb_internal_thread_remove_event_hook() hangs when called from wi...https://bugs.ruby-lang.org/issues/201032023-12-28T15:46:51Zosyoyu (Daisuke Aritomo)
<a name="Problem"></a>
<h2 >Problem<a href="#Problem" class="wiki-anchor">¶</a></h2>
<p>The Ruby process hangs when <code>rb_internal_thread_remove_event_hook()</code> is called from within a Thread hook registered by <code>rb_internal_thread_add_event_hook()</code>.<br>
The thread is waiting for the thread event execution lock (<code>pthread_rwlock_wrlock(&rb_internal_thread_event_hooks_rw_lock))</code>), which is acquired by its caller, <code>rb_thread_execute_hooks()</code>.<br>
<a href="https://github.com/ruby/ruby/blob/e81a5453e3c76c4348da042d86debde7689254fe/thread_pthread.c#L3323" class="external">https://github.com/ruby/ruby/blob/e81a5453e3c76c4348da042d86debde7689254fe/thread_pthread.c#L3323</a></p>
<p>This situation would occur when one wants to register a <em>oneshot</em> hook that performs something on a Thread for only a single time. The hook would remove itself after its main procedure.<br>
In my case, I'm doing a timer_create(3) on each pthread for profiling purposes.</p>
<a name="Expected-behavior"></a>
<h2 >Expected behavior<a href="#Expected-behavior" class="wiki-anchor">¶</a></h2>
<p>The process won't hang, or at least print some kind of warning.</p>
<p>I think there some options here:</p>
<ol>
<li>Discourage this kind of definition. Thread hooks should not add/remove other Thread hooks, or otherwise do so through other async methods, such as postponed jobs.</li>
<li>Find a way to make this work. Maybe inner calls to add/remove_event_hook() can share locks with the outer call, but I'm not sure if that's possible as I'm not familiar with pthread_rwlocks.</li>
</ol>
<a name="Repro"></a>
<h2 >Repro<a href="#Repro" class="wiki-anchor">¶</a></h2>
<pre><code class="c syntaxhl" data-language="c"><span class="cp">#include</span> <span class="cpf">"ruby.h"</span><span class="cp">
#include</span> <span class="cpf">"ruby/thread.h"</span><span class="cp">
</span>
<span class="n">rb_internal_thread_event_hook_t</span> <span class="o">*</span><span class="n">hook</span><span class="p">;</span>
<span class="kt">void</span>
<span class="nf">event_hook_callback</span><span class="p">(</span><span class="n">rb_event_flag_t</span> <span class="n">flag</span><span class="p">,</span> <span class="k">const</span> <span class="n">rb_internal_thread_event_data_t</span> <span class="o">*</span><span class="n">data</span><span class="p">,</span> <span class="kt">void</span> <span class="o">*</span><span class="n">custom_data</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">rb_internal_thread_remove_event_hook</span><span class="p">(</span><span class="n">hook</span><span class="p">);</span> <span class="c1">// hangs</span>
<span class="p">}</span>
<span class="n">RUBY_FUNC_EXPORTED</span> <span class="kt">void</span>
<span class="nf">Init_mycext</span><span class="p">(</span><span class="kt">void</span><span class="p">)</span>
<span class="p">{</span>
<span class="n">hook</span> <span class="o">=</span> <span class="n">rb_internal_thread_add_event_hook</span><span class="p">(</span>
<span class="n">event_hook_callback</span><span class="p">,</span>
<span class="n">RUBY_INTERNAL_THREAD_EVENT_RESUMED</span><span class="p">,</span>
<span class="nb">NULL</span>
<span class="p">);</span>
<span class="p">}</span>
</code></pre>
<pre><code>ruby -rmycext -e 'Thread.new { loop { 1 + 1 } }'
</code></pre> Ruby master - Feature #20102 (Open): Introduce `Fiber#resuming?`https://bugs.ruby-lang.org/issues/201022023-12-28T07:25:59Zioquatix (Samuel Williams)samuel@oriontransfer.net
<p>There are some tricky edge cases when using <code>Fibre#raise</code> and <code>Fiber#kill</code>, e.g.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">fiber</span> <span class="o">=</span> <span class="kp">nil</span>
<span class="n">killer</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="n">fiber</span><span class="p">.</span><span class="nf">raise</span><span class="p">(</span><span class="s2">"Stop"</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">fiber</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="n">killer</span><span class="p">.</span><span class="nf">resume</span>
<span class="k">end</span>
<span class="n">fiber</span><span class="p">.</span><span class="nf">resume</span>
<span class="c1"># 4:in `raise': attempt to raise a resuming fiber (FiberError)</span>
<span class="c1"># 4:in `block in <main>'</span>
</code></pre>
<p>Async has to deal with this edge case explicitly by rescuing the exception:</p>
<p><a href="https://github.com/socketry/async/blob/ffd019d9c1d547926a28fe8f36bf7bfe91d8a168/lib/async/task.rb#L226-L233" class="external">https://github.com/socketry/async/blob/ffd019d9c1d547926a28fe8f36bf7bfe91d8a168/lib/async/task.rb#L226-L233</a></p>
<p>I'd like to avoid doing that and instead just ask "Can I kill/raise on this fiber right now?" which is determined by whether the fiber itself can be resumed or transferred to.</p>
<p>To address this, I'd like to introduce <code>Fiber#resuming?</code>:</p>
<pre><code class="c syntaxhl" data-language="c"><span class="cm">/*
* call-seq: fiber.resumed? -> true or false
*
* Whether the fiber is currently resumed.
*/</span>
<span class="n">VALUE</span>
<span class="nf">rb_fiber_resuming_p</span><span class="p">(</span><span class="n">VALUE</span> <span class="n">fiber_value</span><span class="p">)</span>
<span class="p">{</span>
<span class="k">struct</span> <span class="n">rb_fiber_struct</span> <span class="o">*</span><span class="n">fiber</span> <span class="o">=</span> <span class="n">fiber_ptr</span><span class="p">(</span><span class="n">fiber_value</span><span class="p">);</span>
<span class="k">if</span> <span class="p">(</span><span class="n">FIBER_TERMINATED_P</span><span class="p">(</span><span class="n">fiber</span><span class="p">))</span> <span class="k">return</span> <span class="n">RUBY_Qfalse</span><span class="p">;</span>
<span class="k">return</span> <span class="n">RBOOL</span><span class="p">(</span><span class="n">fiber</span><span class="o">-></span><span class="n">resuming_fiber</span><span class="p">);</span>
<span class="p">}</span>
</code></pre>
<p>See the PR: <a href="https://github.com/ruby/ruby/pull/9382" class="external">https://github.com/ruby/ruby/pull/9382</a></p> Ruby master - Feature #20100 (Open): [Feature] Better / easier support for (optional) colours, on...https://bugs.ruby-lang.org/issues/201002023-12-27T18:53:42ZrubyFeedback (robert heiler)
<p>This suggestion is primarily in regard to (optional) colour support, on the commandline,<br>
in case a parsing error happened. I'll explain what I mean with this in a moment.</p>
<p>Let me first show a partial screenshot (image), to indicate this problem.</p>
<p><a href="https://i.imgur.com/FylLvsY.png" class="external">https://i.imgur.com/FylLvsY.png</a></p>
<p>Ruby evaluates the content and indicates the error here, while also helpfully<br>
showing the line numbers WHERE the error happened (on the left hand side).<br>
This is nice. But, I would actually prefer if some colours could be shown here,<br>
at the user's discretion.</p>
<p>For instance, I would like to have the line numbers show in red or a red-colour;<br>
or any colour for that matter. That would give me a visual cue as to the primary<br>
problem (sometimes more than one error is shown, or occurs, in a given .rb file,<br>
or distributed via several .rb files).</p>
<p>The keyword or type-error, such as SyntaxError, should ideally also use another<br>
colour. I may also want to see the specific error in yet another colour, e. g.<br>
the part ", "unexpected 'end".</p>
<p>The error here was that I copy/pasted some code (I am porting old code and checking<br>
it as I do right now) and left behind a trailing ',' there.</p>
<p>Hopefully I could convince the dear reader that colours may be important. Perhaps<br>
colour support is already possible, and I (and perhaps others) just don't know about<br>
it.</p>
<p>So the question, then, would be: how to enable simple colours to be shown?</p>
<p>Well, a couple of ways would be possible. A simple one may be to put an environment<br>
variable, and document it clearly, such as RUBY_ENABLE_COLOURS or RUBY_COLOURS, and<br>
a value of 1 to indicate that we want to use colours. Or any other name, these are<br>
just suggestions; can be longer names, to indicate on-error situations such as<br>
RUBY_SHOW_COLOURED_ERRORS or RUBY_COLOURED_ERRORS (or COLORED, I don't mind the UK<br>
or US spelling, even though I got used to the UK spelling due to UK being close to<br>
central Europe).</p>
<p>There could also be an internal API we could call; not sure which one, perhaps<br>
via RbConfig, e. g. RbConfig.enable_colours or RbConfig::COLOURS_ON_WARNING = true<br>
or something like that. Or another way where this may reside, although an ENV<br>
variable may be simpler. A few other options may also be possible - either way the<br>
primary objective would be to make it super-easy and super-simple to have colours<br>
support, perhaps even for all of ruby, without needing to micro-manage ENV variables.</p>
<p>Ideally <a href="https://docs.ruby-lang.org/en/" class="external">https://docs.ruby-lang.org/en/</a> should also get a dedicate page about colours<br>
in general. On Windows colours may not always work well (I have had different<br>
success there) but on linux, bash, KDE konsole and so forth, colours work really well<br>
for me. At any rate this was the suggestion - thank you for reading this.</p>
<p>PS: I searched for "colo" on the docs.ruby-lang.org webpage; results often involved<br>
e. g. IRB like <a href="https://docs.ruby-lang.org/en/3.3/IRB/Color.html" class="external">https://docs.ruby-lang.org/en/3.3/IRB/Color.html</a>, which is useful if<br>
someone wants to modify IRB's behaviour, but not so useful when it comes to general<br>
things concerning MRI. There is really a distinct lack of top-down overview-articles<br>
in regards to ruby on the official homepage. How are new users supposed to find things<br>
like that? It would be nice if a long-term strategy for ruby would also be to provide<br>
higher "overarching" documentation for ruby, via a central place (MRI). At any rate,<br>
this is a separate issue - my feature request here is concerning about enabling<br>
colours support on the commandline, in case of an error. The ruby parser probably<br>
already has this information, since it can show where an error happens, so all that<br>
may be necessary would be to tie this towards colour-output; and then also a way<br>
for people to tap into that (which is why I think an ENV variable, even though not<br>
super-sophisticated, may be the simplest way to go, but that should also be clearly<br>
documented in a very-easy-to-find, and accessible, manner).</p> Ruby master - Bug #20097 (Open): Regexp#match? with empty capture group repeat is inconsistenthttps://bugs.ruby-lang.org/issues/200972023-12-27T10:56:46Ztompng (tomoya ishida)tomoyapenguin@gmail.com
<p>It sometimes matches and sometimes does not, depend on repeat quantifier number.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># empty capture group repeat</span>
<span class="nb">p</span> <span class="sr">/(a(){1,4}){2}/</span><span class="p">.</span><span class="nf">match?</span><span class="p">(</span><span class="s1">'aa'</span><span class="p">)</span> <span class="c1">#=> true</span>
<span class="nb">p</span> <span class="sr">/(a(){1,5}){2}/</span><span class="p">.</span><span class="nf">match?</span><span class="p">(</span><span class="s1">'aa'</span><span class="p">)</span> <span class="c1">#=> false</span>
<span class="c1"># repeat of capture group that match to empty string</span>
<span class="nb">p</span> <span class="sr">/(a(|){1,2}){2}/</span><span class="p">.</span><span class="nf">match?</span><span class="p">(</span><span class="s1">'aa'</span><span class="p">)</span> <span class="c1">#=> true</span>
<span class="nb">p</span> <span class="sr">/(a(|){1,3}){2}/</span><span class="p">.</span><span class="nf">match?</span><span class="p">(</span><span class="s1">'aa'</span><span class="p">)</span> <span class="c1">#=> false</span>
<span class="nb">p</span> <span class="sr">/(a(x?y?|z){1,2}){2}/</span><span class="p">.</span><span class="nf">match?</span><span class="p">(</span><span class="s1">'aa'</span><span class="p">)</span> <span class="c1">#=> false</span>
</code></pre>
<p>non-capturing group seems ok.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">p</span> <span class="sr">/(a(?:){1,4}){2}/</span><span class="p">.</span><span class="nf">match?</span><span class="p">(</span><span class="s1">'aa'</span><span class="p">)</span> <span class="c1">#=> true</span>
<span class="nb">p</span> <span class="sr">/(a(?:){1,5}){2}/</span><span class="p">.</span><span class="nf">match?</span><span class="p">(</span><span class="s1">'aa'</span><span class="p">)</span> <span class="c1">#=> true</span>
<span class="nb">p</span> <span class="sr">/(a(?:|){1,2}){2}/</span><span class="p">.</span><span class="nf">match?</span><span class="p">(</span><span class="s1">'aa'</span><span class="p">)</span> <span class="c1">#=> true</span>
<span class="nb">p</span> <span class="sr">/(a(?:|){1,3}){2}/</span><span class="p">.</span><span class="nf">match?</span><span class="p">(</span><span class="s1">'aa'</span><span class="p">)</span> <span class="c1">#=> true</span>
<span class="nb">p</span> <span class="sr">/(a(?:x?y?|z){1,2}){2}/</span><span class="p">.</span><span class="nf">match?</span><span class="p">(</span><span class="s1">'aa'</span><span class="p">)</span> <span class="c1">#=> true</span>
</code></pre>
<p>Same behavior in ruby 3.0, 3.1, 3.2</p> Ruby master - Feature #20093 (Open): Syntax or keyword to reopen existing classs/modules, never t...https://bugs.ruby-lang.org/issues/200932023-12-27T03:27:07Ztagomoris (Satoshi Tagomori)tagomoris@gmail.com
<p><code>class A</code> and <code>module B</code> will reopen existing class A or module B to add/re-define methods if A/B exists. Otherwise, these will define the new class/module A/B.<br>
But, in my opinion, the code of <code>class A</code> for patching existing classes doesn't work expectedly when <code>A</code> is not defined beforehand. It expects other codes to define <code>A</code> before being called.</p>
<p>For example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># string_exclude.rb</span>
<span class="k">class</span> <span class="nc">String</span>
<span class="k">def</span> <span class="nf">exclude?</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="o">!</span><span class="kp">include</span><span class="p">?(</span><span class="n">string</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>This code expects that there is the <code>String</code> class, and it has the <code>include?</code> method. This code doesn't work if the file is loaded in the way below:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">load</span><span class="p">(</span><span class="s1">'string_exclude.rb'</span><span class="p">,</span> <span class="kp">true</span><span class="p">)</span>
</code></pre>
<p>This code doesn't raise errors and will define an almost empty class (only with a method <code>exclude?</code> to raise NameError). It should be unexpected for every user.</p>
<p>So, I want to propose a new syntax to reopen the existing class/module or raise errors if the specified class/module is not defined.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="n">extension</span> <span class="no">String</span>
<span class="k">def</span> <span class="nf">exclude?</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="o">!</span><span class="kp">include</span><span class="p">?(</span><span class="n">string</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span> <span class="c1"># adds #exclude? to String class</span>
<span class="k">class</span> <span class="n">extension</span> <span class="no">Stroooong</span>
<span class="k">def</span> <span class="nf">exclude?</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="o">!</span><span class="kp">include</span><span class="p">?(</span><span class="n">string</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span> <span class="c1"># will raise NameError (or something else)</span>
</code></pre>
<p>Some additional things:</p>
<ul>
<li>
<code>class extension String</code> (and <code>module extension String</code>) causes a compile error (SyntaxError) on Ruby 3.3. So we have space to add a keyword between class/module and the class/module name.</li>
<li>I don't have a strong opinion about the keyword name <code>extension</code>. An alternative idea is <code>reopen</code>.</li>
</ul> Ruby master - Bug #20089 (Open): Fiber#kill transfers to root fiberhttps://bugs.ruby-lang.org/issues/200892023-12-26T16:46:04Zrmosolgo (Robert Mosolgo)rdmosolgo@gmail.com
<p>I was hoping to use <code>Fiber#kill</code> to clean up formerly <code>.transfer</code>-d Fibers and work around <a href="https://bugs.ruby-lang.org/issues/20081" class="external">https://bugs.ruby-lang.org/issues/20081</a>, but I found that <code>Fiber#kill</code> has a similar control flow jump behavior. Is this on purpose, or a bug?</p>
<p>Here's a script to test the behavior:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">manager</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="n">worker</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="s2">"2. Begin Worker"</span>
<span class="n">manager</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"This should never print -- killed"</span>
<span class="k">end</span>
<span class="nb">puts</span> <span class="s2">"1. Transfer to Worker"</span>
<span class="n">worker</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"3. Killing Worker"</span>
<span class="n">worker</span><span class="p">.</span><span class="nf">kill</span>
<span class="nb">puts</span> <span class="s2">"4. Finished manager"</span>
<span class="k">end</span>
<span class="n">manager</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"5. Finished script"</span>
</code></pre>
<p>I expected items <code>1</code> through <code>5</code> to be printed in order, but in fact, <code>4</code> is never printed:</p>
<pre><code>$ ruby fiber_transfer_test.rb
1. Transfer to Worker
2. Begin Worker
3. Killing Worker
5. Finished script
</code></pre>
<p>It seems like <code>worker.kill</code> is transferring control to the top-level fiber instead of giving it back to <code>manager</code>.</p>
<p>I also tried having the thread kill <em>itself</em>, hoping it would return to the fiber that originally <code>.transfer</code>ed to it, but it also seems to jump out:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">manager</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="n">worker</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="s2">"2. Begin Worker"</span>
<span class="n">manager</span><span class="p">.</span><span class="nf">transfer</span>
<span class="no">Fiber</span><span class="p">.</span><span class="nf">current</span><span class="p">.</span><span class="nf">kill</span>
<span class="nb">puts</span> <span class="s2">"This should never print -- killed"</span>
<span class="k">end</span>
<span class="nb">puts</span> <span class="s2">"1. Transfer to Worker"</span>
<span class="n">worker</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"3. Killing Worker"</span>
<span class="n">worker</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"4. Finished manager"</span>
<span class="k">end</span>
<span class="n">manager</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"5. Finished script"</span>
</code></pre>
<p>Prints:</p>
<pre><code>1. Transfer to Worker
2. Begin Worker
3. Killing Worker
5. Finished script
</code></pre> Ruby master - Bug #20088 (Open): Ruby 3.3.0 does not cross-complie on arm64-darwinhttps://bugs.ruby-lang.org/issues/200882023-12-26T15:33:49Zstanhu (Stan Hu)
<p>To reproduce:</p>
<pre><code class="shell syntaxhl" data-language="shell">docker run <span class="nt">-it</span> ghcr.io/rake-compiler/rake-compiler-dock-image:1.4.0.rc2-mri-arm64-darwin bash
<span class="nb">cd</span> /tmp
<span class="nb">export </span><span class="nv">CPPFLAGS</span><span class="o">=</span><span class="s1">''</span>
<span class="nb">export </span><span class="nv">CFLAGS</span><span class="o">=</span><span class="s1">'-O1 -fno-omit-frame-pointer -fno-fast-math -fstack-protector-strong '</span>
<span class="nb">export </span><span class="nv">LDFLAGS</span><span class="o">=</span><span class="s1">'-pipe '</span>
<span class="nb">export </span><span class="nv">CC</span><span class="o">=</span>aarch64-apple-darwin-clang
<span class="nb">export </span><span class="nv">MAKE</span><span class="o">=</span><span class="s1">'make V=1'</span>
rake-compiler cross-ruby <span class="nv">VERSION</span><span class="o">=</span>3.3.0 <span class="nv">HOST</span><span class="o">=</span>aarch64-apple-darwin
</code></pre>
<p>This errors out with:</p>
<pre><code class="shell syntaxhl" data-language="shell">aarch64-apple-darwin-clang <span class="nt">-O1</span> <span class="nt">-fno-omit-frame-pointer</span> <span class="nt">-fno-fast-math</span> <span class="nt">-fstack-protector-strong</span> <span class="nt">-fdeclspec</span> <span class="nt">-O3</span> <span class="nt">-fno-fast-math</span> <span class="nt">-ggdb3</span> <span class="nt">-Wall</span> <span class="nt">-Wextra</span> <span class="nt">-Wextra-tokens</span> <span class="nt">-Wdeprecated-declarations</span> <span class="nt">-Wdivision-by-zero</span> <span class="nt">-Wdiv-by-zero</span> <span class="nt">-Wimplicit-function-declaration</span> <span class="nt">-Wimplicit-int</span> <span class="nt">-Wpointer-arith</span> <span class="nt">-Wshorten-64-to-32</span> <span class="nt">-Wwrite-strings</span> <span class="nt">-Wold-style-definition</span> <span class="nt">-Wmissing-noreturn</span> <span class="nt">-Wno-constant-logical-operand</span> <span class="nt">-Wno-long-long</span> <span class="nt">-Wno-missing-field-initializers</span> <span class="nt">-Wno-overlength-strings</span> <span class="nt">-Wno-parentheses-equality</span> <span class="nt">-Wno-self-assign</span> <span class="nt">-Wno-tautological-compare</span> <span class="nt">-Wno-unused-parameter</span> <span class="nt">-Wno-unused-value</span> <span class="nt">-Wunused-variable</span> <span class="nt">-Wmisleading-indentation</span> <span class="nt">-Wundef</span> <span class="nt">-pipe</span> <span class="nt">-march</span><span class="o">=</span>arm64 <span class="nt">-U_FORTIFY_SOURCE</span> <span class="nt">-D_FORTIFY_SOURCE</span><span class="o">=</span>2 <span class="nt">-fstack-protector-strong</span> <span class="nt">-fno-strict-overflow</span> <span class="nt">-fvisibility</span><span class="o">=</span>hidden <span class="nt">-DRUBY_EXPORT</span> <span class="nt">-fPIE</span> <span class="nt">-I</span><span class="nb">.</span> <span class="nt">-I</span>.ext/include/arm64-darwin <span class="nt">-I</span>/usr/local/rake-compiler/sources/ruby-3.3.0/include <span class="nt">-I</span>/usr/local/rake-compiler/sources/ruby-3.3.0 <span class="nt">-I</span>/usr/local/rake-compiler/sources/ruby-3.3.0/prism <span class="nt">-I</span>/usr/local/rake-compiler/sources/ruby-3.3.0/enc/unicode/15.0.0 <span class="nt">-D_XOPEN_SOURCE</span> <span class="nt">-D_DARWIN_C_SOURCE</span> <span class="nt">-D_DARWIN_UNLIMITED_SELECT</span> <span class="nt">-D_REENTRANT</span> <span class="nt">-o</span> main.o <span class="nt">-c</span> /usr/local/rake-compiler/sources/ruby-3.3.0/main.c
clang: error: the clang compiler does not support <span class="s1">'-march=arm64'</span>
make: <span class="k">***</span> <span class="o">[</span>uncommon.mk:1291: main.o] Error 1
</code></pre>
<p>This appears to be a regression due to <a href="https://github.com/ruby/ruby/pull/9250" class="external">https://github.com/ruby/ruby/pull/9250</a>. <code>RUBY_DEFAULT_ARCH("$target_cpu")</code> is called, and this <code>case</code> statement is hit:</p>
<pre><code data-language="ac">AS_CASE([$build_os],
[darwin*], [ARCH_FLAG="-arch "$1],
[ARCH_FLAG=-march=$1]
</code></pre>
<p>I'm not sure this test is correct, since <code>$build_os</code> appears to be <code>linux-gnu</code>. This results in <code>-march=arm64</code> being used, which is not a valid option even in <code>clang</code> 15.0.0.</p>
<p>Should <code>$target_cpu</code> and <code>$target_os</code> be considered instead?</p>
<p>The <code>configure</code> output shows:</p>
<pre><code>Configuration summary for ruby version 3.3.0
* Installation prefix: /usr/local/rake-compiler/ruby/aarch64-apple-darwin/ruby-3.3.0
* exec prefix: ${prefix}
* arch: arm64-darwin
* site arch: ${arch}
* RUBY_BASE_NAME: ruby
* enable shared: no
* ruby lib prefix: ${libdir}/${RUBY_BASE_NAME}
* site libraries path: ${rubylibprefix}/${sitearch}
* vendor path: ${rubylibprefix}/vendor_ruby
* target OS: darwin
* compiler: aarch64-apple-darwin-clang
* with thread: pthread
* with coroutine: arm64
* enable shared libs: no
* dynamic library ext: bundle
* CFLAGS: -fdeclspec ${optflags} ${debugflags} ${warnflags}
* LDFLAGS: -L. -pipe -fstack-protector-strong
* DLDFLAGS: -pipe -Wl,-multiply_defined,suppress -Wl,-undefined,dynamic_lookup
* optflags: -O3 -fno-fast-math
* debugflags: -ggdb3
* warnflags: -Wall -Wextra -Wextra-tokens -Wdeprecated-declarations -Wdivision-by-zero -Wdiv-by-zero -Wimplicit-function-declaration -Wimplicit-int -Wpointer-arith -Wshorten-64-to-32 -Wwrite-strings -Wold-style-definition \
-Wmissing-noreturn -Wno-constant-logical-operand -Wno-long-long -Wno-missing-field-initializers -Wno-overlength-strings -Wno-parentheses-equality -Wno-self-assign -Wno-tautological-compare -Wno-unused-parameter \
-Wno-unused-value -Wunused-variable -Wmisleading-indentation -Wundef
* strip command: aarch64-apple-darwin-strip -A -n
* install doc: no
* YJIT support: no
* RJIT support: no
* man page type: man
* BASERUBY -v: ruby 3.1.3p185 (2022-11-24 revision 1a6b16756e) [x86_64-linux]
</code></pre>
<p>The <code>configure</code> statement for reference:</p>
<pre><code>./configure --host=aarch64-apple-darwin --target=aarch64-apple-darwin --build=x86_64-pc-linux-gnu --enable-install-static-library --disable-jit-support --disable-install-doc --with-ext= --enable-static --disable-shared --prefix=/usr/local/rake-compiler/ruby/aarch64-apple-darwin/ruby-3.3.0
</code></pre>
<p>This was first reported in a CI failure in <a href="https://github.com/rake-compiler/rake-compiler-dock/pull/112#issuecomment-1869367367" class="external">https://github.com/rake-compiler/rake-compiler-dock/pull/112#issuecomment-1869367367</a>.</p> Ruby master - Bug #20082 (Open): Killing fibers across threads: unexpected exceptionhttps://bugs.ruby-lang.org/issues/200822023-12-23T21:15:27Zzverok (Victor Shepelev)zverok.offline@gmail.com
<p>For providing the example in a changelog, I tried to imitate killing fibers belonging to other threads.<br>
Documentation <a href="https://docs.ruby-lang.org/en/master/Fiber.html#method-i-kill" class="external">claims</a></p>
<blockquote>
<p>Raises FiberError if called on a fiber belonging to another thread.</p>
</blockquote>
<p>So, I created this artificial example to check how it works:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">fibers</span> <span class="o">=</span> <span class="p">[]</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span>
<span class="n">f</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="p">(</span><span class="mi">1</span><span class="o">..</span><span class="p">).</span><span class="nf">each</span> <span class="p">{</span> <span class="nb">sleep</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span> <span class="p">}</span> <span class="p">}</span>
<span class="n">fibers</span> <span class="o"><<</span> <span class="n">f</span>
<span class="n">f</span><span class="p">.</span><span class="nf">resume</span>
<span class="p">}</span>
<span class="nb">sleep</span><span class="p">(</span><span class="mf">0.1</span><span class="p">)</span> <span class="c1"># to make sure the thread has started</span>
<span class="n">fibers</span><span class="p">.</span><span class="nf">last</span><span class="p">.</span><span class="nf">kill</span>
</code></pre>
<p>The example indeed fails with <code>FiberError</code>, but the error message is confusing:</p>
<pre><code>in `kill': attempt to resume a resumed fiber (double resume) (FiberError)
</code></pre>
<p>Is this an expected message for such case? Or am I misunderstanding something?</p> Ruby master - Bug #20081 (Open): Transfered Fiber doesn't return to Fiber that started ithttps://bugs.ruby-lang.org/issues/200812023-12-23T17:44:10Zrmosolgo (Robert Mosolgo)rdmosolgo@gmail.com
<p>Hi! I'm trying to figure out how to make sure that Fibers started with <code>.transfer</code> end up <em>terminated</em>, not just suspended. (If they're suspended, Rails thinks they're still alive, and they continue to hold onto database connections, see: <a href="https://github.com/rmosolgo/graphql-ruby/issues/4739#issuecomment-1866930914" class="external">https://github.com/rmosolgo/graphql-ruby/issues/4739#issuecomment-1866930914</a>.)</p>
<p>So, I'm looking for way to make sure that any Fiber I start with <code>.transfer</code> will be properly terminated. But what I noticed is that when a transfer-based Fiber terminates, it gives control back to the top-most Fiber, not the Fiber which transfered to it. Is this intended? Here's a script to replicate the issue:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">manager</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="n">parent</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">current</span>
<span class="n">worker</span> <span class="o">=</span> <span class="no">Fiber</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="s2">"2. Begin Worker"</span>
<span class="n">parent</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"4. End Worker"</span>
<span class="k">end</span>
<span class="nb">puts</span> <span class="s2">"1. Transfer 1"</span>
<span class="n">worker</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"3. Transfer 2"</span>
<span class="n">worker</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"5. Finished manager"</span>
<span class="k">end</span>
<span class="n">manager</span><span class="p">.</span><span class="nf">transfer</span>
<span class="nb">puts</span> <span class="s2">"6. Finished script"</span>
</code></pre>
<p>I expect the steps to print in order:</p>
<pre><code>1. Transfer 1
2. Begin Worker
3. Transfer 2
4. End Worker
5. Finished manager
6. Finished script
</code></pre>
<p>But instead, <code>5. ...</code> is skipped:</p>
<pre><code>1. Transfer 1
2. Begin Worker
3. Transfer 2
4. End Worker
6. Finished script
</code></pre>
<p>I think that's because my <code>worker</code> fiber terminates and passes control back to the top-level Fiber.</p>
<p>Should it have passed control back to the <code>manager</code>? Or is there another way to make sure <code>worker</code> is terminated, and <code>manager</code> gets control?</p> Ruby master - Bug #20079 (Open): alexandria testsuite began to segfault recentlyhttps://bugs.ruby-lang.org/issues/200792023-12-22T03:59:59Zmtasaka (Mamoru TASAKA)mtasaka@fedoraproject.org
<p>Looks like Fedora alexandria-0.7.9-4 testsuite began to segfault with recent ruby3.3.0dev.<br>
It does not always segfault, but with about 20-30%? probability the testsuite segfaults, so it may be GC related?</p>
<p>And looks like:<br>
OKAY: <a class="changeset" title="Make the SHAPE_TOO_COMPLEX performance warning more actionable As suggested by Mame, we should t..." href="https://bugs.ruby-lang.org/projects/ruby-master/repository/git/revisions/ba1d1522d35a7dd2595603ead57cd0fa8b21ba8b">ba1d1522d3</a><br>
BAD: <a class="changeset" title="Fix flaky test test_stat_heap The test sometimes fails with: 1) Failure: TestGc#test_st..." href="https://bugs.ruby-lang.org/projects/ruby-master/repository/git/revisions/ce436ff3e3cbd6810d7cf83fedbd2b55995ca0b1">ce436ff3e3</a></p>
<p>Comparison: <a href="https://github.com/ruby/ruby/compare/ba1d1522d3...ce436ff3e3" class="external">https://github.com/ruby/ruby/compare/ba1d1522d3...ce436ff3e3</a></p>
<p>alexandria means <a href="https://github.com/mvz/alexandria-book-collection-manager" class="external">https://github.com/mvz/alexandria-book-collection-manager</a></p>
<p>Backtrace is:</p>
<pre><code>+ xvfb-run -s '-screen 0 640x480x24' rake spec:unit
/usr/bin/ruby -rbundler/setup -rsimplecov -Ilib -w -I/usr/share/gems/gems/rspec-support-3.12.1/lib:/usr/share/gems/gems/rspec-core-3.12.2/lib /usr/share/gems/gems/rspec-core-3.12.2/exe/rspec --pattern spec/alexandria/\*\*/\*_spec.rb
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:61: warning: assigned but unused variable - e
/usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/version/info.rb:76: warning: statement not reached
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/ui_manager.rb:728: warning: assigned but unused variable - book
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/ui_manager.rb:728: warning: assigned but unused variable - isbn
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/ui_manager.rb:728: warning: assigned but unused variable - library
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/ui_manager.rb:714: warning: assigned but unused variable - books_to_add
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/ui_manager.rb:701: warning: assigned but unused variable - title
*****...*....../builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
.........../builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
./builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb:222:in `regularize_book_from_yaml': YAML.unescape is deprecated
................**....../usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-model.rb:105: [BUG] Segmentation fault at 0x0000000000000000
ruby 3.3.0dev (2023-12-22 master 68bcca4c2b) [x86_64-linux]
-- Control frame information -----------------------------------------------
c:0041 p:0020 s:0220 e:000214 METHOD /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-model.rb:105
c:0040 p:0007 s:0210 e:000209 METHOD /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-iter.rb:33
c:0039 p:0014 s:0202 e:000201 METHOD /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/libraries_combo.rb:79
c:0038 p:0075 s:0194 e:000193 METHOD /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/libraries_combo.rb:41
c:0037 p:0062 s:0186 e:000185 METHOD /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/acquire_dialog.rb:58 [FINISH]
c:0036 p:---- s:0178 e:000177 CFUNC :new
c:0035 p:0015 s:0173 e:000172 BLOCK /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/spec/alexandria/ui/acquire_dialog_spec.rb:12 [FINISH]
c:0034 p:---- s:0169 e:000168 CFUNC :instance_exec
c:0033 p:0022 s:0164 e:000163 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:263
c:0032 p:0002 s:0159 e:000158 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:511
c:0031 p:0002 s:0156 e:000155 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:468
c:0030 p:0002 s:0153 e:000152 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:486
c:0029 p:0002 s:0150 e:000149 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:626
c:0028 p:0018 s:0147 e:000146 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:352
c:0027 p:0004 s:0141 e:000140 BLOCK /usr/share/gems/gems/webmock-3.18.1/lib/webmock/rspec.rb:37 [FINISH]
c:0026 p:---- s:0137 e:000136 CFUNC :instance_exec
c:0025 p:0013 s:0132 e:000131 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:457
c:0024 p:0010 s:0126 e:000125 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:390
c:0023 p:0009 s:0120 e:000119 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:628
c:0022 p:0018 s:0117 e:000116 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:352
c:0021 p:0037 s:0111 E:0026b8 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:629
c:0020 p:0104 s:0104 E:002648 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:486
c:0019 p:0018 s:0097 E:0025c8 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:468
c:0018 p:0019 s:0092 E:000bb8 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:511
c:0017 p:0076 s:0087 E:002578 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:259
c:0016 p:0037 s:0080 e:000079 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:646 [FINISH]
c:0015 p:---- s:0074 e:000073 CFUNC :map
c:0014 p:0011 s:0070 e:000069 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:642
c:0013 p:0052 s:0065 e:000064 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:607
c:0012 p:0007 s:0056 e:000055 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121 [FINISH]
c:0011 p:---- s:0052 e:000051 CFUNC :map
c:0010 p:0030 s:0048 e:000047 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121
c:0009 p:0026 s:0045 e:000044 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/configuration.rb:2070
c:0008 p:0007 s:0041 e:000040 BLOCK /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:116
c:0007 p:0009 s:0037 e:000036 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/reporter.rb:74
c:0006 p:0019 s:0032 e:000031 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:115
c:0005 p:0035 s:0025 e:000024 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:89
c:0004 p:0058 s:0019 e:000018 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:71
c:0003 p:0013 s:0011 e:000010 METHOD /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:45
c:0002 p:0010 s:0006 e:000005 EVAL /usr/share/gems/gems/rspec-core-3.12.2/exe/rspec:4 [FINISH]
c:0001 p:0000 s:0003 E:000030 DUMMY [FINISH]
-- Ruby level backtrace information ----------------------------------------
/usr/share/gems/gems/rspec-core-3.12.2/exe/rspec:4:in `<main>'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:45:in `invoke'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:71:in `run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:89:in `run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:115:in `run_specs'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/reporter.rb:74:in `report'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:116:in `block in run_specs'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/configuration.rb:2070:in `with_suite_hooks'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `block (2 levels) in run_specs'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `map'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb:121:in `block (3 levels) in run_specs'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:607:in `run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:642:in `run_examples'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:642:in `map'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb:646:in `block in run_examples'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:259:in `run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:511:in `with_around_and_singleton_context_hooks'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:468:in `with_around_example_hooks'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:486:in `run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:629:in `run_around_example_hooks_for'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:352:in `call'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:628:in `block (2 levels) in run_around_example_hooks_for'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:390:in `execute_with'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:457:in `instance_exec'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:457:in `instance_exec'
/usr/share/gems/gems/webmock-3.18.1/lib/webmock/rspec.rb:37:in `block (2 levels) in <top (required)>'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:352:in `call'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:626:in `block in run_around_example_hooks_for'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb:486:in `block in run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:468:in `block in with_around_example_hooks'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:511:in `block in with_around_and_singleton_context_hooks'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:263:in `block in run'
/usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb:263:in `instance_exec'
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/spec/alexandria/ui/acquire_dialog_spec.rb:12:in `block (2 levels) in <top (required)>'
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/spec/alexandria/ui/acquire_dialog_spec.rb:12:in `new'
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/acquire_dialog.rb:58:in `initialize'
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/libraries_combo.rb:41:in `populate_with_libraries'
/builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/libraries_combo.rb:79:in `append_entry'
/usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-iter.rb:33:in `set_value'
/usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-model.rb:105:in `get_column_type'
-- Threading information ---------------------------------------------------
Total ractor count: 1
Ruby thread count for this ractor: 1
-- Machine register context ------------------------------------------------
RIP: 0x00007f6a3121a817 RBP: 0x00007ffdbecf5770 RSP: 0x00007ffdbecf5708
RAX: 0x0000000000000091 RBX: 0x0000009100100003 RCX: 0x00007f6a30b356f0
RDX: 0x00007ffdbecf5728 RDI: 0x6c2f322e32312e33 RSI: 0x0000000000000091
R8: 0x000055e2d391aae8 R9: 0x00000000000006e8 R10: 0x000000000000000c
R11: 0x0000000000077813 R12: 0x00007f6a13a63040 R13: 0x6c2f322e32312e33
R14: 0x000055e2d264ea80 R15: 0x0000000000000091 EFL: 0x0000000000010206
-- C level backtrace information -------------------------------------------
/lib64/libruby.so.3.3(rb_print_backtrace+0x21) [0x7f6a3127ea21] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_dump.c:820
/lib64/libruby.so.3.3(rb_vm_bugreport+0x9aa) [0x7f6a3128132a] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_dump.c:1151
/lib64/libruby.so.3.3(rb_bug_for_fatal_signal+0x110) [0x7f6a310d81c0] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/error.c:1065
/lib64/libruby.so.3.3(sigsegv+0x56) [0x7f6a311f4966] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/signal.c:926
/lib64/libc.so.6(__restore_rt+0x0) [0x7f6a30cd49a0]
/lib64/libruby.so.3.3(rb_id_table_lookup+0x7) [0x7f6a3121a817] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/symbol.h:72
/lib64/libruby.so.3.3(vm_search_cc.lto_priv.0+0x58) [0x7f6a31255318] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:2046
/lib64/libruby.so.3.3(vm_search_method_slowpath0.lto_priv.0+0x39) [0x7f6a31255799] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:2142
/lib64/libruby.so.3.3(vm_exec_core.lto_priv.0+0x129) [0x7f6a31264499] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:2224
/lib64/libruby.so.3.3(rb_vm_exec+0x17d) [0x7f6a3127cfdd] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:2486
/lib64/libruby.so.3.3(rb_call0+0x378) [0x7f6a31270868] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_eval.c:110
/lib64/libruby.so.3.3(rb_funcallv_kw+0x5f) [0x7f6a31270daf] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_eval.c:899
/lib64/libruby.so.3.3(rb_class_new_instance_pass_kw+0x45) [0x7f6a31163235] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/object.c:2130
/lib64/libruby.so.3.3(vm_call_cfunc_with_frame_+0x117) [0x7f6a3125c417] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:3490
/lib64/libruby.so.3.3(vm_exec_core.lto_priv.0+0x16c) [0x7f6a312644dc] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:5581
/lib64/libruby.so.3.3(rb_vm_exec+0x17d) [0x7f6a3127cfdd] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:2486
/lib64/libruby.so.3.3(yield_under+0x19a) [0x7f6a312710fa] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:1634
/lib64/libruby.so.3.3(vm_call_cfunc_with_frame_+0x117) [0x7f6a3125c417] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:3490
/lib64/libruby.so.3.3(vm_sendish.lto_priv.0+0xb9) [0x7f6a3125d909] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:5585
/lib64/libruby.so.3.3(vm_exec_core.lto_priv.0+0x1daf) [0x7f6a3126611f] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/redhat-linux-build/insns.def:814
/lib64/libruby.so.3.3(rb_vm_exec+0x17d) [0x7f6a3127cfdd] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:2486
/lib64/libruby.so.3.3(yield_under+0x19a) [0x7f6a312710fa] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:1634
/lib64/libruby.so.3.3(vm_call_cfunc_with_frame_+0x117) [0x7f6a3125c417] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:3490
/lib64/libruby.so.3.3(vm_sendish.lto_priv.0+0xb9) [0x7f6a3125d909] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:5585
/lib64/libruby.so.3.3(vm_exec_core.lto_priv.0+0x1daf) [0x7f6a3126611f] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/redhat-linux-build/insns.def:814
/lib64/libruby.so.3.3(rb_vm_exec+0x17d) [0x7f6a3127cfdd] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:2486
/lib64/libruby.so.3.3(rb_yield+0x77) [0x7f6a3126a787] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:1634
/lib64/libruby.so.3.3(rb_ary_collect.lto_priv.0+0x5c) [0x7f6a31065f6c] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/array.c:3632
/lib64/libruby.so.3.3(vm_call_cfunc_with_frame_+0x117) [0x7f6a3125c417] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:3490
/lib64/libruby.so.3.3(vm_sendish.lto_priv.0+0xb9) [0x7f6a3125d909] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:5585
/lib64/libruby.so.3.3(vm_exec_core.lto_priv.0+0x1daf) [0x7f6a3126611f] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/redhat-linux-build/insns.def:814
/lib64/libruby.so.3.3(rb_vm_exec+0x17d) [0x7f6a3127cfdd] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:2486
/lib64/libruby.so.3.3(rb_yield+0x77) [0x7f6a3126a787] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:1634
/lib64/libruby.so.3.3(rb_ary_collect.lto_priv.0+0x5c) [0x7f6a31065f6c] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/array.c:3632
/lib64/libruby.so.3.3(vm_call_cfunc_with_frame_+0x117) [0x7f6a3125c417] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:3490
/lib64/libruby.so.3.3(vm_sendish.lto_priv.0+0xb9) [0x7f6a3125d909] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm_insnhelper.c:5585
/lib64/libruby.so.3.3(vm_exec_core.lto_priv.0+0x1daf) [0x7f6a3126611f] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/redhat-linux-build/insns.def:814
/lib64/libruby.so.3.3(rb_vm_exec+0x17d) [0x7f6a3127cfdd] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/vm.c:2486
/lib64/libruby.so.3.3(rb_ec_exec_node+0xaa) [0x7f6a310e124a] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/eval.c:287
/lib64/libruby.so.3.3(ruby_run_node+0x93) [0x7f6a310e8cd3] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/eval.c:328
/usr/bin/ruby-mri(0x55e2cf058197) [0x55e2cf058197]
/lib64/libc.so.6(__libc_start_call_main+0x7a) [0x7f6a30cbe14a]
/lib64/libc.so.6(__libc_start_main+0x8b) [0x7f6a30cbe20b]
/usr/bin/ruby-mri(_start+0x25) [0x55e2cf0581e5] /usr/src/debug/ruby-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64/main.c:59
-- Other runtime information -----------------------------------------------
* Loaded script: /usr/share/gems/gems/rspec-core-3.12.2/exe/rspec
* Loaded features:
0 enumerator.so
1 thread.rb
2 fiber.so
3 rational.so
4 complex.so
5 ruby2_keywords.rb
6 /usr/lib64/ruby/enc/encdb.so
7 /usr/lib64/ruby/enc/trans/transdb.so
8 /usr/lib64/ruby/rbconfig.rb
9 /usr/share/rubygems/rubygems/compatibility.rb
10 /usr/share/rubygems/rubygems/defaults.rb
11 /usr/share/rubygems/rubygems/deprecate.rb
12 /usr/share/rubygems/rubygems/errors.rb
13 /usr/share/rubygems/rubygems/unknown_command_spell_checker.rb
14 /usr/share/rubygems/rubygems/exceptions.rb
15 /usr/share/rubygems/rubygems/basic_specification.rb
16 /usr/share/rubygems/rubygems/stub_specification.rb
17 /usr/share/rubygems/rubygems/platform.rb
18 /usr/share/rubygems/rubygems/util/list.rb
19 /usr/share/rubygems/rubygems/version.rb
20 /usr/share/rubygems/rubygems/requirement.rb
21 /usr/share/rubygems/rubygems/specification.rb
22 /usr/share/rubygems/rubygems/defaults/operating_system.rb
23 /usr/share/rubygems/rubygems/util.rb
24 /usr/share/rubygems/rubygems/dependency.rb
25 /usr/share/rubygems/rubygems/core_ext/kernel_gem.rb
26 /usr/lib64/ruby/monitor.so
27 /usr/share/ruby/monitor.rb
28 /usr/share/rubygems/rubygems.rb
29 /usr/share/ruby/bundled_gems.rb
30 /usr/share/rubygems/rubygems/path_support.rb
31 /usr/share/ruby/error_highlight/version.rb
32 /usr/share/ruby/error_highlight/base.rb
33 /usr/share/ruby/error_highlight/formatter.rb
34 /usr/share/ruby/error_highlight/core_ext.rb
35 /usr/share/ruby/error_highlight.rb
36 /usr/share/ruby/did_you_mean/version.rb
37 /usr/share/ruby/did_you_mean/core_ext/name_error.rb
38 /usr/share/ruby/did_you_mean/levenshtein.rb
39 /usr/share/ruby/did_you_mean/jaro_winkler.rb
40 /usr/share/ruby/did_you_mean/spell_checker.rb
41 /usr/share/ruby/did_you_mean/spell_checkers/name_error_checkers/class_name_checker.rb
42 /usr/share/ruby/did_you_mean/spell_checkers/name_error_checkers/variable_name_checker.rb
43 /usr/share/ruby/did_you_mean/spell_checkers/name_error_checkers.rb
44 /usr/share/ruby/did_you_mean/spell_checkers/method_name_checker.rb
45 /usr/share/ruby/did_you_mean/spell_checkers/key_error_checker.rb
46 /usr/share/ruby/did_you_mean/spell_checkers/null_checker.rb
47 /usr/share/ruby/did_you_mean/tree_spell_checker.rb
48 /usr/share/ruby/did_you_mean/spell_checkers/require_path_checker.rb
49 /usr/share/ruby/did_you_mean/spell_checkers/pattern_key_name_checker.rb
50 /usr/share/ruby/did_you_mean/formatter.rb
51 /usr/share/ruby/did_you_mean.rb
52 /usr/share/ruby/syntax_suggest/core_ext.rb
53 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/FAKE/bundler/setup.rb
54 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/FAKE/simplecov.rb
55 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/version.rb
56 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/comparable_version.rb
57 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/ruby_features.rb
58 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support.rb
59 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/caller_filter.rb
60 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/version.rb
61 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/warnings.rb
62 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/warnings.rb
63 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/set.rb
64 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/flat_map.rb
65 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/filter_manager.rb
66 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/dsl.rb
67 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/console_codes.rb
68 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/snippet_extractor.rb
69 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/syntax_highlighter.rb
70 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/encoded_string.rb
71 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/exception_presenter.rb
72 /usr/share/ruby/shellwords.rb
73 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/shell_escape.rb
74 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/helpers.rb
75 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/notifications.rb
76 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/reporter.rb
77 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/hooks.rb
78 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/reentrant_mutex.rb
79 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/memoized_helpers.rb
80 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/metadata.rb
81 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/metadata_filter.rb
82 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/pending.rb
83 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/directory_maker.rb
84 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters.rb
85 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/ordering.rb
86 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/world.rb
87 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/backtrace_formatter.rb
88 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/ruby_project.rb
89 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/deprecation_formatter.rb
90 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/output_wrapper.rb
91 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/configuration.rb
92 /usr/share/ruby/optparse.rb
93 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/option_parser.rb
94 /usr/lib64/ruby/cgi/escape.so
95 /usr/share/ruby/cgi/util.rb
96 /usr/share/ruby/erb/version.rb
97 /usr/lib64/ruby/strscan.so
98 /usr/share/ruby/erb/compiler.rb
99 /usr/share/ruby/erb/def_method.rb
100 /usr/lib64/ruby/erb/escape.so
101 /usr/share/ruby/erb/util.rb
102 /usr/share/ruby/erb.rb
103 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/configuration_options.rb
104 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/runner.rb
105 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/invocations.rb
106 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example.rb
107 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/matcher_definition.rb
108 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/method_signature_verifier.rb
109 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/with_keywords_when_needed.rb
110 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/shared_example_group.rb
111 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/recursive_const_methods.rb
112 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_group.rb
113 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core.rb
114 /usr/share/gems/gems/rspec-3.12.0/lib/rspec/version.rb
115 /usr/share/gems/gems/rspec-3.12.0/lib/rspec.rb
116 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag/simple.rb
117 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag/irregular.rb
118 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag/common.rb
119 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag/rfc.rb
120 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag/cldr.rb
121 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag/posix.rb
122 /usr/share/gems/gems/locale-2.1.3/lib/locale/tag.rb
123 /usr/share/gems/gems/locale-2.1.3/lib/locale/taglist.rb
124 /usr/share/gems/gems/locale-2.1.3/lib/locale/driver.rb
125 /usr/share/gems/gems/locale-2.1.3/lib/locale/version.rb
126 /usr/share/gems/gems/locale-2.1.3/lib/locale.rb
127 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/version.rb
128 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/class_info.rb
129 /usr/lib64/ruby/stringio.so
130 /usr/share/ruby/singleton.rb
131 /usr/share/ruby/forwardable/impl.rb
132 /usr/share/ruby/forwardable.rb
133 /usr/share/gems/gems/prime-0.1.2/lib/prime.rb
134 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/mo.rb
135 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/locale_path.rb
136 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/text_domain.rb
137 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/text_domain_group.rb
138 /usr/share/gems/gems/gettext-3.4.9/lib/gettext/text_domain_manager.rb
139 /usr/share/gems/gems/gettext-3.4.9/lib/gettext.rb
140 /usr/share/ruby/logger/version.rb
141 /usr/share/ruby/logger/formatter.rb
142 /usr/share/ruby/logger/period.rb
143 /usr/share/ruby/logger/log_device.rb
144 /usr/share/ruby/logger/severity.rb
145 /usr/share/ruby/logger/errors.rb
146 /usr/share/ruby/logger.rb
147 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/logging.rb
148 /usr/share/gems/gems/locale-2.1.3/lib/locale/driver/env.rb
149 /usr/share/gems/gems/locale-2.1.3/lib/locale/driver/posix.rb
150 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/about.rb
151 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/config.rb
152 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/version.rb
153 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/models/book.rb
154 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_store.rb
155 /usr/share/ruby/observer.rb
156 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_collection.rb
157 /usr/share/gems/gems/psych-5.1.2/lib/psych/versions.rb
158 /usr/share/gems/gems/psych-5.1.2/lib/psych/exception.rb
159 /usr/share/ruby/psych/syntax_error.rb
160 /usr/lib64/ruby/psych.so
161 /usr/share/gems/gems/psych-5.1.2/lib/psych/omap.rb
162 /usr/share/gems/gems/psych-5.1.2/lib/psych/set.rb
163 /usr/share/gems/gems/psych-5.1.2/lib/psych/class_loader.rb
164 /usr/share/gems/gems/psych-5.1.2/lib/psych/scalar_scanner.rb
165 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/node.rb
166 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/stream.rb
167 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/document.rb
168 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/sequence.rb
169 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/scalar.rb
170 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/mapping.rb
171 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes/alias.rb
172 /usr/share/gems/gems/psych-5.1.2/lib/psych/nodes.rb
173 /usr/share/gems/gems/psych-5.1.2/lib/psych/streaming.rb
174 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors/visitor.rb
175 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors/to_ruby.rb
176 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors/emitter.rb
177 /usr/share/gems/gems/psych-5.1.2/lib/psych/handler.rb
178 /usr/share/gems/gems/psych-5.1.2/lib/psych/tree_builder.rb
179 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors/yaml_tree.rb
180 /usr/share/gems/gems/psych-5.1.2/lib/psych/json/ruby_events.rb
181 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors/json_tree.rb
182 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors/depth_first.rb
183 /usr/share/gems/gems/psych-5.1.2/lib/psych/visitors.rb
184 /usr/share/gems/gems/psych-5.1.2/lib/psych/parser.rb
185 /usr/share/gems/gems/psych-5.1.2/lib/psych/coder.rb
186 /usr/share/gems/gems/psych-5.1.2/lib/psych/core_ext.rb
187 /usr/share/gems/gems/psych-5.1.2/lib/psych/stream.rb
188 /usr/share/gems/gems/psych-5.1.2/lib/psych/json/yaml_events.rb
189 /usr/share/gems/gems/psych-5.1.2/lib/psych/json/tree_builder.rb
190 /usr/share/gems/gems/psych-5.1.2/lib/psych/json/stream.rb
191 /usr/share/gems/gems/psych-5.1.2/lib/psych/handlers/document_stream.rb
192 /usr/share/ruby/psych.rb
193 /usr/share/ruby/yaml.rb
194 /usr/share/ruby/fileutils.rb
195 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/security.rb
196 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/parseexception.rb
197 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/formatters/default.rb
198 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/formatters/pretty.rb
199 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/node.rb
200 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/child.rb
201 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/parent.rb
202 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/xmltokens.rb
203 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/namespace.rb
204 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/encoding.rb
205 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/source.rb
206 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/entity.rb
207 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/attlistdecl.rb
208 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/doctype.rb
209 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/text.rb
210 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/attribute.rb
211 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/cdata.rb
212 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/functions.rb
213 /usr/share/ruby/prettyprint.rb
214 /usr/share/ruby/pp.rb
215 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/parsers/xpathparser.rb
216 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/xpath_parser.rb
217 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/xpath.rb
218 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/element.rb
219 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/xmldecl.rb
220 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/comment.rb
221 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/instruction.rb
222 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/rexml.rb
223 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/output.rb
224 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/undefinednamespaceexception.rb
225 /usr/share/ruby/set.rb
226 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/parsers/baseparser.rb
227 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/parsers/streamparser.rb
228 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/validation/validationexception.rb
229 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/parsers/treeparser.rb
230 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/document.rb
231 /usr/share/ruby/delegate.rb
232 /usr/lib64/ruby/etc.so
233 /usr/share/ruby/tmpdir.rb
234 /usr/share/ruby/tempfile.rb
235 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/net.rb
236 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/image_fetcher.rb
237 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/models/library.rb
238 /usr/lib64/ruby/date_core.so
239 /usr/share/ruby/date.rb
240 /usr/share/ruby/time.rb
241 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/smart_library.rb
242 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/execution_queue.rb
243 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/import_library.rb
244 /usr/share/ruby/csv/fields_converter.rb
245 /usr/share/ruby/English.rb
246 /usr/share/ruby/csv/input_record_separator.rb
247 /usr/share/ruby/csv/row.rb
248 /usr/share/ruby/csv/table.rb
249 /usr/share/ruby/csv/parser.rb
250 /usr/share/ruby/csv/writer.rb
251 /usr/share/ruby/csv/version.rb
252 /usr/share/ruby/csv/core_ext/array.rb
253 /usr/share/ruby/csv/core_ext/string.rb
254 /usr/share/ruby/csv.rb
255 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/format_error.rb
256 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/isobmff.rb
257 /usr/lib64/ruby/pathname.so
258 /usr/share/ruby/pathname.rb
259 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/reader.rb
260 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/chunky_reader.rb
261 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/seekable_io_reader.rb
262 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/stream_io_reader.rb
263 /usr/share/gems/gems/image_size-3.3.0/lib/image_size/string_reader.rb
264 /usr/share/gems/gems/image_size-3.3.0/lib/image_size.rb
265 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/export_library.rb
266 /usr/share/ruby/cgi/core.rb
267 /usr/share/ruby/cgi/cookie.rb
268 /usr/share/ruby/cgi.rb
269 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/douban.rb
270 /usr/lib64/ruby/socket.so
271 /usr/share/ruby/socket.rb
272 /usr/share/ruby/timeout.rb
273 /usr/lib64/ruby/io/wait.so
274 /usr/share/ruby/net/protocol.rb
275 /usr/share/ruby/uri/version.rb
276 /usr/share/ruby/uri/rfc2396_parser.rb
277 /usr/share/ruby/uri/rfc3986_parser.rb
278 /usr/share/ruby/uri/common.rb
279 /usr/share/ruby/uri/generic.rb
280 /usr/share/ruby/uri/file.rb
281 /usr/share/ruby/uri/ftp.rb
282 /usr/share/ruby/uri/http.rb
283 /usr/share/ruby/uri/https.rb
284 /usr/share/ruby/uri/ldap.rb
285 /usr/share/ruby/uri/ldaps.rb
286 /usr/share/ruby/uri/mailto.rb
287 /usr/share/ruby/uri/ws.rb
288 /usr/share/ruby/uri/wss.rb
289 /usr/share/ruby/uri.rb
290 /usr/share/ruby/random/formatter.rb
291 /usr/share/ruby/securerandom.rb
292 /usr/share/ruby/resolv.rb
293 /usr/lib64/ruby/zlib.so
294 /usr/share/ruby/net/http/exceptions.rb
295 /usr/share/ruby/net/http/header.rb
296 /usr/share/ruby/net/http/generic_request.rb
297 /usr/share/ruby/net/http/request.rb
298 /usr/share/ruby/net/http/requests.rb
299 /usr/share/ruby/net/http/response.rb
300 /usr/share/ruby/net/http/responses.rb
301 /usr/share/ruby/net/http/proxy_delta.rb
302 /usr/share/ruby/net/http/backward.rb
303 /usr/share/ruby/net/http.rb
304 /usr/lib64/gems/ruby/nokogiri-1.15.5/nokogiri/nokogiri.so
305 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/extension.rb
306 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/version/constant.rb
307 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/version/info.rb
308 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/version.rb
309 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/class_resolver.rb
310 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/syntax_error.rb
311 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/pp/node.rb
312 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/pp/character_data.rb
313 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/pp.rb
314 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/parse_options.rb
315 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/sax/document.rb
316 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/sax/parser_context.rb
317 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/sax/parser.rb
318 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/sax/push_parser.rb
319 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/sax.rb
320 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/searchable.rb
321 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/node/save_options.rb
322 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/node.rb
323 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/attribute_decl.rb
324 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/element_decl.rb
325 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/element_content.rb
326 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/character_data.rb
327 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/namespace.rb
328 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/attr.rb
329 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/dtd.rb
330 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/cdata.rb
331 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/text.rb
332 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/document.rb
333 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/document_fragment.rb
334 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/processing_instruction.rb
335 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/node_set.rb
336 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/syntax_error.rb
337 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/xpath/syntax_error.rb
338 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/xpath.rb
339 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/xpath_context.rb
340 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/builder.rb
341 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/reader.rb
342 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/notation.rb
343 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/entity_decl.rb
344 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/entity_reference.rb
345 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/schema.rb
346 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml/relax_ng.rb
347 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xml.rb
348 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xslt/stylesheet.rb
349 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/xslt.rb
350 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/entity_lookup.rb
351 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/document.rb
352 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/document_fragment.rb
353 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/encoding_reader.rb
354 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/sax/parser_context.rb
355 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/sax/parser.rb
356 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/sax/push_parser.rb
357 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/element_description.rb
358 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/element_description_defaults.rb
359 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4.rb
360 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html.rb
361 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/decorators/slop.rb
362 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css/node.rb
363 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css/xpath_visitor.rb
364 /usr/share/gems/gems/racc-1.7.3/lib/racc/info.rb
365 /usr/lib64/gems/ruby/racc-1.7.3/racc/cparse.so
366 /usr/share/gems/gems/racc-1.7.3/lib/racc/parser.rb
367 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css/parser_extras.rb
368 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css/parser.rb
369 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css/tokenizer.rb
370 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css/syntax_error.rb
371 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/css.rb
372 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html4/builder.rb
373 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/encoding_handler.rb
374 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html5/document.rb
375 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html5/document_fragment.rb
376 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html5/node.rb
377 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/gumbo.rb
378 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri/html5.rb
379 /usr/share/gems/gems/nokogiri-1.15.5/lib/nokogiri.rb
380 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/mappings/html4.rb
381 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/mappings/xhtml1.rb
382 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/mappings/expanded.rb
383 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/flavors.rb
384 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/encoder.rb
385 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/decoder.rb
386 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities/version.rb
387 /usr/share/gems/gems/htmlentities-4.3.4/lib/htmlentities.rb
388 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/web.rb
389 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/thalia_provider.rb
390 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/worldcat.rb
391 /usr/lib64/gems/ruby/zoom-0.5.0/zoom.so
392 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/pseudomarc.rb
393 /usr/share/gems/gems/marc-1.2.0/lib/marc/version.rb
394 /usr/share/gems/gems/marc-1.2.0/lib/marc/constants.rb
395 /usr/share/gems/gems/marc-1.2.0/lib/marc/record.rb
396 /usr/share/gems/gems/marc-1.2.0/lib/marc/datafield.rb
397 /usr/share/gems/gems/marc-1.2.0/lib/marc/controlfield.rb
398 /usr/share/gems/gems/marc-1.2.0/lib/marc/subfield.rb
399 /usr/share/gems/gems/scrub_rb-1.0.1/lib/scrub_rb/version.rb
400 /usr/share/gems/gems/scrub_rb-1.0.1/lib/scrub_rb/monkey_patch.rb
401 /usr/share/gems/gems/scrub_rb-1.0.1/lib/scrub_rb.rb
402 /usr/share/gems/gems/marc-1.2.0/lib/marc/reader.rb
403 /usr/share/gems/gems/marc-1.2.0/lib/marc/writer.rb
404 /usr/share/gems/gems/marc-1.2.0/lib/marc/exception.rb
405 /usr/share/gems/gems/marc-1.2.0/lib/marc/xmlwriter.rb
406 /usr/share/gems/gems/marc-1.2.0/lib/marc/unsafe_xmlwriter.rb
407 /usr/share/gems/gems/marc-1.2.0/lib/marc/xml_parsers.rb
408 /usr/share/gems/gems/marc-1.2.0/lib/marc/xmlreader.rb
409 /usr/share/gems/gems/marc-1.2.0/lib/marc/dublincore.rb
410 /usr/share/ruby/json/version.rb
411 /usr/share/ruby/ostruct.rb
412 /usr/share/ruby/json/generic_object.rb
413 /usr/share/ruby/json/common.rb
414 /usr/lib64/ruby/json/ext/parser.so
415 /usr/lib64/ruby/json/ext/generator.so
416 /usr/share/ruby/json/ext.rb
417 /usr/share/ruby/json.rb
418 /usr/share/gems/gems/marc-1.2.0/lib/marc/jsonl_reader.rb
419 /usr/share/gems/gems/marc-1.2.0/lib/marc/jsonl_writer.rb
420 /usr/share/gems/gems/marc-1.2.0/lib/marc.rb
421 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/z3950_provider.rb
422 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/loc_provider.rb
423 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/bl_provider.rb
424 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers/sbn_provider.rb
425 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/book_providers.rb
426 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/default_preferences.rb
427 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/preferences.rb
428 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/undo_manager.rb
429 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/web_themes.rb
430 /usr/share/gems/gems/glib2-4.2.0/lib/glib2/deprecatable.rb
431 /usr/lib64/gems/ruby/glib2-4.2.0/glib2.so
432 /usr/share/gems/gems/glib2-4.2.0/lib/glib2/version.rb
433 /usr/share/gems/gems/glib2-4.2.0/lib/glib2/deprecated.rb
434 /usr/share/gems/gems/glib2-4.2.0/lib/glib2/date-time.rb
435 /usr/share/gems/gems/glib2-4.2.0/lib/glib2/regex.rb
436 /usr/share/gems/gems/glib2-4.2.0/lib/glib2/variant.rb
437 /usr/share/gems/gems/glib2-4.2.0/lib/glib2.rb
438 /usr/lib64/gems/ruby/gobject-introspection-4.2.0/gobject_introspection.so
439 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/arg-info.rb
440 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/collection-reader.rb
441 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/boxed-info.rb
442 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/callable-info.rb
443 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/function-info.rb
444 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/interface-info.rb
445 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/object-info.rb
446 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/registered-type-info.rb
447 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/repository.rb
448 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/struct-info.rb
449 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/type-info.rb
450 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/type-tag.rb
451 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/union-info.rb
452 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/version.rb
453 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection/loader.rb
454 /usr/share/gems/gems/gobject-introspection-4.2.0/lib/gobject-introspection.rb
455 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/loader.rb
456 /usr/lib64/gems/ruby/gio2-4.2.0/gio2.so
457 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/action.rb
458 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/action-map.rb
459 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/application-command-line.rb
460 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/content-type.rb
461 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/file.rb
462 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/icon.rb
463 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/inet-address.rb
464 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/input-stream.rb
465 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/menu-item.rb
466 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/output-stream.rb
467 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/pollable-input-stream.rb
468 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/pollable-output-stream.rb
469 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/resources.rb
470 /usr/lib64/ruby/fiddle.so
471 /usr/share/ruby/fiddle/closure.rb
472 /usr/share/ruby/fiddle/function.rb
473 /usr/share/ruby/fiddle/version.rb
474 /usr/share/ruby/fiddle.rb
475 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/ruby-seekable.rb
476 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/ruby-input-stream.rb
477 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/ruby-output-stream.rb
478 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/settings.rb
479 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/settings-schema-source.rb
480 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/simple-action.rb
481 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/volume.rb
482 /usr/share/gems/gems/gio2-4.2.0/lib/gio2/deprecated.rb
483 /usr/share/gems/gems/gio2-4.2.0/lib/gio2.rb
484 /usr/share/gems/gems/gdk_pixbuf2-4.2.0/lib/gdk_pixbuf2/loader.rb
485 /usr/share/gems/gems/gdk_pixbuf2-4.2.0/lib/gdk_pixbuf2/pixbuf.rb
486 /usr/share/gems/gems/gdk_pixbuf2-4.2.0/lib/gdk_pixbuf2/pixbuf-loader.rb
487 /usr/share/gems/gems/gdk_pixbuf2-4.2.0/lib/gdk_pixbuf2/deprecated.rb
488 /usr/share/gems/gems/gdk_pixbuf2-4.2.0/lib/gdk_pixbuf2/version.rb
489 /usr/share/gems/gems/gdk_pixbuf2-4.2.0/lib/gdk_pixbuf2.rb
490 /usr/share/gems/gems/atk-4.2.0/lib/atk.rb
491 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/utils.rb
492 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/alpha_component.rb
493 /usr/share/gems/gems/matrix-0.4.2/lib/matrix/version.rb
494 /usr/share/gems/gems/matrix-0.4.2/lib/matrix.rb
495 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/convert.rb
496 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/helper.rb
497 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/abstract_color.rb
498 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/hsl.rb
499 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/hsla.rb
500 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/husl.rb
501 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/rgb.rb
502 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/rgba.rb
503 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/xterm256.rb
504 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/xyy.rb
505 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/xyz.rb
506 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/color_data.rb
507 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/named_colors.rb
508 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/colormap.rb
509 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/listed_colormap.rb
510 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/linear_segmented_colormap.rb
511 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/colormap_registry.rb
512 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/colormap_data/matplotlib_builtin.rb
513 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/colormap_data/seaborn_builtin.rb
514 /usr/share/gems/gems/red-colors-0.3.0/lib/colors/colormap_data.rb
515 /usr/share/gems/gems/red-colors-0.3.0/lib/colors.rb
516 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/color.rb
517 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/paper.rb
518 /usr/lib64/gems/ruby/cairo-1.17.13/cairo.so
519 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/constants.rb
520 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/point.rb
521 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/colors.rb
522 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/papers.rb
523 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context/rectangle.rb
524 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context/triangle.rb
525 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context/circle.rb
526 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context/path.rb
527 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context/blur.rb
528 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context/color.rb
529 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/context.rb
530 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/device.rb
531 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/surface.rb
532 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/pattern.rb
533 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/path.rb
534 /usr/share/gems/gems/cairo-1.17.13/lib/cairo/region.rb
535 /usr/share/gems/gems/cairo-1.17.13/lib/cairo.rb
536 /usr/lib64/gems/ruby/cairo-gobject-4.2.0/cairo_gobject.so
537 /usr/share/gems/gems/cairo-gobject-4.2.0/lib/cairo-gobject.rb
538 /usr/share/gems/gems/pango-4.2.0/lib/pango/loader.rb
539 /usr/share/gems/gems/pango-4.2.0/lib/pango/cairo-loader.rb
540 /usr/share/gems/gems/pango-4.2.0/lib/pango/fc-loader.rb
541 /usr/share/gems/gems/pango-4.2.0/lib/pango/ft2-loader.rb
542 /usr/share/gems/gems/pango-4.2.0/lib/pango/ot-loader.rb
543 /usr/lib64/gems/ruby/pango-4.2.0/pango.so
544 /usr/share/gems/gems/pango-4.2.0/lib/pango/attr-list.rb
545 /usr/share/gems/gems/pango-4.2.0/lib/pango/attr-type.rb
546 /usr/share/gems/gems/pango-4.2.0/lib/pango/color.rb
547 /usr/share/gems/gems/pango-4.2.0/lib/pango/font-description.rb
548 /usr/share/gems/gems/pango-4.2.0/lib/pango/language.rb
549 /usr/share/gems/gems/pango-4.2.0/lib/pango/layout.rb
550 /usr/share/gems/gems/pango-4.2.0/lib/pango/rectangle.rb
551 /usr/share/gems/gems/pango-4.2.0/lib/pango/markup.rb
552 /usr/share/gems/gems/pango-4.2.0/lib/pango/matrix.rb
553 /usr/share/gems/gems/pango-4.2.0/lib/pango/version.rb
554 /usr/share/gems/gems/pango-4.2.0/lib/pango/deprecated.rb
555 /usr/share/gems/gems/pango-4.2.0/lib/pango.rb
556 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/loader.rb
557 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/x11-loader.rb
558 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3.rb
559 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/loader.rb
560 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3.rb
561 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/icons.rb
562 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/builder_base.rb
563 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/event-readers.rb
564 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/atom.rb
565 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/color.rb
566 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/cursor.rb
567 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/event.rb
568 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/rectangle.rb
569 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/rgba.rb
570 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/screen.rb
571 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/window.rb
572 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/window-attr.rb
573 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/cairo.rb
574 /usr/share/gems/gems/gdk3-4.2.0/lib/gdk3/deprecated.rb
575 /usr/lib64/gems/ruby/gtk3-4.2.0/gtk3.so
576 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/gdk-drag-context.rb
577 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/gdk-screen.rb
578 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/about-dialog.rb
579 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/action.rb
580 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/action-group.rb
581 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/application.rb
582 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/binding-set.rb
583 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/border.rb
584 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/box.rb
585 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/button.rb
586 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/builder.rb
587 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/calendar.rb
588 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/cell-layout.rb
589 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/check-menu-item.rb
590 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/clipboard.rb
591 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/color-chooser-dialog.rb
592 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/combo-box.rb
593 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/combo-box-text.rb
594 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/container.rb
595 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/css-provider.rb
596 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/dialog.rb
597 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/entry.rb
598 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/entry-buffer.rb
599 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/file-chooser-dialog.rb
600 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/font-chooser-dialog.rb
601 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/gesture-multi-press.rb
602 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/icon-size.rb
603 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/icon-theme.rb
604 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/icon-view.rb
605 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/image.rb
606 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/image-menu-item.rb
607 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/label.rb
608 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/level-bar.rb
609 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/list-store.rb
610 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/menu-item.rb
611 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/message-dialog.rb
612 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/paned.rb
613 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/radio-action.rb
614 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/radio-button.rb
615 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/recent-chooser-dialog.rb
616 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/response-type.rb
617 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/scale-button.rb
618 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/scrolled-window.rb
619 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/search-bar.rb
620 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/selection-data.rb
621 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/spin-button.rb
622 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/show-uri.rb
623 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/stack.rb
624 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/stock.rb
625 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/stock-item.rb
626 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/style-context.rb
627 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/style-properties.rb
628 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/table.rb
629 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/target-list.rb
630 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/target-entry.rb
631 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/text-buffer.rb
632 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/text-iter.rb
633 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/text-tag.rb
634 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/text-tag-table.rb
635 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/text-view.rb
636 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/toggle-action.rb
637 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/toggle-button.rb
638 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tool-button.rb
639 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-iter.rb
640 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-model.rb
641 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-model-filter.rb
642 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-model-sort.rb
643 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-path.rb
644 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-selection.rb
645 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-store.rb
646 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-view.rb
647 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/tree-view-column.rb
648 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/ui-manager.rb
649 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/version.rb
650 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/widget.rb
651 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/window.rb
652 /usr/share/gems/gems/gtk3-4.2.0/lib/gtk3/deprecated.rb
653 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/completion_models.rb
654 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/libraries_combo.rb
655 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/multi_drag_treeview.rb
656 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/alert_dialog.rb
657 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/about_dialog.rb
658 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/calendar_popup.rb
659 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/error_dialog.rb
660 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/book_properties_dialog_base.rb
661 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/book_properties_dialog.rb
662 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/new_book_dialog_manual.rb
663 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/keep_bad_isbn_dialog.rb
664 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/new_book_dialog.rb
665 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/scanners.rb
666 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/scanners/cue_cat.rb
667 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/scanners/keyboard.rb
668 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/provider_preferences_base_dialog.rb
669 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/provider_preferences_dialog.rb
670 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/new_provider_dialog.rb
671 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/preferences_dialog.rb
672 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/export_format.rb
673 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/confirm_erase_dialog.rb
674 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/export_dialog.rb
675 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/skip_entry_dialog.rb
676 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/import_dialog.rb
677 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/barcode_animation.rb
678 /usr/share/gems/gems/gstreamer-4.2.0/lib/gst/loader.rb
679 /usr/share/gems/gems/gstreamer-4.2.0/lib/gst/base-loader.rb
680 /usr/share/gems/gems/gstreamer-4.2.0/lib/gst/controller-loader.rb
681 /usr/share/gems/gems/gstreamer-4.2.0/lib/gst.rb
682 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/sound.rb
683 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/acquire_dialog.rb
684 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/smart_library_rule_box.rb
685 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/smart_library_properties_dialog_base.rb
686 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/smart_library_properties_dialog.rb
687 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/new_smart_library_dialog.rb
688 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/bad_isbns_dialog.rb
689 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/dndable.rb
690 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/init.rb
691 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/really_delete_dialog.rb
692 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/callbacks.rb
693 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/columns.rb
694 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/conflict_while_copying_dialog.rb
695 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/library_sort_order.rb
696 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/ui_manager.rb
697 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/listview.rb
698 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/iconview_tooltips.rb
699 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/iconview.rb
700 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/sidepane_manager.rb
701 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui/main_app.rb
702 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/ui.rb
703 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria/console.rb
704 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/lib/alexandria.rb
705 /usr/share/gems/gems/addressable-2.8.1/lib/addressable/version.rb
706 /usr/share/gems/gems/addressable-2.8.1/lib/addressable/idna/pure.rb
707 /usr/share/gems/gems/addressable-2.8.1/lib/addressable/idna.rb
708 /usr/share/gems/gems/public_suffix-5.0.0/lib/public_suffix/domain.rb
709 /usr/share/gems/gems/public_suffix-5.0.0/lib/public_suffix/version.rb
710 /usr/share/gems/gems/public_suffix-5.0.0/lib/public_suffix/errors.rb
711 /usr/share/gems/gems/public_suffix-5.0.0/lib/public_suffix/rule.rb
712 /usr/share/gems/gems/public_suffix-5.0.0/lib/public_suffix/list.rb
713 /usr/share/gems/gems/public_suffix-5.0.0/lib/public_suffix.rb
714 /usr/share/gems/gems/addressable-2.8.1/lib/addressable/uri.rb
715 /usr/share/gems/gems/addressable-2.8.1/lib/addressable/template.rb
716 /usr/share/gems/gems/rexml-3.2.6/lib/rexml/light/node.rb
717 /usr/lib64/ruby/bigdecimal.so
718 /usr/share/ruby/bigdecimal.rb
719 /usr/share/gems/gems/crack-0.4.5/lib/crack/xml.rb
720 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/deprecation.rb
721 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/version.rb
722 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/errors.rb
723 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/query_mapper.rb
724 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/uri.rb
725 /usr/share/ruby/base64.rb
726 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/headers.rb
727 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/hash_counter.rb
728 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/hash_keys_stringifier.rb
729 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/values_stringifier.rb
730 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/json.rb
731 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/version_checker.rb
732 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/util/hash_validator.rb
733 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/matchers/hash_argument_matcher.rb
734 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/matchers/hash_excluding_matcher.rb
735 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/matchers/hash_including_matcher.rb
736 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/matchers/any_arg_matcher.rb
737 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_pattern.rb
738 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_signature.rb
739 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/responses_sequence.rb
740 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_stub.rb
741 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/response.rb
742 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/rack_response.rb
743 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/stub_request_snippet.rb
744 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_signature_snippet.rb
745 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/util.rb
746 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/compare_hashes.rb
747 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/lcs.rb
748 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/lcs_compare_arrays.rb
749 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/linear_compare_array.rb
750 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/diff.rb
751 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/patch.rb
752 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff/version.rb
753 /usr/share/gems/gems/hashdiff-1.0.1/lib/hashdiff.rb
754 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_body_diff.rb
755 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/assertion_failure.rb
756 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_execution_verifier.rb
757 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/config.rb
758 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/callback_registry.rb
759 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/request_registry.rb
760 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/stub_registry.rb
761 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/api.rb
762 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/http_lib_adapter_registry.rb
763 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/http_lib_adapter.rb
764 /usr/share/ruby/digest/version.rb
765 /usr/lib64/ruby/digest.so
766 /usr/share/ruby/digest/loader.rb
767 /usr/share/ruby/digest.rb
768 /usr/lib64/ruby/openssl.so
769 /usr/share/ruby/openssl/bn.rb
770 /usr/share/ruby/openssl/marshal.rb
771 /usr/share/ruby/openssl/pkey.rb
772 /usr/share/ruby/openssl/cipher.rb
773 /usr/share/ruby/openssl/digest.rb
774 /usr/share/ruby/openssl/hmac.rb
775 /usr/share/ruby/openssl/x509.rb
776 /usr/share/ruby/openssl/buffering.rb
777 /usr/lib64/ruby/io/nonblock.so
778 /usr/share/ruby/ipaddr.rb
779 /usr/share/ruby/openssl/ssl.rb
780 /usr/share/ruby/openssl/pkcs5.rb
781 /usr/share/ruby/openssl/version.rb
782 /usr/share/ruby/openssl.rb
783 /usr/share/ruby/net/https.rb
784 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/net_http_response.rb
785 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/net_http.rb
786 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/http_rb_adapter.rb
787 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/httpclient_adapter.rb
788 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/patron_adapter.rb
789 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/curb_adapter.rb
790 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/em_http_request_adapter.rb
791 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/typhoeus_hydra_adapter.rb
792 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/excon_adapter.rb
793 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/manticore_adapter.rb
794 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/http_lib_adapters/async_http_client_adapter.rb
795 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/webmock.rb
796 /usr/share/gems/gems/webmock-3.18.1/lib/webmock.rb
797 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/object_formatter.rb
798 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/english_phrasing.rb
799 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/fuzzy_matcher.rb
800 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/composable.rb
801 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/base_matcher.rb
802 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in.rb
803 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/generated_descriptions.rb
804 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/dsl.rb
805 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/matcher_delegator.rb
806 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/aliased_matcher.rb
807 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/expecteds_for_multiple_diffs.rb
808 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers.rb
809 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/expectation_target.rb
810 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/syntax.rb
811 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/configuration.rb
812 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/fail_with.rb
813 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/handler.rb
814 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/version.rb
815 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations.rb
816 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/rspec/matchers/request_pattern_matcher.rb
817 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/rspec/matchers/webmock_matcher.rb
818 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/rspec/matchers.rb
819 /usr/share/gems/gems/webmock-3.18.1/lib/webmock/rspec.rb
820 /usr/share/gems/gems/pry-0.14.1/lib/pry/version.rb
821 /usr/share/gems/gems/pry-0.14.1/lib/pry/last_exception.rb
822 /usr/share/gems/gems/pry-0.14.1/lib/pry/forwardable.rb
823 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/base_helpers.rb
824 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/documentation_helpers.rb
825 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/options_helpers.rb
826 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/command_helpers.rb
827 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/text.rb
828 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/table.rb
829 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers/platform.rb
830 /usr/share/gems/gems/pry-0.14.1/lib/pry/helpers.rb
831 /usr/share/gems/gems/pry-0.14.1/lib/pry/basic_object.rb
832 /usr/share/gems/gems/pry-0.14.1/lib/pry/prompt.rb
833 /usr/share/gems/gems/pry-0.14.1/lib/pry/code_object.rb
834 /usr/share/gems/gems/pry-0.14.1/lib/pry/exceptions.rb
835 /usr/share/gems/gems/pry-0.14.1/lib/pry/hooks.rb
836 /usr/share/gems/gems/pry-0.14.1/lib/pry/input_completer.rb
837 /usr/share/gems/gems/pry-0.14.1/lib/pry/command.rb
838 /usr/share/gems/gems/pry-0.14.1/lib/pry/class_command.rb
839 /usr/share/gems/gems/pry-0.14.1/lib/pry/block_command.rb
840 /usr/share/gems/gems/pry-0.14.1/lib/pry/command_set.rb
841 /usr/share/gems/gems/coderay-1.1.3/lib/coderay.rb
842 /usr/share/gems/gems/pry-0.14.1/lib/pry/syntax_highlighter.rb
843 /usr/share/gems/gems/pry-0.14.1/lib/pry/editor.rb
844 /usr/share/gems/gems/pry-0.14.1/lib/pry/history.rb
845 /usr/share/gems/gems/coderay-1.1.3/lib/coderay/helpers/plugin_host.rb
846 /usr/share/gems/gems/coderay-1.1.3/lib/coderay/encoders.rb
847 /usr/share/gems/gems/coderay-1.1.3/lib/coderay/encoders/_map.rb
848 /usr/share/gems/gems/coderay-1.1.3/lib/coderay/helpers/plugin.rb
849 /usr/share/gems/gems/coderay-1.1.3/lib/coderay/encoders/encoder.rb
850 /usr/share/gems/gems/coderay-1.1.3/lib/coderay/encoders/terminal.rb
851 /usr/share/gems/gems/pry-0.14.1/lib/pry/color_printer.rb
852 /usr/share/gems/gems/pry-0.14.1/lib/pry/exception_handler.rb
853 /usr/share/gems/gems/pry-0.14.1/lib/pry/system_command_handler.rb
854 /usr/share/gems/gems/pry-0.14.1/lib/pry/control_d_handler.rb
855 /usr/share/gems/gems/pry-0.14.1/lib/pry/command_state.rb
856 /usr/share/gems/gems/pry-0.14.1/lib/pry/warning.rb
857 /usr/share/gems/gems/pry-0.14.1/lib/pry/env.rb
858 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/jruby_hacks.rb
859 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/methods_helper.rb
860 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/interrogatable.rb
861 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/grep.rb
862 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/formatter.rb
863 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/globals.rb
864 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/constants.rb
865 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/methods.rb
866 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/self_methods.rb
867 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/instance_vars.rb
868 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/local_names.rb
869 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/local_vars.rb
870 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls/ls_entity.rb
871 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ls.rb
872 /usr/share/gems/gems/pry-0.14.1/lib/pry/config/attributable.rb
873 /usr/share/gems/gems/pry-0.14.1/lib/pry/config/value.rb
874 /usr/share/gems/gems/pry-0.14.1/lib/pry/config/memoized_value.rb
875 /usr/share/gems/gems/pry-0.14.1/lib/pry/config/lazy_value.rb
876 /usr/share/gems/gems/pry-0.14.1/lib/pry/config.rb
877 /usr/share/gems/gems/pry-0.14.1/lib/pry/pry_class.rb
878 /usr/share/gems/gems/method_source-1.0.0/lib/method_source/version.rb
879 /usr/share/gems/gems/method_source-1.0.0/lib/method_source/source_location.rb
880 /usr/share/gems/gems/method_source-1.0.0/lib/method_source/code_helpers.rb
881 /usr/share/gems/gems/method_source-1.0.0/lib/method_source.rb
882 /usr/share/gems/gems/pry-0.14.1/lib/pry/pry_instance.rb
883 /usr/share/gems/gems/pry-0.14.1/lib/pry/inspector.rb
884 /usr/share/gems/gems/pry-0.14.1/lib/pry/pager.rb
885 /usr/share/gems/gems/pry-0.14.1/lib/pry/indent.rb
886 /usr/share/gems/gems/pry-0.14.1/lib/pry/object_path.rb
887 /usr/share/gems/gems/pry-0.14.1/lib/pry/output.rb
888 /usr/share/gems/gems/pry-0.14.1/lib/pry/input_lock.rb
889 /usr/share/gems/gems/pry-0.14.1/lib/pry/repl.rb
890 /usr/share/gems/gems/pry-0.14.1/lib/pry/code.rb
891 /usr/share/gems/gems/pry-0.14.1/lib/pry/ring.rb
892 /usr/share/gems/gems/pry-0.14.1/lib/pry/method.rb
893 /usr/share/gems/gems/pry-0.14.1/lib/pry/wrapped_module.rb
894 /usr/share/gems/gems/pry-0.14.1/lib/pry/wrapped_module/candidate.rb
895 /usr/share/gems/gems/pry-0.14.1/lib/pry/slop/option.rb
896 /usr/share/gems/gems/pry-0.14.1/lib/pry/slop/commands.rb
897 /usr/share/gems/gems/pry-0.14.1/lib/pry/slop.rb
898 /usr/share/gems/gems/pry-0.14.1/lib/pry/cli.rb
899 /usr/share/gems/gems/pry-0.14.1/lib/pry/core_extensions.rb
900 /usr/share/gems/gems/pry-0.14.1/lib/pry/repl_file_loader.rb
901 /usr/share/gems/gems/pry-0.14.1/lib/pry/code/loc.rb
902 /usr/share/gems/gems/pry-0.14.1/lib/pry/code/code_range.rb
903 /usr/share/gems/gems/pry-0.14.1/lib/pry/code/code_file.rb
904 /usr/share/gems/gems/pry-0.14.1/lib/pry/method/weird_method_locator.rb
905 /usr/share/gems/gems/pry-0.14.1/lib/pry/method/disowned.rb
906 /usr/share/gems/gems/pry-0.14.1/lib/pry/method/patcher.rb
907 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/amend_line.rb
908 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/bang.rb
909 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/bang_pry.rb
910 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/cat.rb
911 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/cat/abstract_formatter.rb
912 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/cat/input_expression_formatter.rb
913 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/cat/exception_formatter.rb
914 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/cat/file_formatter.rb
915 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/cd.rb
916 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/change_inspector.rb
917 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/change_prompt.rb
918 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/clear_screen.rb
919 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/code_collector.rb
920 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/disable_pry.rb
921 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/easter_eggs.rb
922 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/edit.rb
923 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/edit/exception_patcher.rb
924 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/edit/file_and_line_locator.rb
925 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/exit.rb
926 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/exit_all.rb
927 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/exit_program.rb
928 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/find_method.rb
929 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/fix_indent.rb
930 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/help.rb
931 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/hist.rb
932 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/import_set.rb
933 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/jump_to.rb
934 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/list_inspectors.rb
935 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/nesting.rb
936 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/play.rb
937 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/pry_backtrace.rb
938 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/pry_version.rb
939 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/raise_up.rb
940 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/reload_code.rb
941 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/reset.rb
942 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/ri.rb
943 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/save_file.rb
944 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/shell_command.rb
945 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/shell_mode.rb
946 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/show_info.rb
947 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/show_doc.rb
948 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/show_input.rb
949 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/show_source.rb
950 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/stat.rb
951 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/switch_to.rb
952 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/toggle_color.rb
953 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/watch_expression.rb
954 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/watch_expression/expression.rb
955 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/whereami.rb
956 /usr/share/gems/gems/pry-0.14.1/lib/pry/commands/wtf.rb
957 /usr/share/gems/gems/pry-0.14.1/lib/pry.rb
958 /builddir/build/BUILD/alexandria-book-collection-manager-0.7.9/spec/spec_helper.rb
959 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/instance_method_stasher.rb
960 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/method_double.rb
961 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/argument_matchers.rb
962 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/object_reference.rb
963 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/example_methods.rb
964 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/proxy.rb
965 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/test_double.rb
966 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/argument_list_matcher.rb
967 /usr/share/gems/gems/rspec-support-3.12.1/lib/rspec/support/mutex.rb
968 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/message_expectation.rb
969 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/order_group.rb
970 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/error_generator.rb
971 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/space.rb
972 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/mutate_const.rb
973 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/targets.rb
974 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/syntax.rb
975 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/configuration.rb
976 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/verifying_message_expectation.rb
977 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/method_reference.rb
978 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/verifying_proxy.rb
979 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/verifying_double.rb
980 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/version.rb
981 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks.rb
982 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/mocking_adapters/rspec.rb
983 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/example_status_persister.rb
984 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/base_formatter.rb
985 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/base_text_formatter.rb
986 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/formatters/progress_formatter.rb
987 /usr/share/gems/gems/rspec-core-3.12.2/lib/rspec/core/profiler.rb
988 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/be_instance_of.rb
989 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/be.rb
990 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/has.rb
991 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/eq.rb
992 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/raise_error.rb
993 /usr/share/gems/gems/syck-1.4.1/lib/syck/encoding.rb
994 /usr/lib64/ruby/enc/utf_16le.so
995 /usr/lib64/ruby/enc/utf_16be.so
996 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/expectations/failure_aggregator.rb
997 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/matchers/expectation_customization.rb
998 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/matchers/receive.rb
999 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/chain.rb
1000 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/error_generator.rb
1001 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/stub_chain.rb
1002 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/stub_chain_chain.rb
1003 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/expect_chain_chain.rb
1004 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/expectation_chain.rb
1005 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/message_chains.rb
1006 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/recorder.rb
1007 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance/proxy.rb
1008 /usr/share/gems/gems/rspec-mocks-3.12.6/lib/rspec/mocks/any_instance.rb
1009 /usr/share/gems/gems/rspec-expectations-3.12.3/lib/rspec/matchers/built_in/match.rb
* Process memory map:
55e2cf057000-55e2cf058000 r--p 00000000 08:08 7003309 /usr/bin/ruby-mri
55e2cf058000-55e2cf059000 r-xp 00001000 08:08 7003309 /usr/bin/ruby-mri
55e2cf059000-55e2cf05a000 r--p 00002000 08:08 7003309 /usr/bin/ruby-mri
55e2cf05a000-55e2cf05b000 r--p 00002000 08:08 7003309 /usr/bin/ruby-mri
55e2cf05b000-55e2cf05c000 rw-p 00003000 08:08 7003309 /usr/bin/ruby-mri
55e2cfbcf000-55e2d4095000 rw-p 00000000 00:00 0 [heap]
7f69fe200000-7f69fe451000 r--s 00000000 08:08 6979654 /usr/lib64/libc.so.6
7f69fe600000-7f6a00531000 r--s 00000000 08:08 7003543 /usr/lib/debug/usr/lib64/libruby.so.3.3.0-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64.debug
7f6a00600000-7f6a02531000 r--s 00000000 08:08 7003543 /usr/lib/debug/usr/lib64/libruby.so.3.3.0-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64.debug
7f6a02600000-7f6a02b8a000 r--s 00000000 08:08 6984462 /usr/lib64/libruby.so.3.3.0
7f6a02bf0000-7f6a02c80000 rw-p 00000000 00:00 0
7f6a02c8a000-7f6a02cb0000 r--s 00000000 08:08 7001502 /usr/share/mime/mime.cache
7f6a02cb0000-7f6a02dd0000 rw-p 00000000 00:00 0
7f6a02dd3000-7f6a02dd8000 r--s 00000000 08:08 7003308 /usr/lib/debug/usr/bin/ruby-mri-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64.debug
7f6a02dd8000-7f6a02df6000 r--p 00000000 08:08 6982263 /usr/lib64/libssl.so.3.1.4
7f6a02df6000-7f6a02e53000 r-xp 0001e000 08:08 6982263 /usr/lib64/libssl.so.3.1.4
7f6a02e53000-7f6a02e6d000 r--p 0007b000 08:08 6982263 /usr/lib64/libssl.so.3.1.4
7f6a02e6d000-7f6a02e77000 r--p 00094000 08:08 6982263 /usr/lib64/libssl.so.3.1.4
7f6a02e77000-7f6a02e7b000 rw-p 0009e000 08:08 6982263 /usr/lib64/libssl.so.3.1.4
7f6a02e7b000-7f6a02e90000 r--p 00000000 08:08 6984544 /usr/lib64/ruby/openssl.so
7f6a02e90000-7f6a02eca000 r-xp 00015000 08:08 6984544 /usr/lib64/ruby/openssl.so
7f6a02eca000-7f6a02edb000 r--p 0004f000 08:08 6984544 /usr/lib64/ruby/openssl.so
7f6a02edb000-7f6a02edf000 r--p 0005f000 08:08 6984544 /usr/lib64/ruby/openssl.so
7f6a02edf000-7f6a02ee0000 rw-p 00063000 08:08 6984544 /usr/lib64/ruby/openssl.so
7f6a02ee0000-7f6a02fb0000 rw-p 00000000 00:00 0
7f6a02fb4000-7f6a02fb7000 r--p 00000000 08:08 6989071 /usr/lib64/gems/ruby/bigdecimal-3.1.5/bigdecimal.so
7f6a02fb7000-7f6a02fcb000 r-xp 00003000 08:08 6989071 /usr/lib64/gems/ruby/bigdecimal-3.1.5/bigdecimal.so
7f6a02fcb000-7f6a02fce000 r--p 00017000 08:08 6989071 /usr/lib64/gems/ruby/bigdecimal-3.1.5/bigdecimal.so
7f6a02fce000-7f6a02fcf000 r--p 0001a000 08:08 6989071 /usr/lib64/gems/ruby/bigdecimal-3.1.5/bigdecimal.so
7f6a02fcf000-7f6a02fd0000 rw-p 0001b000 08:08 6989071 /usr/lib64/gems/ruby/bigdecimal-3.1.5/bigdecimal.so
7f6a02fd0000-7f6a036c0000 rw-p 00000000 00:00 0
7f6a036c1000-7f6a03702000 r--p 00000000 08:08 6986229 /usr/lib64/libGLdispatch.so.0.0.0
7f6a03702000-7f6a03741000 r-xp 00041000 08:08 6986229 /usr/lib64/libGLdispatch.so.0.0.0
7f6a03741000-7f6a03754000 r--p 00080000 08:08 6986229 /usr/lib64/libGLdispatch.so.0.0.0
7f6a03754000-7f6a03770000 r--p 00093000 08:08 6986229 /usr/lib64/libGLdispatch.so.0.0.0
7f6a03770000-7f6a03771000 rw-p 000af000 08:08 6986229 /usr/lib64/libGLdispatch.so.0.0.0
7f6a03771000-7f6a03779000 rw-p 00000000 00:00 0
7f6a03779000-7f6a037bc000 r--p 00000000 08:08 6993695 /usr/lib64/libGL.so.1.7.0
7f6a037bc000-7f6a037dc000 r-xp 00043000 08:08 6993695 /usr/lib64/libGL.so.1.7.0
7f6a037dc000-7f6a037f0000 r--p 00063000 08:08 6993695 /usr/lib64/libGL.so.1.7.0
7f6a037f0000-7f6a037fe000 r--p 00077000 08:08 6993695 /usr/lib64/libGL.so.1.7.0
7f6a037fe000-7f6a037ff000 rw-p 00085000 08:08 6993695 /usr/lib64/libGL.so.1.7.0
7f6a037ff000-7f6a03800000 rw-p 00000000 00:00 0
7f6a03800000-7f6a03887000 r--p 00000000 08:08 6999115 /usr/lib64/libgtk-3.so.0.2407.32
7f6a03887000-7f6a03c39000 r-xp 00087000 08:08 6999115 /usr/lib64/libgtk-3.so.0.2407.32
7f6a03c39000-7f6a03fb3000 r--p 00439000 08:08 6999115 /usr/lib64/libgtk-3.so.0.2407.32
7f6a03fb3000-7f6a03fc3000 r--p 007b3000 08:08 6999115 /usr/lib64/libgtk-3.so.0.2407.32
7f6a03fc3000-7f6a03fc5000 rw-p 007c3000 08:08 6999115 /usr/lib64/libgtk-3.so.0.2407.32
7f6a03fc5000-7f6a03fca000 rw-p 00000000 00:00 0
7f6a03fcd000-7f6a03fd0000 r--p 00000000 08:08 6993697 /usr/lib64/libGLX.so.0.0.0
7f6a03fd0000-7f6a03feb000 r-xp 00003000 08:08 6993697 /usr/lib64/libGLX.so.0.0.0
7f6a03feb000-7f6a03fee000 r--p 0001e000 08:08 6993697 /usr/lib64/libGLX.so.0.0.0
7f6a03fee000-7f6a03fef000 r--p 00020000 08:08 6993697 /usr/lib64/libGLX.so.0.0.0
7f6a03fef000-7f6a03ff0000 rw-p 00021000 08:08 6993697 /usr/lib64/libGLX.so.0.0.0
7f6a03ff0000-7f6a04021000 rw-p 00000000 00:00 0
7f6a04021000-7f6a08000000 ---p 00000000 00:00 0
7f6a08000000-7f6a08062000 rw-p 00000000 00:00 0
7f6a08062000-7f6a0c000000 ---p 00000000 00:00 0
7f6a0c000000-7f6a0c021000 rw-p 00000000 00:00 0
7f6a0c021000-7f6a10000000 ---p 00000000 00:00 0
7f6a10001000-7f6a10006000 r--s 00000000 08:08 7003308 /usr/lib/debug/usr/bin/ruby-mri-3.3.0~20231222.0241git68bcca4c2b-184.fc40.391.x86_64.debug
7f6a10006000-7f6a10007000 r--p 00000000 08:08 6984524 /usr/lib64/ruby/enc/utf_16be.so
7f6a10007000-7f6a10008000 r-xp 00001000 08:08 6984524 /usr/lib64/ruby/enc/utf_16be.so
7f6a10008000-7f6a10009000 r--p 00002000 08:08 6984524 /usr/lib64/ruby/enc/utf_16be.so
7f6a10009000-7f6a1000a000 r--p 00002000 08:08 6984524 /usr/lib64/ruby/enc/utf_16be.so
7f6a1000a000-7f6a1000b000 rw-p 00000000 00:00 0
7f6a1000b000-7f6a1000c000 r--p 00000000 08:08 6984525 /usr/lib64/ruby/enc/utf_16le.so
7f6a1000c000-7f6a1000d000 r-xp 00001000 08:08 6984525 /usr/lib64/ruby/enc/utf_16le.so
7f6a1000d000-7f6a1000e000 r--p 00002000 08:08 6984525 /usr/lib64/ruby/enc/utf_16le.so
7f6a1000e000-7f6a1000f000 r--p 00002000 08:08 6984525 /usr/lib64/ruby/enc/utf_16le.so
7f6a1000f000-7f6a10020000 rw-p 00000000 00:00 0
7f6a10020000-7f6a10024000 r--s 00000000 08:08 7003309 /usr/bin/ruby-mri
7f6a10024000-7f6a10026000 r--p 00000000 08:08 6984467 /usr/lib64/ruby/digest.so
7f6a10026000-7f6a10028000 r-xp 00002000 08:08 6984467 /usr/lib64/ruby/digest.so
7f6a10028000-7f6a10029000 r--p 00004000 08:08 6984467 /usr/lib64/ruby/digest.so
7f6a10029000-7f6a1002a000 r--p 00004000 08:08 6984467 /usr/lib64/ruby/digest.so
7f6a1002a000-7f6a1002b000 rw-p 00000000 00:00 0
7f6a1002b000-7f6a10030000 r--p 00000000 08:08 6979963 /usr/lib64/libzstd.so.1.5.5
7f6a10030000-7f6a100d8000 r-xp 00005000 08:08 6979963 /usr/lib64/libzstd.so.1.5.5
7f6a100d8000-7f6a100e5000 r--p 000ad000 08:08 6979963 /usr/lib64/libzstd.so.1.5.5
7f6a100e5000-7f6a100e6000 r--p 000b9000 08:08 6979963 /usr/lib64/libzstd.so.1.5.5
7f6a100e6000-7f6a100e7000 rw-p 00000000 00:00 0
7f6a100e7000-7f6a100ea000 r--p 00000000 08:08 6980086 /usr/lib64/liblz4.so.1.9.4
7f6a100ea000-7f6a10105000 r-xp 00003000 08:08 6980086 /usr/lib64/liblz4.so.1.9.4
7f6a10105000-7f6a10107000 r--p 0001e000 08:08 6980086 /usr/lib64/liblz4.so.1.9.4
7f6a10107000-7f6a10108000 r--p 0001f000 08:08 6980086 /usr/lib64/liblz4.so.1.9.4
7f6a10108000-7f6a10109000 rw-p 00000000 00:00 0
7f6a10109000-7f6a10120000 r--p 00000000 08:08 6980237 /usr/lib64/libsystemd.so.0.38.0
7f6a10120000-7f6a101ba000 r-xp 00017000 08:08 6980237 /usr/lib64/libsystemd.so.0.38.0
7f6a101ba000-7f6a101ee000 r--p 000b1000 08:08 6980237 /usr/lib64/libsystemd.so.0.38.0
7f6a101ee000-7f6a101fa000 r--p 000e4000 08:08 6980237 /usr/lib64/libsystemd.so.0.38.0
7f6a101fa000-7f6a101fb000 rw-p 000f0000 08:08 6980237 /usr/lib64/libsystemd.so.0.38.0
7f6a101fb000-7f6a101fc000 rw-p 00000000 00:00 0
7f6a101fc000-7f6a1020d000 r--p 00000000 08:08 6981561 /usr/lib64/libsqlite3.so.0.8.6
7f6a1020d000-7f6a10323000 r-xp 00011000 08:08 6981561 /usr/lib64/libsqlite3.so.0.8.6
7f6a10323000-7f6a10350000 r--p 00127000 08:08 6981561 /usr/lib64/libsqlite3.so.0.8.6
7f6a10350000-7f6a10354000 r--p 00154000 08:08 6981561 /usr/lib64/libsqlite3.so.0.8.6
7f6a10354000-7f6a10358000 rw-p 00158000 08:08 6981561 /usr/lib64/libsqlite3.so.0.8.6
7f6a10358000-7f6a10359000 rw-p 00000000 00:00 0
7f6a10359000-7f6a10362000 r--p 00000000 08:08 6985992 /usr/lib64/libjson-glib-1.0.so.0.800.0
7f6a10362000-7f6a1037a000 r-xp 00009000 08:08 6985992 /usr/lib64/libjson-glib-1.0.so.0.800.0
7f6a1037a000-7f6a10383000 r--p 00021000 08:08 6985992 /usr/lib64/libjson-glib-1.0.so.0.800.0
7f6a10383000-7f6a10384000 r--p 0002a000 08:08 6985992 /usr/lib64/libjson-glib-1.0.so.0.800.0
7f6a10384000-7f6a10385000 rw-p 00000000 00:00 0
7f6a10385000-7f6a10393000 r--p 00000000 08:08 6985167 /usr/lib64/libdbus-1.so.3.32.4
7f6a10393000-7f6a103c6000 r-xp 0000e000 08:08 6985167 /usr/lib64/libdbus-1.so.3.32.4
7f6a103c6000-7f6a103d7000 r--p 00041000 08:08 6985167 /usr/lib64/libdbus-1.so.3.32.4
7f6a103d7000-7f6a103d9000 r--p 00051000 08:08 6985167 /usr/lib64/libdbus-1.so.3.32.4
7f6a103d9000-7f6a103da000 rw-p 00053000 08:08 6985167 /usr/lib64/libdbus-1.so.3.32.4
7f6a103da000-7f6a103ea000 r--p 00000000 08:08 6997756 /usr/lib64/libatspi.so.0.0.1
7f6a103ea000-7f6a10403000 r-xp 00010000 08:08 6997756 /usr/lib64/libatspi.so.0.0.1
7f6a10403000-7f6a10410000 r--p 00029000 08:08 6997756 /usr/lib64/libatspi.so.0.0.1
7f6a10410000-7f6a10414000 r--p 00035000 08:08 6997756 /usr/lib64/libatspi.so.0.0.1
7f6a10414000-7f6a10415000 rw-p 00039000 08:08 6997756 /usr/lib64/libatspi.so.0.0.1
7f6a10415000-7f6a1042e000 r--p 00000000 08:08 6990988 /usr/lib64/libtracker-sparql-3.0.so.0.600.0
7f6a1042e000-7f6a104b2000 r-xp 00019000 08:08 6990988 /usr/lib64/libtracker-sparql-3.0.so.0.600.0
7f6a104b2000-7f6a104e4000 r--p 0009d000 08:08 6990988 /usr/lib64/libtracker-sparql-3.0.so.0.600.0
7f6a104e4000-7f6a104f2000 r--p 000ce000 08:08 6990988 /usr/lib64/libtracker-sparql-3.0.so.0.600.0
7f6a104f2000-7f6a104f3000 rw-p 000dc000 08:08 6990988 /usr/lib64/libtracker-sparql-3.0.so.0.600.0
7f6a104f3000-7f6a104fa000 r--p 00000000 08:08 6986293 /usr/lib64/libcloudproviders.so.0.3.5
7f6a104fa000-7f6a10506000 r-xp 00007000 08:08 6986293 /usr/lib64/libcloudproviders.so.0.3.5
7f6a10506000-7f6a1050b000 r--p 00013000 08:08 6986293 /usr/lib64/libcloudproviders.so.0.3.5
7f6a1050b000-7f6a1050c000 r--p 00018000 08:08 6986293 /usr/lib64/libcloudproviders.so.0.3.5
7f6a1050c000-7f6a1050d000 rw-p 00019000 08:08 6986293 /usr/lib64/libcloudproviders.so.0.3.5
7f6a1050d000-7f6a10519000 r--p 00000000 08:08 6997887 /usr/lib64/libatk-bridge-2.0.so.0.0.0
7f6a10519000-7f6a10533000 r-xp 0000c000 08:08 6997887 /usr/lib64/libatk-bridge-2.0.so.0.0.0
7f6a10533000-7f6a10546000 r--p 00026000 08:08 6997887 /usr/lib64/libatk-bridge-2.0.so.0.0.0
7f6a10546000-7f6a10548000 r--p 00038000 08:08 6997887 /usr/lib64/libatk-bridge-2.0.so.0.0.0
7f6a10548000-7f6a1054a000 rw-p 0003a000 08:08 6997887 /usr/lib64/libatk-bridge-2.0.so.0.0.0
7f6a1054a000-7f6a105f0000 r--p 00000000 08:08 6999100 /usr/lib64/girepository-1.0/Gtk-3.0.typelib
7f6a105f0000-7f6a10690000 rw-p 00000000 00:00 0
7f6a10691000-7f6a106f1000 r--p 00000000 08:08 6991062 /usr/lib64/libepoxy.so.0.0.0
7f6a106f1000-7f6a10757000 r-xp 00060000 08:08 6991062 /usr/lib64/libepoxy.so.0.0.0
7f6a10757000-7f6a107a5000 r--p 000c6000 08:08 6991062 /usr/lib64/libepoxy.so.0.0.0
7f6a107a5000-7f6a107ad000 r--p 00113000 08:08 6991062 /usr/lib64/libepoxy.so.0.0.0
7f6a107ad000-7f6a107b4000 rw-p 0011b000 08:08 6991062 /usr/lib64/libepoxy.so.0.0.0
7f6a107b4000-7f6a107de000 r--p 00000000 08:08 6999113 /usr/lib64/libgdk-3.so.0.2407.32
7f6a107de000-7f6a10862000 r-xp 0002a000 08:08 6999113 /usr/lib64/libgdk-3.so.0.2407.32
7f6a10862000-7f6a108a4000 r--p 000ae000 08:08 6999113 /usr/lib64/libgdk-3.so.0.2407.32
7f6a108a4000-7f6a108ad000 r--p 000ef000 08:08 6999113 /usr/lib64/libgdk-3.so.0.2407.32
7f6a108ad000-7f6a108af000 rw-p 000f8000 08:08 6999113 /usr/lib64/libgdk-3.so.0.2407.32
7f6a108af000-7f6a108b0000 ---p 00000000 00:00 0
7f6a108b0000-7f6a110d0000 rw-p 00000000 00:00 0
7f6a110d1000-7f6a110d2000 r--p 00000000 08:08 6984539 /usr/lib64/ruby/io/nonblock.so
7f6a110d2000-7f6a110d3000 r-xp 00001000 08:08 6984539 /usr/lib64/ruby/io/nonblock.so
7f6a110d3000-7f6a110d4000 r--p 00002000 08:08 6984539 /usr/lib64/ruby/io/nonblock.so
7f6a110d4000-7f6a110d5000 r--p 00002000 08:08 6984539 /usr/lib64/ruby/io/nonblock.so
7f6a110d5000-7f6a110d6000 rw-p 00000000 00:00 0
7f6a110d6000-7f6a110d9000 r--p 00000000 08:08 6999285 /usr/lib64/gems/ruby/gtk3-4.2.0/gtk3.so
7f6a110d9000-7f6a110dd000 r-xp 00003000 08:08 6999285 /usr/lib64/gems/ruby/gtk3-4.2.0/gtk3.so
7f6a110dd000-7f6a110de000 r--p 00007000 08:08 6999285 /usr/lib64/gems/ruby/gtk3-4.2.0/gtk3.so
7f6a110de000-7f6a110df000 r--p 00008000 08:08 6999285 /usr/lib64/gems/ruby/gtk3-4.2.0/gtk3.so
7f6a110df000-7f6a11100000 rw-p 00000000 00:00 0
7f6a11100000-7f6a11103000 r--p 00000000 08:08 6980210 /usr/lib64/libcap.so.2.69
7f6a11103000-7f6a11109000 r-xp 00003000 08:08 6980210 /usr/lib64/libcap.so.2.69
7f6a11109000-7f6a1110b000 r--p 00009000 08:08 6980210 /usr/lib64/libcap.so.2.69
7f6a1110b000-7f6a1110c000 r--p 0000a000 08:08 6980210 /usr/lib64/libcap.so.2.69
7f6a1110c000-7f6a1110d000 rw-p 0000b000 08:08 6980210 /usr/lib64/libcap.so.2.69
7f6a1110d000-7f6a1110e000 r--p 00000000 08:08 6993491 /usr/lib64/libXinerama.so.1.0.0
7f6a1110e000-7f6a1110f000 r-xp 00001000 08:08 6993491 /usr/lib64/libXinerama.so.1.0.0
7f6a1110f000-7f6a11110000 r--p 00002000 08:08 6993491 /usr/lib64/libXinerama.so.1.0.0
7f6a11110000-7f6a11111000 r--p 00002000 08:08 6993491 /usr/lib64/libXinerama.so.1.0.0
7f6a11111000-7f6a11112000 rw-p 00003000 08:08 6993491 /usr/lib64/libXinerama.so.1.0.0
7f6a11112000-7f6a11114000 r--p 00000000 08:08 6993485 /usr/lib64/libXrandr.so.2.2.0
7f6a11114000-7f6a1111b000 r-xp 00002000 08:08 6993485 /usr/lib64/libXrandr.so.2.2.0
7f6a1111b000-7f6a1111d000 r--p 00009000 08:08 6993485 /usr/lib64/libXrandr.so.2.2.0
7f6a1111d000-7f6a1111e000 r--p 0000a000 08:08 6993485 /usr/lib64/libXrandr.so.2.2.0
7f6a1111e000-7f6a1111f000 rw-p 0000b000 08:08 6993485 /usr/lib64/libXrandr.so.2.2.0
7f6a1111f000-7f6a11120000 r--p 00000000 08:08 6993508 /usr/lib64/libXcomposite.so.1.0.0
7f6a11120000-7f6a11121000 r-xp 00001000 08:08 6993508 /usr/lib64/libXcomposite.so.1.0.0
7f6a11121000-7f6a11122000 r--p 00002000 08:08 6993508 /usr/lib64/libXcomposite.so.1.0.0
7f6a11122000-7f6a11123000 r--p 00002000 08:08 6993508 /usr/lib64/libXcomposite.so.1.0.0
7f6a11123000-7f6a11124000 rw-p 00000000 00:00 0
7f6a11124000-7f6a11126000 r--p 00000000 08:08 6993445 /usr/lib64/libXfixes.so.3.1.0
7f6a11126000-7f6a11129000 r-xp 00002000 08:08 6993445 /usr/lib64/libXfixes.so.3.1.0
7f6a11129000-7f6a1112a000 r--p 00005000 08:08 6993445 /usr/lib64/libXfixes.so.3.1.0
7f6a1112a000-7f6a1112b000 r--p 00005000 08:08 6993445 /usr/lib64/libXfixes.so.3.1.0
7f6a1112b000-7f6a1112c000 rw-p 00006000 08:08 6993445 /usr/lib64/libXfixes.so.3.1.0
7f6a1112c000-7f6a1112d000 r--p 00000000 08:08 6993463 /usr/lib64/libXdamage.so.1.1.0
7f6a1112d000-7f6a1112e000 r-xp 00001000 08:08 6993463 /usr/lib64/libXdamage.so.1.1.0
7f6a1112e000-7f6a1112f000 r--p 00002000 08:08 6993463 /usr/lib64/libXdamage.so.1.1.0
7f6a1112f000-7f6a11130000 r--p 00002000 08:08 6993463 /usr/lib64/libXdamage.so.1.1.0
7f6a11130000-7f6a11131000 rw-p 00000000 00:00 0
7f6a11131000-7f6a11134000 r--p 00000000 08:08 6993476 /usr/lib64/libXcursor.so.1.0.2
7f6a11134000-7f6a1113a000 r-xp 00003000 08:08 6993476 /usr/lib64/libXcursor.so.1.0.2
7f6a1113a000-7f6a1113c000 r--p 00009000 08:08 6993476 /usr/lib64/libXcursor.so.1.0.2
7f6a1113c000-7f6a1113d000 r--p 0000a000 08:08 6993476 /usr/lib64/libXcursor.so.1.0.2
7f6a1113d000-7f6a1113e000 rw-p 00000000 00:00 0
7f6a1113e000-7f6a11141000 r--p 00000000 08:08 6993458 /usr/lib64/libXi.so.6.1.0
7f6a11141000-7f6a1114d000 r-xp 00003000 08:08 6993458 /usr/lib64/libXi.so.6.1.0
7f6a1114d000-7f6a1114f000 r--p 0000f000 08:08 6993458 /usr/lib64/libXi.so.6.1.0
7f6a1114f000-7f6a11150000 r--p 00011000 08:08 6993458 /usr/lib64/libXi.so.6.1.0
7f6a11150000-7f6a11151000 rw-p 00012000 08:08 6993458 /usr/lib64/libXi.so.6.1.0
7f6a11151000-7f6a11157000 r--p 00000000 08:08 6985187 /usr/lib64/libwayland-client.so.0.22.0
7f6a11157000-7f6a1115d000 r-xp 00006000 08:08 6985187 /usr/lib64/libwayland-client.so.0.22.0
7f6a1115d000-7f6a1115f000 r--p 0000c000 08:08 6985187 /usr/lib64/libwayland-client.so.0.22.0
7f6a1115f000-7f6a11161000 r--p 0000e000 08:08 6985187 /usr/lib64/libwayland-client.so.0.22.0
7f6a11161000-7f6a11162000 rw-p 00010000 08:08 6985187 /usr/lib64/libwayland-client.so.0.22.0
7f6a11162000-7f6a11167000 r--p 00000000 08:08 6986483 /usr/lib64/libxkbcommon.so.0.0.0
7f6a11167000-7f6a11187000 r-xp 00005000 08:08 6986483 /usr/lib64/libxkbcommon.so.0.0.0
7f6a11187000-7f6a111a8000 r--p 00025000 08:08 6986483 /usr/lib64/libxkbcommon.so.0.0.0
7f6a111a8000-7f6a111aa000 r--p 00045000 08:08 6986483 /usr/lib64/libxkbcommon.so.0.0.0
7f6a111aa000-7f6a111ab000 rw-p 00000000 00:00 0
7f6a111ab000-7f6a111e5000 r--p 00000000 08:08 6999098 /usr/lib64/girepository-1.0/Gdk-3.0.typelib
7f6a111e5000-7f6a111ec000 r--p 00000000 08:08 6997316 /usr/lib64/libpangoft2-1.0.so.0.5100.0
7f6a111ec000-7f6a111f9000 r-xp 00007000 08:08 6997316 /usr/lib64/libpangoft2-1.0.so.0.5100.0
7f6a111f9000-7f6a111fd000 r--p 00014000 08:08 6997316 /usr/lib64/libpangoft2-1.0.so.0.5100.0
7f6a111fd000-7f6a111fe000 r--p 00018000 08:08 6997316 /usr/lib64/libpangoft2-1.0.so.0.5100.0
7f6a111fe000-7f6a111ff000 rw-p 00000000 00:00 0
7f6a111ff000-7f6a11204000 r--p 00000000 08:08 6997314 /usr/lib64/libpangocairo-1.0.so.0.5100.0
7f6a11204000-7f6a1120c000 r-xp 00005000 08:08 6997314 /usr/lib64/libpangocairo-1.0.so.0.5100.0
7f6a1120c000-7f6a1120e000 r--p 0000d000 08:08 6997314 /usr/lib64/libpangocairo-1.0.so.0.5100.0
7f6a1120e000-7f6a1120f000 r--p 0000f000 08:08 6997314 /usr/lib64/libpangocairo-1.0.so.0.5100.0
7f6a1120f000-7f6a11210000 rw-p 00010000 08:08 6997314 /usr/lib64/libpangocairo-1.0.so.0.5100.0
7f6a11210000-7f6a11310000 rw-p 00000000 00:00 0
7f6a11311000-7f6a11313000 r--p 00000000 08:08 6985315 /usr/lib64/libwayland-cursor.so.0.22.0
7f6a11313000-7f6a11315000 r-xp 00002000 08:08 6985315 /usr/lib64/libwayland-cursor.so.0.22.0
7f6a11315000-7f6a11316000 r--p 00004000 08:08 6985315 /usr/lib64/libwayland-cursor.so.0.22.0
7f6a11316000-7f6a11317000 r--p 00004000 08:08 6985315 /usr/lib64/libwayland-cursor.so.0.22.0
7f6a11317000-7f6a1131b000 rw-p 00005000 08:08 6985315 /usr/lib64/libwayland-cursor.so.0.22.0
7f6a1131b000-7f6a1131d000 r--p 00000000 08:08 6991069 /usr/lib64/libdatrie.so.1.4.0
7f6a1131d000-7f6a11321000 r-xp 00002000 08:08 6991069 /usr/lib64/libdatrie.so.1.4.0
7f6a11321000-7f6a11322000 r--p 00006000 08:08 6991069 /usr/lib64/libdatrie.so.1.4.0
7f6a11322000-7f6a11323000 r--p 00006000 08:08 6991069 /usr/lib64/libdatrie.so.1.4.0
7f6a11323000-7f6a11324000 rw-p 00000000 00:00 0
7f6a11324000-7f6a11326000 r--p 00000000 08:08 6991074 /usr/lib64/libthai.so.0.3.1
7f6a11326000-7f6a1132a000 r-xp 00002000 08:08 6991074 /usr/lib64/libthai.so.0.3.1
7f6a1132a000-7f6a1132d000 r--p 00006000 08:08 6991074 /usr/lib64/libthai.so.0.3.1
7f6a1132d000-7f6a1132e000 r--p 00008000 08:08 6991074 /usr/lib64/libthai.so.0.3.1
7f6a1132e000-7f6a1132f000 rw-p 00009000 08:08 6991074 /usr/lib64/libthai.so.0.3.1
7f6a1132f000-7f6a11331000 r--p 00000000 08:08 6986252 /usr/lib64/libfribidi.so.0.4.0
7f6a11331000-7f6a11336000 r-xp 00002000 08:08 6986252 /usr/lib64/libfribidi.so.0.4.0
7f6a11336000-7f6a1134c000 r--p 00007000 08:08 6986252 /usr/lib64/libfribidi.so.0.4.0
7f6a1134c000-7f6a1134d000 r--p 0001d000 08:08 6986252 /usr/lib64/libfribidi.so.0.4.0
7f6a1134d000-7f6a1134e000 rw-p 0001e000 08:08 6986252 /usr/lib64/libfribidi.so.0.4.0
7f6a1134e000-7f6a11360000 r--p 00000000 08:08 6997312 /usr/lib64/libpango-1.0.so.0.5100.0
7f6a11360000-7f6a11399000 r-xp 00012000 08:08 6997312 /usr/lib64/libpango-1.0.so.0.5100.0
7f6a11399000-7f6a113b3000 r--p 0004b000 08:08 6997312 /usr/lib64/libpango-1.0.so.0.5100.0
7f6a113b3000-7f6a113b7000 r--p 00064000 08:08 6997312 /usr/lib64/libpango-1.0.so.0.5100.0
7f6a113b7000-7f6a113b8000 rw-p 00068000 08:08 6997312 /usr/lib64/libpango-1.0.so.0.5100.0
7f6a113b8000-7f6a113dd000 r--p 00000000 08:08 6997144 /usr/lib64/girepository-1.0/HarfBuzz-0.0.typelib
7f6a113dd000-7f6a113f0000 r--p 00000000 08:08 6997305 /usr/lib64/girepository-1.0/Pango-1.0.typelib
7f6a113f0000-7f6a11400000 rw-p 00000000 00:00 0
7f6a11400000-7f6a11401000 r--p 00000000 08:08 6986187 /usr/lib64/libwayland-egl.so.1.22.0
7f6a11401000-7f6a11402000 r-xp 00001000 08:08 6986187 /usr/lib64/libwayland-egl.so.1.22.0
7f6a11402000-7f6a11403000 r--p 00002000 08:08 6986187 /usr/lib64/libwayland-egl.so.1.22.0
7f6a11403000-7f6a11404000 r--p 00002000 08:08 6986187 /usr/lib64/libwayland-egl.so.1.22.0
7f6a11404000-7f6a11405000 rw-p 00000000 00:00 0
7f6a11405000-7f6a11409000 r--p 00000000 08:08 6997286 /usr/lib64/libcairo-gobject.so.2.11800.0
7f6a11409000-7f6a1140b000 r-xp 00004000 08:08 6997286 /usr/lib64/libcairo-gobject.so.2.11800.0
7f6a1140b000-7f6a1140d000 r--p 00006000 08:08 6997286 /usr/lib64/libcairo-gobject.so.2.11800.0
7f6a1140d000-7f6a1140f000 r--p 00008000 08:08 6997286 /usr/lib64/libcairo-gobject.so.2.11800.0
7f6a1140f000-7f6a11550000 rw-p 00000000 00:00 0
7f6a11552000-7f6a11553000 r--p 00000000 08:08 6981694 /usr/lib64/libbrotlicommon.so.1.1.0
7f6a11553000-7f6a11554000 r-xp 00001000 08:08 6981694 /usr/lib64/libbrotlicommon.so.1.1.0
7f6a11554000-7f6a11573000 r--p 00002000 08:08 6981694 /usr/lib64/libbrotlicommon.so.1.1.0
7f6a11573000-7f6a11574000 r--p 00021000 08:08 6981694 /usr/lib64/libbrotlicommon.so.1.1.0
7f6a11574000-7f6a11575000 rw-p 00000000 00:00 0
7f6a11575000-7f6a11578000 r--p 00000000 08:08 6997073 /usr/lib64/libgraphite2.so.3.2.1
7f6a11578000-7f6a11590000 r-xp 00003000 08:08 6997073 /usr/lib64/libgraphite2.so.3.2.1
7f6a11590000-7f6a11593000 r--p 0001b000 08:08 6997073 /usr/lib64/libgraphite2.so.3.2.1
7f6a11593000-7f6a11595000 r--p 0001d000 08:08 6997073 /usr/lib64/libgraphite2.so.3.2.1
7f6a11595000-7f6a11596000 rw-p 00000000 00:00 0
7f6a11596000-7f6a115a2000 r--p 00000000 08:08 6997152 /usr/lib64/libharfbuzz.so.0.60830.0
7f6a115a2000-7f6a11671000 r-xp 0000c000 08:08 6997152 /usr/lib64/libharfbuzz.so.0.60830.0
7f6a11671000-7f6a116a3000 r--p 000db000 08:08 6997152 /usr/lib64/libharfbuzz.so.0.60830.0
7f6a116a3000-7f6a116a4000 r--p 0010d000 08:08 6997152 /usr/lib64/libharfbuzz.so.0.60830.0
7f6a116a4000-7f6a116a5000 rw-p 0010e000 08:08 6997152 /usr/lib64/libharfbuzz.so.0.60830.0
7f6a116a5000-7f6a116a7000 r--p 00000000 08:08 6979917 /usr/lib64/libbz2.so.1.0.8
7f6a116a7000-7f6a116b5000 r-xp 00002000 08:08 6979917 /usr/lib64/libbz2.so.1.0.8
7f6a116b5000-7f6a116b7000 r--p 00010000 08:08 6979917 /usr/lib64/libbz2.so.1.0.8
7f6a116b7000-7f6a116b8000 r--p 00011000 08:08 6979917 /usr/lib64/libbz2.so.1.0.8
7f6a116b8000-7f6a116b9000 rw-p 00012000 08:08 6979917 /usr/lib64/libbz2.so.1.0.8
7f6a116b9000-7f6a116c4000 r--p 00000000 08:08 6985205 /usr/lib64/libpixman-1.so.0.42.2
7f6a116c4000-7f6a11751000 r-xp 0000b000 08:08 6985205 /usr/lib64/libpixman-1.so.0.42.2
7f6a11751000-7f6a11760000 r--p 00098000 08:08 6985205 /usr/lib64/libpixman-1.so.0.42.2
7f6a11760000-7f6a11768000 r--p 000a6000 08:08 6985205 /usr/lib64/libpixman-1.so.0.42.2
7f6a11768000-7f6a11769000 rw-p 000ae000 08:08 6985205 /usr/lib64/libpixman-1.so.0.42.2
7f6a11769000-7f6a1176e000 r--p 00000000 08:08 6985264 /usr/lib64/libxcb-render.so.0.0.0
7f6a1176e000-7f6a11773000 r-xp 00005000 08:08 6985264 /usr/lib64/libxcb-render.so.0.0.0
7f6a11773000-7f6a11776000 r--p 0000a000 08:08 6985264 /usr/lib64/libxcb-render.so.0.0.0
7f6a11776000-7f6a11777000 r--p 0000c000 08:08 6985264 /usr/lib64/libxcb-render.so.0.0.0
7f6a11777000-7f6a11778000 rw-p 0000d000 08:08 6985264 /usr/lib64/libxcb-render.so.0.0.0
7f6a11778000-7f6a11784000 r--p 00000000 08:08 6985294 /usr/lib64/libxcb.so.1.1.0
7f6a11784000-7f6a11798000 r-xp 0000c000 08:08 6985294 /usr/lib64/libxcb.so.1.1.0
7f6a11798000-7f6a117a1000 r--p 00020000 08:08 6985294 /usr/lib64/libxcb.so.1.1.0
7f6a117a1000-7f6a117a2000 r--p 00028000 08:08 6985294 /usr/lib64/libxcb.so.1.1.0
7f6a117a2000-7f6a117a3000 rw-p 00029000 08:08 6985294 /usr/lib64/libxcb.so.1.1.0
7f6a117a3000-7f6a117a7000 r--p 00000000 08:08 6993439 /usr/lib64/libXext.so.6.4.0
7f6a117a7000-7f6a117b2000 r-xp 00004000 08:08 6993439 /usr/lib64/libXext.so.6.4.0
7f6a117b2000-7f6a117b5000 r--p 0000f000 08:08 6993439 /usr/lib64/libXext.so.6.4.0
7f6a117b5000-7f6a117b6000 r--p 00011000 08:08 6993439 /usr/lib64/libXext.so.6.4.0
7f6a117b6000-7f6a117b7000 rw-p 00012000 08:08 6993439 /usr/lib64/libXext.so.6.4.0
7f6a117b7000-7f6a117d3000 r--p 00000000 08:08 6993436 /usr/lib64/libX11.so.6.4.0
7f6a117d3000-7f6a11868000 r-xp 0001c000 08:08 6993436 /usr/lib64/libX11.so.6.4.0
7f6a11868000-7f6a118f7000 r--p 000b1000 08:08 6993436 /usr/lib64/libX11.so.6.4.0
7f6a118f7000-7f6a118fa000 r--p 0013f000 08:08 6993436 /usr/lib64/libX11.so.6.4.0
7f6a118fa000-7f6a118fe000 rw-p 00142000 08:08 6993436 /usr/lib64/libX11.so.6.4.0
7f6a118fe000-7f6a11905000 r--p 00000000 08:08 6997215 /usr/lib64/libfontconfig.so.1.12.0
7f6a11905000-7f6a11934000 r-xp 00007000 08:08 6997215 /usr/lib64/libfontconfig.so.1.12.0
7f6a11934000-7f6a1194a000 r--p 00036000 08:08 6997215 /usr/lib64/libfontconfig.so.1.12.0
7f6a1194a000-7f6a1194c000 r--p 0004b000 08:08 6997215 /usr/lib64/libfontconfig.so.1.12.0
7f6a1194c000-7f6a1194d000 rw-p 0004d000 08:08 6997215 /usr/lib64/libfontconfig.so.1.12.0
7f6a1194d000-7f6a1195b000 r--p 00000000 08:08 6997161 /usr/lib64/libfreetype.so.6.20.0
7f6a1195b000-7f6a119ed000 r-xp 0000e000 08:08 6997161 /usr/lib64/libfreetype.so.6.20.0
7f6a119ed000-7f6a11a14000 r--p 000a0000 08:08 6997161 /usr/lib64/libfreetype.so.6.20.0
7f6a11a14000-7f6a11a1c000 r--p 000c6000 08:08 6997161 /usr/lib64/libfreetype.so.6.20.0
7f6a11a1c000-7f6a11a1d000 rw-p 00000000 00:00 0
7f6a11a1d000-7f6a11a30000 r--p 00000000 08:08 6997130 /usr/lib64/libcairo.so.2.11800.0
7f6a11a30000-7f6a11b1d000 r-xp 00013000 08:08 6997130 /usr/lib64/libcairo.so.2.11800.0
7f6a11b1d000-7f6a11b4d000 r--p 00100000 08:08 6997130 /usr/lib64/libcairo.so.2.11800.0
7f6a11b4d000-7f6a11b51000 r--p 00130000 08:08 6997130 /usr/lib64/libcairo.so.2.11800.0
7f6a11b51000-7f6a11b53000 rw-p 00134000 08:08 6997130 /usr/lib64/libcairo.so.2.11800.0
7f6a11b53000-7f6a11b54000 rw-p 00000000 00:00 0
7f6a11b54000-7f6a11b63000 r--p 00000000 08:08 6997336 /usr/lib64/gems/ruby/cairo-1.17.13/cairo.so
7f6a11b63000-7f6a11b81000 r-xp 0000f000 08:08 6997336 /usr/lib64/gems/ruby/cairo-1.17.13/cairo.so
7f6a11b81000-7f6a11b8c000 r--p 0002d000 08:08 6997336 /usr/lib64/gems/ruby/cairo-1.17.13/cairo.so
7f6a11b8c000-7f6a11b8f000 r--p 00037000 08:08 6997336 /usr/lib64/gems/ruby/cairo-1.17.13/cairo.so
7f6a11b8f000-7f6a11b90000 rw-p 0003a000 08:08 6997336 /usr/lib64/gems/ruby/cairo-1.17.13/cairo.so
7f6a11b90000-7f6a12650000 rw-p 00000000 00:00 0
7f6a12653000-7f6a1265e000 r--p 00000000 08:08 6997875 /usr/lib64/libatk-1.0.so.0.25009.1
7f6a1265e000-7f6a1266e000 r-xp 0000b000 08:08 6997875 /usr/lib64/libatk-1.0.so.0.25009.1
7f6a1266e000-7f6a12679000 r--p 0001b000 08:08 6997875 /usr/lib64/libatk-1.0.so.0.25009.1
7f6a12679000-7f6a1267c000 r--p 00025000 08:08 6997875 /usr/lib64/libatk-1.0.so.0.25009.1
7f6a1267c000-7f6a1267d000 rw-p 00028000 08:08 6997875 /usr/lib64/libatk-1.0.so.0.25009.1
7f6a1267d000-7f6a12690000 r--p 00000000 08:08 6997873 /usr/lib64/girepository-1.0/Atk-1.0.typelib
7f6a12690000-7f6a126b0000 rw-p 00000000 00:00 0
7f6a126b0000-7f6a126b1000 r--p 00000000 08:08 6979639 /usr/lib/locale/C.utf8/LC_NUMERIC
7f6a126b1000-7f6a126b2000 r--p 00000000 08:08 6979642 /usr/lib/locale/C.utf8/LC_TIME
7f6a126b2000-7f6a126b3000 r--p 00000000 08:08 6979631 /usr/lib/locale/C.utf8/LC_COLLATE
7f6a126b3000-7f6a126b4000 r--p 00000000 08:08 6979637 /usr/lib/locale/C.utf8/LC_MONETARY
7f6a126b4000-7f6a126b5000 r--p 00000000 08:08 6979640 /usr/lib/locale/C.utf8/LC_PAPER
7f6a126b5000-7f6a126b6000 r--p 00000000 08:08 6979638 /usr/lib/locale/C.utf8/LC_NAME
7f6a126b6000-7f6a126ba000 r--p 00000000 08:08 6985178 /usr/lib64/libjpeg.so.62.3.0
7f6a126ba000-7f6a12707000 r-xp 00004000 08:08 6985178 /usr/lib64/libjpeg.so.62.3.0
7f6a12707000-7f6a12737000 r--p 00051000 08:08 6985178 /usr/lib64/libjpeg.so.62.3.0
7f6a12737000-7f6a12738000 r--p 00081000 08:08 6985178 /usr/lib64/libjpeg.so.62.3.0
7f6a12738000-7f6a12739000 rw-p 00082000 08:08 6985178 /usr/lib64/libjpeg.so.62.3.0
7f6a12739000-7f6a1273e000 r--p 00000000 08:08 6985172 /usr/lib64/libpng16.so.16.40.0
7f6a1273e000-7f6a12767000 r-xp 00005000 08:08 6985172 /usr/lib64/libpng16.so.16.40.0
7f6a12767000-7f6a12770000 r--p 0002e000 08:08 6985172 /usr/lib64/libpng16.so.16.40.0
7f6a12770000-7f6a12771000 r--p 00037000 08:08 6985172 /usr/lib64/libpng16.so.16.40.0
7f6a12771000-7f6a12772000 rw-p 00000000 00:00 0
7f6a12772000-7f6a1277a000 r--p 00000000 08:08 6986349 /usr/lib64/libgdk_pixbuf-2.0.so.0.4200.10
7f6a1277a000-7f6a12795000 r-xp 00008000 08:08 6986349 /usr/lib64/libgdk_pixbuf-2.0.so.0.4200.10
7f6a12795000-7f6a1279e000 r--p 00023000 08:08 6986349 /usr/lib64/libgdk_pixbuf-2.0.so.0.4200.10
7f6a1279e000-7f6a1279f000 r--p 0002c000 08:08 6986349 /usr/lib64/libgdk_pixbuf-2.0.so.0.4200.10
7f6a1279f000-7f6a127a0000 rw-p 0002d000 08:08 6986349 /usr/lib64/libgdk_pixbuf-2.0.so.0.4200.10
7f6a127a0000-7f6a12930000 rw-p 00000000 00:00 0
7f6a12930000-7f6a12931000 r--p 00000000 08:08 6981696 /usr/lib64/libbrotlidec.so.1.1.0
7f6a12931000-7f6a12939000 r-xp 00001000 08:08 6981696 /usr/lib64/libbrotlidec.so.1.1.0
7f6a12939000-7f6a1293c000 r--p 00009000 08:08 6981696 /usr/lib64/libbrotlidec.so.1.1.0
7f6a1293c000-7f6a1293d000 r--p 0000b000 08:08 6981696 /usr/lib64/libbrotlidec.so.1.1.0
7f6a1293d000-7f6a1293e000 rw-p 00000000 00:00 0
7f6a1293e000-7f6a1293f000 ---p 00000000 00:00 0
7f6a1293f000-7f6a1313f000 rw-p 00000000 00:00 0
7f6a1313f000-7f6a13140000 ---p 00000000 00:00 0
7f6a13140000-7f6a13b90000 rw-p 00000000 00:00 0
7f6a13b90000-7f6a13b91000 r--p 00000000 08:08 6979630 /usr/lib/locale/C.utf8/LC_ADDRESS
7f6a13b91000-7f6a13b92000 r--p 00000000 08:08 6979641 /usr/lib/locale/C.utf8/LC_TELEPHONE
7f6a13b92000-7f6a13bc6000 r--p 00000000 08:08 6985966 /usr/lib64/girepository-1.0/GLib-2.0.typelib
7f6a13bc6000-7f6a13c20000 r--p 00000000 08:08 6985969 /usr/lib64/girepository-1.0/Gio-2.0.typelib
7f6a13c20000-7f6a13c70000 rw-p 00000000 00:00 0
7f6a13c70000-7f6a13c71000 r--p 00000000 08:08 6979634 /usr/lib/locale/C.utf8/LC_MEASUREMENT
7f6a13c71000-7f6a13c76000 r--s 00000000 08:08 6997283 /usr/lib/fontconfig/cache/d63f98f14a274bd69a5425fc33aaac6b-le64.cache-8
7f6a13c76000-7f6a13c7e000 r--p 00000000 08:08 6980026 /usr/lib64/libblkid.so.1.1.0
7f6a13c7e000-7f6a13ca2000 r-xp 00008000 08:08 6980026 /usr/lib64/libblkid.so.1.1.0
7f6a13ca2000-7f6a13cab000 r--p 0002c000 08:08 6980026 /usr/lib64/libblkid.so.1.1.0
7f6a13cab000-7f6a13cb1000 r--p 00034000 08:08 6980026 /usr/lib64/libblkid.so.1.1.0
7f6a13cb1000-7f6a13cb2000 rw-p 0003a000 08:08 6980026 /usr/lib64/libblkid.so.1.1.0
7f6a13cb2000-7f6a13cb9000 r--p 00000000 08:08 6980334 /usr/lib64/libselinux.so.1
7f6a13cb9000-7f6a13cd5000 r-xp 00007000 08:08 6980334 /usr/lib64/libselinux.so.1
7f6a13cd5000-7f6a13cdc000 r--p 00023000 08:08 6980334 /usr/lib64/libselinux.so.1
7f6a13cdc000-7f6a13cdd000 r--p 00029000 08:08 6980334 /usr/lib64/libselinux.so.1
7f6a13cdd000-7f6a13cde000 rw-p 0002a000 08:08 6980334 /usr/lib64/libselinux.so.1
7f6a13cde000-7f6a13ce0000 rw-p 00000000 00:00 0
7f6a13ce0000-7f6a13d1a000 r--p 00000000 08:08 6985833 /usr/lib64/libgio-2.0.so.0.7800.3
7f6a13d1a000-7f6a13e34000 r-xp 0003a000 08:08 6985833 /usr/lib64/libgio-2.0.so.0.7800.3
7f6a13e34000-7f6a13eab000 r--p 00154000 08:08 6985833 /usr/lib64/libgio-2.0.so.0.7800.3
7f6a13eab000-7f6a13eb3000 r--p 001ca000 08:08 6985833 /usr/lib64/libgio-2.0.so.0.7800.3
7f6a13eb3000-7f6a13eb4000 rw-p 001d2000 08:08 6985833 /usr/lib64/libgio-2.0.so.0.7800.3
7f6a13eb4000-7f6a13eb6000 rw-p 00000000 00:00 0
7f6a13eb6000-7f6a13ed4000 r--p 00000000 08:08 6985835 /usr/lib64/libglib-2.0.so.0.7800.3
7f6a13ed4000-7f6a13f75000 r-xp 0001e000 08:08 6985835 /usr/lib64/libglib-2.0.so.0.7800.3
7f6a13f75000-7f6a13ffd000 r--p 000bf000 08:08 6985835 /usr/lib64/libglib-2.0.so.0.7800.3
7f6a13ffd000-7f6a13ffe000 r--p 00147000 08:08 6985835 /usr/lib64/libglib-2.0.so.0.7800.3
7f6a13ffe000-7f6a13fff000 rw-p 00148000 08:08 6985835 /usr/lib64/libglib-2.0.so.0.7800.3
7f6a13fff000-7f6a14000000 rw-p 00000000 00:00 0
7f6a14000000-7f6a140ad000 r--p 00000000 08:08 6982261 /usr/lib64/libcrypto.so.3.1.4
7f6a140ad000-7f6a143c4000 r-xp 000ad000 08:08 6982261 /usr/lib64/libcrypto.so.3.1.4
7f6a143c4000-7f6a1447e000 r--p 003c4000 08:08 6982261 /usr/lib64/libcrypto.so.3.1.4
7f6a1447e000-7f6a144d5000 r--p 0047e000 08:08 6982261 /usr/lib64/libcrypto.so.3.1.4
7f6a144d5000-7f6a144d8000 rw-p 004d5000 08:08 6982261 /usr/lib64/libcrypto.so.3.1.4
7f6a144d8000-7f6a144db000 rw-p 00000000 00:00 0
7f6a144db000-7f6a144de000 r--p 00000000 08:08 6999099 /usr/lib64/girepository-1.0/GdkX11-3.0.typelib
7f6a144de000-7f6a144e2000 r--p 00000000 08:08 6984538 /usr/lib64/ruby/fiddle.so
7f6a144e2000-7f6a144ea000 r-xp 00004000 08:08 6984538 /usr/lib64/ruby/fiddle.so
7f6a144ea000-7f6a144ed000 r--p 0000c000 08:08 6984538 /usr/lib64/ruby/fiddle.so
7f6a144ed000-7f6a144ee000 r--p 0000e000 08:08 6984538 /usr/lib64/ruby/fiddle.so
7f6a144ee000-7f6a144ef000 rw-p 0000f000 08:08 6984538 /usr/lib64/ruby/fiddle.so
7f6a144ef000-7f6a144f9000 r--p 00000000 08:08 6980724 /usr/lib64/libmount.so.1.1.0
7f6a144f9000-7f6a14530000 r-xp 0000a000 08:08 6980724 /usr/lib64/libmount.so.1.1.0
7f6a14530000-7f6a1453d000 r--p 00041000 08:08 6980724 /usr/lib64/libmount.so.1.1.0
7f6a1453d000-7f6a1453f000 r--p 0004e000 08:08 6980724 /usr/lib64/libmount.so.1.1.0
7f6a1453f000-7f6a14540000 rw-p 00050000 08:08 6980724 /usr/lib64/libmount.so.1.1.0
7f6a14540000-7f6a14548000 r--p 00000000 08:08 6985981 /usr/lib64/libgirepository-1.0.so.1.0.0
7f6a14548000-7f6a1455b000 r-xp 00008000 08:08 6985981 /usr/lib64/libgirepository-1.0.so.1.0.0
7f6a1455b000-7f6a14563000 r--p 0001b000 08:08 6985981 /usr/lib64/libgirepository-1.0.so.1.0.0
7f6a14563000-7f6a14564000 r--p 00023000 08:08 6985981 /usr/lib64/libgirepository-1.0.so.1.0.0
7f6a14564000-7f6a14565000 rw-p 00000000 00:00 0
7f6a14565000-7f6a14568000 r--p 00000000 08:08 6980328 /usr/lib64/libpcre2-8.so.0.11.2
7f6a14568000-7f6a145d6000 r-xp 00003000 08:08 6980328 /usr/lib64/libpcre2-8.so.0.11.2
7f6a145d6000-7f6a145fe000 r--p 00071000 08:08 6980328 /usr/lib64/libpcre2-8.so.0.11.2
7f6a145fe000-7f6a145ff000 r--p 00098000 08:08 6980328 /usr/lib64/libpcre2-8.so.0.11.2
7f6a145ff000-7f6a14600000 rw-p 00099000 08:08 6980328 /usr/lib64/libpcre2-8.so.0.11.2
7f6a14600000-7f6a1469c000 r--p 00000000 08:08 6979933 /usr/lib64/libstdc++.so.6.0.32
7f6a1469c000-7f6a147c6000 r-xp 0009c000 08:08 6979933 /usr/lib64/libstdc++.so.6.0.32
7f6a147c6000-7f6a14842000 r--p 001c6000 08:08 6979933 /usr/lib64/libstdc++.so.6.0.32
7f6a14842000-7f6a1484f000 r--p 00242000 08:08 6979933 /usr/lib64/libstdc++.so.6.0.32
7f6a1484f000-7f6a14850000 rw-p 0024f000 08:08 6979933 /usr/lib64/libstdc++.so.6.0.32
7f6a14850000-7f6a14854000 rw-p 00000000 00:00 0
7f6a14854000-7f6a14855000 r--p 00000000 08:08 6979633 /usr/lib/locale/C.utf8/LC_IDENTIFICATION
7f6a14855000-7f6a14856000 r--p 00000000 08:08 6985978 /usr/lib64/girepository-1.0/xlib-2.0.typelib
7f6a14856000-7f6a14858000 r--p 00000000 08:08 6997309 /usr/lib64/girepository-1.0/PangoOT-1.0.typelib
7f6a14858000-7f6a14868000 r--p 00000000 08:08 6985968 /usr/lib64/girepository-1.0/GObject-2.0.typelib
7f6a14868000-7f6a14872000 r--p 00000000 08:08 6990608 /usr/lib64/gems/ruby/gobject-introspection-4.2.0/gobject_introspection.so
7f6a14872000-7f6a14886000 r-xp 0000a000 08:08 6990608 /usr/lib64/gems/ruby/gobject-introspection-4.2.0/gobject_introspection.so
7f6a14886000-7f6a1488d000 r--p 0001e000 08:08 6990608 /usr/lib64/gems/ruby/gobject-introspection-4.2.0/gobject_introspection.so
7f6a1488d000-7f6a1488f000 r--p 00025000 08:08 6990608 /usr/lib64/gems/ruby/gobject-introspection-4.2.0/gobject_introspection.so
7f6a1488f000-7f6a14890000 rw-p 00027000 08:08 6990608 /usr/lib64/gems/ruby/gobject-introspection-4.2.0/gobject_introspection.so
7f6a14890000-7f6a148a0000 rw-p 00000000 00:00 0
7f6a148a0000-7f6a148a2000 r--p 00000000 08:08 6997380 /usr/lib64/gems/ruby/pango-4.2.0/pango.so
7f6a148a2000-7f6a148a4000 r-xp 00002000 08:08 6997380 /usr/lib64/gems/ruby/pango-4.2.0/pango.so
7f6a148a4000-7f6a148a5000 r--p 00004000 08:08 6997380 /usr/lib64/gems/ruby/pango-4.2.0/pango.so
7f6a148a5000-7f6a148a6000 r--p 00004000 08:08 6997380 /usr/lib64/gems/ruby/pango-4.2.0/pango.so
7f6a148a6000-7f6a148a7000 rw-p 00000000 00:00 0
7f6a148a7000-7f6a148a8000 r--p 00000000 08:08 6985210 /usr/lib64/libXau.so.6.0.0
7f6a148a8000-7f6a148aa000 r-xp 00001000 08:08 6985210 /usr/lib64/libXau.so.6.0.0
7f6a148aa000-7f6a148ab000 r--p 00003000 08:08 6985210 /usr/lib64/libXau.so.6.0.0
7f6a148ab000-7f6a148ac000 r--p 00003000 08:08 6985210 /usr/lib64/libXau.so.6.0.0
7f6a148ac000-7f6a148ad000 rw-p 00000000 00:00 0
7f6a148ad000-7f6a148bb000 r--p 00000000 08:08 6985839 /usr/lib64/libgobject-2.0.so.0.7800.3
7f6a148bb000-7f6a148f1000 r-xp 0000e000 08:08 6985839 /usr/lib64/libgobject-2.0.so.0.7800.3
7f6a148f1000-7f6a14909000 r--p 00044000 08:08 6985839 /usr/lib64/libgobject-2.0.so.0.7800.3
7f6a14909000-7f6a1490c000 r--p 0005c000 08:08 6985839 /usr/lib64/libgobject-2.0.so.0.7800.3
7f6a1490c000-7f6a1490d000 rw-p 0005f000 08:08 6985839 /usr/lib64/libgobject-2.0.so.0.7800.3
7f6a1490d000-7f6a14926000 r--p 00000000 08:08 6990590 /usr/lib64/gems/ruby/glib2-4.2.0/glib2.so
7f6a14926000-7f6a14956000 r-xp 00019000 08:08 6990590 /usr/lib64/gems/ruby/glib2-4.2.0/glib2.so
7f6a14956000-7f6a14969000 r--p 00049000 08:08 6990590 /usr/lib64/gems/ruby/glib2-4.2.0/glib2.so
7f6a14969000-7f6a1496f000 r--p 0005b000 08:08 6990590 /usr/lib64/gems/ruby/glib2-4.2.0/glib2.so
7f6a1496f000-7f6a14970000 rw-p 00061000 08:08 6990590 /usr/lib64/gems/ruby/glib2-4.2.0/glib2.so
7f6a14970000-7f6a149a0000 rw-p 00000000 00:00 0
7f6a149a0000-7f6a149a2000 r--p 00000000 08:08 6993452 /usr/lib64/libXrender.so.1.3.0
7f6a149a2000-7f6a149a9000 r-xp 00002000 08:08 6993452 /usr/lib64/libXrender.so.1.3.0
7f6a149a9000-7f6a149aa000 r--p 00009000 08:08 6993452 /usr/lib64/libXrender.so.1.3.0
7f6a149aa000-7f6a149ab000 r--p 00009000 08:08 6993452 /usr/lib64/libXrender.so.1.3.0
7f6a149ab000-7f6a149ac000 rw-p 0000a000 08:08 6993452 /usr/lib64/libXrender.so.1.3.0
7f6a149ac000-7f6a149ae000 r--p 00000000 08:08 6981703 /usr/lib64/libffi.so.8.1.2
7f6a149ae000-7f6a149b8000 r-xp 00002000 08:08 6981703 /usr/lib64/libffi.so.8.1.2
7f6a149b8000-7f6a149ba000 r--p 0000c000 08:08 6981703 /usr/lib64/libffi.so.8.1.2
7f6a149ba000-7f6a149bb000 r--p 0000d000 08:08 6981703 /usr/lib64/libffi.so.8.1.2
7f6a149bb000-7f6a149bc000 rw-p 0000e000 08:08 6981703 /usr/lib64/libffi.so.8.1.2
7f6a149bc000-7f6a149bf000 r--p 00000000 08:08 6979663 /usr/lib64/libresolv.so.2
7f6a149bf000-7f6a149c7000 r-xp 00003000 08:08 6979663 /usr/lib64/libresolv.so.2
7f6a149c7000-7f6a149c9000 r--p 0000b000 08:08 6979663 /usr/lib64/libresolv.so.2
7f6a149c9000-7f6a149ca000 r--p 0000d000 08:08 6979663 /usr/lib64/libresolv.so.2
7f6a149ca000-7f6a149cb000 rw-p 0000e000 08:08 6979663 /usr/lib64/libresolv.so.2
7f6a149cb000-7f6a149cd000 rw-p 00000000 00:00 0
7f6a149cd000-7f6a149d6000 r--p 00000000 08:08 6985769 /usr/lib64/libhogweed.so.6.8
7f6a149d6000-7f6a149eb000 r-xp 00009000 08:08 6985769 /usr/lib64/libhogweed.so.6.8
7f6a149eb000-7f6a14a0d000 r--p 0001e000 08:08 6985769 /usr/lib64/libhogweed.so.6.8
7f6a14a0d000-7f6a14a0f000 r--p 0003f000 08:08 6985769 /usr/lib64/libhogweed.so.6.8
7f6a14a0f000-7f6a14a10000 rw-p 00000000 00:00 0
7f6a14a10000-7f6a14a1e000 r--p 00000000 08:08 6985771 /usr/lib64/libnettle.so.8.8
7f6a14a1e000-7f6a14a4e000 r-xp 0000e000 08:08 6985771 /usr/lib64/libnettle.so.8.8
7f6a14a4e000-7f6a14a65000 r--p 0003e000 08:08 6985771 /usr/lib64/libnettle.so.8.8
7f6a14a65000-7f6a14a67000 r--p 00055000 08:08 6985771 /usr/lib64/libnettle.so.8.8
7f6a14a67000-7f6a14a68000 rw-p 00057000 08:08 6985771 /usr/lib64/libnettle.so.8.8
7f6a14a68000-7f6a14a6b000 r--p 00000000 08:08 6980263 /usr/lib64/libtasn1.so.6.6.3
7f6a14a6b000-7f6a14a79000 r-xp 00003000 08:08 6980263 /usr/lib64/libtasn1.so.6.6.3
7f6a14a79000-7f6a14a7c000 r--p 00011000 08:08 6980263 /usr/lib64/libtasn1.so.6.6.3
7f6a14a7c000-7f6a14a7d000 r--p 00014000 08:08 6980263 /usr/lib64/libtasn1.so.6.6.3
7f6a14a7d000-7f6a14a7e000 rw-p 00000000 00:00 0
7f6a14a7e000-7f6a14a90000 r--p 00000000 08:08 6980273 /usr/lib64/libunistring.so.5.0.0
7f6a14a90000-7f6a14ac9000 r-xp 00012000 08:08 6980273 /usr/lib64/libunistring.so.5.0.0
7f6a14ac9000-7f6a14c29000 r--p 0004b000 08:08 6980273 /usr/lib64/libunistring.so.5.0.0
7f6a14c29000-7f6a14c2d000 r--p 001ab000 08:08 6980273 /usr/lib64/libunistring.so.5.0.0
7f6a14c2d000-7f6a14c2e000 rw-p 001af000 08:08 6980273 /usr/lib64/libunistring.so.5.0.0
7f6a14c2e000-7f6a14c30000 r--p 00000000 08:08 6980284 /usr/lib64/libidn2.so.0.3.8
7f6a14c30000-7f6a14c34000 r-xp 00002000 08:08 6980284 /usr/lib64/libidn2.so.0.3.8
7f6a14c34000-7f6a14c4e000 r--p 00006000 08:08 6980284 /usr/lib64/libidn2.so.0.3.8
7f6a14c4e000-7f6a14c4f000 r--p 0001f000 08:08 6980284 /usr/lib64/libidn2.so.0.3.8
7f6a14c4f000-7f6a14c50000 rw-p 00000000 00:00 0
7f6a14c50000-7f6a14c85000 r--p 00000000 08:08 6981716 /usr/lib64/libp11-kit.so.0.3.1
7f6a14c85000-7f6a14d4d000 r-xp 00035000 08:08 6981716 /usr/lib64/libp11-kit.so.0.3.1
7f6a14d4d000-7f6a14dc7000 r--p 000fd000 08:08 6981716 /usr/lib64/libp11-kit.so.0.3.1
7f6a14dc7000-7f6a14dd3000 r--p 00176000 08:08 6981716 /usr/lib64/libp11-kit.so.0.3.1
7f6a14dd3000-7f6a14de0000 rw-p 00182000 08:08 6981716 /usr/lib64/libp11-kit.so.0.3.1
7f6a14de0000-7f6a14de1000 rw-p 00000000 00:00 0
7f6a14de1000-7f6a14de6000 r--p 00000000 08:08 6981457 /usr/lib64/libsasl2.so.3.0.0
7f6a14de6000-7f6a14df9000 r-xp 00005000 08:08 6981457 /usr/lib64/libsasl2.so.3.0.0
7f6a14df9000-7f6a14dfe000 r--p 00018000 08:08 6981457 /usr/lib64/libsasl2.so.3.0.0
7f6a14dfe000-7f6a14dff000 r--p 0001d000 08:08 6981457 /usr/lib64/libsasl2.so.3.0.0
7f6a14dff000-7f6a14e00000 rw-p 0001e000 08:08 6981457 /usr/lib64/libsasl2.so.3.0.0
7f6a14e00000-7f6a14e38000 r--p 00000000 08:08 6985784 /usr/lib64/libgnutls.so.30.37.0
7f6a14e38000-7f6a14f7c000 r-xp 00038000 08:08 6985784 /usr/lib64/libgnutls.so.30.37.0
7f6a14f7c000-7f6a15012000 r--p 0017c000 08:08 6985784 /usr/lib64/libgnutls.so.30.37.0
7f6a15012000-7f6a15024000 r--p 00211000 08:08 6985784 /usr/lib64/libgnutls.so.30.37.0
7f6a15024000-7f6a15026000 rw-p 00223000 08:08 6985784 /usr/lib64/libgnutls.so.30.37.0
7f6a15026000-7f6a1502a000 rw-p 00000000 00:00 0
7f6a1502a000-7f6a1502d000 r--s 00000000 08:08 6997282 /usr/lib/fontconfig/cache/18f520a508f13854f77176faf7889ae9-le64.cache-8
7f6a1502d000-7f6a1502e000 r--p 00000000 08:08 6997307 /usr/lib64/girepository-1.0/PangoFT2-1.0.typelib
7f6a1502e000-7f6a15031000 r--p 00000000 08:08 6993703 /usr/lib64/libhiredis.so.1.0.0
7f6a15031000-7f6a1503d000 r-xp 00003000 08:08 6993703 /usr/lib64/libhiredis.so.1.0.0
7f6a1503d000-7f6a15040000 r--p 0000f000 08:08 6993703 /usr/lib64/libhiredis.so.1.0.0
7f6a15040000-7f6a15041000 r--p 00012000 08:08 6993703 /usr/lib64/libhiredis.so.1.0.0
7f6a15041000-7f6a15042000 rw-p 00013000 08:08 6993703 /usr/lib64/libhiredis.so.1.0.0
7f6a15042000-7f6a15047000 r--p 00000000 08:08 6991038 /usr/lib64/libmemcached.so.11.0.0
7f6a15047000-7f6a15062000 r-xp 00005000 08:08 6991038 /usr/lib64/libmemcached.so.11.0.0
7f6a15062000-7f6a1506f000 r--p 00020000 08:08 6991038 /usr/lib64/libmemcached.so.11.0.0
7f6a1506f000-7f6a15070000 r--p 0002d000 08:08 6991038 /usr/lib64/libmemcached.so.11.0.0
7f6a15070000-7f6a15071000 rw-p 0002e000 08:08 6991038 /usr/lib64/libmemcached.so.11.0.0
7f6a15071000-7f6a150cf000 r--p 00000000 08:08 6993710 /usr/lib64/libyaz.so.5.0.0
7f6a150cf000-7f6a1514f000 r-xp 0005e000 08:08 6993710 /usr/lib64/libyaz.so.5.0.0
7f6a1514f000-7f6a15175000 r--p 000de000 08:08 6993710 /usr/lib64/libyaz.so.5.0.0
7f6a15175000-7f6a15178000 r--p 00103000 08:08 6993710 /usr/lib64/libyaz.so.5.0.0
7f6a15178000-7f6a1521f000 rw-p 00106000 08:08 6993710 /usr/lib64/libyaz.so.5.0.0
7f6a1521f000-7f6a15250000 rw-p 00000000 00:00 0
7f6a15250000-7f6a15251000 r--p 00000000 08:08 6985972 /usr/lib64/girepository-1.0/fontconfig-2.0.typelib
7f6a15251000-7f6a15252000 r--p 00000000 08:08 6985272 /usr/lib64/libxcb-shm.so.0.0.0
7f6a15252000-7f6a15253000 r-xp 00001000 08:08 6985272 /usr/lib64/libxcb-shm.so.0.0.0
7f6a15253000-7f6a15254000 r--p 00002000 08:08 6985272 /usr/lib64/libxcb-shm.so.0.0.0
7f6a15254000-7f6a15255000 r--p 00002000 08:08 6985272 /usr/lib64/libxcb-shm.so.0.0.0
7f6a15255000-7f6a15256000 rw-p 00003000 08:08 6985272 /usr/lib64/libxcb-shm.so.0.0.0
7f6a15256000-7f6a15257000 r--p 00000000 08:08 6979379 /usr/lib64/gconv/CP932.so
7f6a15257000-7f6a15259000 r-xp 00001000 08:08 6979379 /usr/lib64/gconv/CP932.so
7f6a15259000-7f6a1526e000 r--p 00003000 08:08 6979379 /usr/lib64/gconv/CP932.so
7f6a1526e000-7f6a1526f000 r--p 00017000 08:08 6979379 /usr/lib64/gconv/CP932.so
7f6a1526f000-7f6a15280000 rw-p 00000000 00:00 0
7f6a15280000-7f6a15282000 r--p 00000000 08:08 6997369 /usr/lib64/gems/ruby/cairo-gobject-4.2.0/cairo_gobject.so
7f6a15282000-7f6a15284000 r-xp 00002000 08:08 6997369 /usr/lib64/gems/ruby/cairo-gobject-4.2.0/cairo_gobject.so
7f6a15284000-7f6a15285000 r--p 00004000 08:08 6997369 /usr/lib64/gems/ruby/cairo-gobject-4.2.0/cairo_gobject.so
7f6a15285000-7f6a15286000 r--p 00004000 08:08 6997369 /usr/lib64/gems/ruby/cairo-gobject-4.2.0/cairo_gobject.so
7f6a15286000-7f6a15287000 rw-p 00000000 00:00 0
7f6a15287000-7f6a1528b000 r--p 00000000 08:08 6979912 /usr/lib64/liblzma.so.5.4.5
7f6a1528b000-7f6a152ad000 r-xp 00004000 08:08 6979912 /usr/lib64/liblzma.so.5.4.5
7f6a152ad000-7f6a152b8000 r--p 00026000 08:08 6979912 /usr/lib64/liblzma.so.5.4.5
7f6a152b8000-7f6a152b9000 r--p 00031000 08:08 6979912 /usr/lib64/liblzma.so.5.4.5
7f6a152b9000-7f6a152ba000 rw-p 00000000 00:00 0
7f6a152ba000-7f6a152ee000 r--p 00000000 08:08 6981551 /usr/lib64/libxml2.so.2.12.3
7f6a152ee000-7f6a153da000 r-xp 00034000 08:08 6981551 /usr/lib64/libxml2.so.2.12.3
7f6a153da000-7f6a15419000 r--p 00120000 08:08 6981551 /usr/lib64/libxml2.so.2.12.3
7f6a15419000-7f6a15424000 r--p 0015e000 08:08 6981551 /usr/lib64/libxml2.so.2.12.3
7f6a15424000-7f6a15425000 rw-p 00169000 08:08 6981551 /usr/lib64/libxml2.so.2.12.3
7f6a15425000-7f6a15426000 rw-p 00000000 00:00 0
7f6a15426000-7f6a15430000 r--p 00000000 08:08 6986168 /usr/lib64/libxslt.so.1.1.39
7f6a15430000-7f6a1545a000 r-xp 0000a000 08:08 6986168 /usr/lib64/libxslt.so.1.1.39
7f6a1545a000-7f6a15467000 r--p 00034000 08:08 6986168 /usr/lib64/libxslt.so.1.1.39
7f6a15467000-7f6a15469000 r--p 00040000 08:08 6986168 /usr/lib64/libxslt.so.1.1.39
7f6a15469000-7f6a1546a000 rw-p 00042000 08:08 6986168 /usr/lib64/libxslt.so.1.1.39
7f6a1546a000-7f6a1546e000 r--p 00000000 08:08 6986165 /usr/lib64/libexslt.so.0.8.21
7f6a1546e000-7f6a1547c000 r-xp 00004000 08:08 6986165 /usr/lib64/libexslt.so.0.8.21
7f6a1547c000-7f6a1547f000 r--p 00012000 08:08 6986165 /usr/lib64/libexslt.so.0.8.21
7f6a1547f000-7f6a15480000 r--p 00015000 08:08 6986165 /usr/lib64/libexslt.so.0.8.21
7f6a15480000-7f6a15481000 rw-p 00016000 08:08 6986165 /usr/lib64/libexslt.so.0.8.21
7f6a15481000-7f6a1548f000 r--p 00000000 08:08 7000159 /usr/lib64/gems/ruby/nokogiri-1.15.5/nokogiri/nokogiri.so
7f6a1548f000-7f6a154be000 r-xp 0000e000 08:08 7000159 /usr/lib64/gems/ruby/nokogiri-1.15.5/nokogiri/nokogiri.so
7f6a154be000-7f6a154fb000 r--p 0003d000 08:08 7000159 /usr/lib64/gems/ruby/nokogiri-1.15.5/nokogiri/nokogiri.so
7f6a154fb000-7f6a154ff000 r--p 00079000 08:08 7000159 /usr/lib64/gems/ruby/nokogiri-1.15.5/nokogiri/nokogiri.so
7f6a154ff000-7f6a15500000 rw-p 0007d000 08:08 7000159 /usr/lib64/gems/ruby/nokogiri-1.15.5/nokogiri/nokogiri.so
7f6a15500000-7f6a15510000 rw-p 00000000 00:00 0
7f6a15510000-7f6a15511000 r--p 00000000 08:08 6997308 /usr/lib64/girepository-1.0/PangoFc-1.0.typelib
7f6a15511000-7f6a15513000 r--p 00000000 08:08 6989378 /usr/lib64/gems/ruby/json-2.7.1/json/ext/generator.so
7f6a15513000-7f6a15519000 r-xp 00002000 08:08 6989378 /usr/lib64/gems/ruby/json-2.7.1/json/ext/generator.so
7f6a15519000-7f6a1551b000 r--p 00008000 08:08 6989378 /usr/lib64/gems/ruby/json-2.7.1/json/ext/generator.so
7f6a1551b000-7f6a1551c000 r--p 00009000 08:08 6989378 /usr/lib64/gems/ruby/json-2.7.1/json/ext/generator.so
7f6a1551c000-7f6a1551d000 rw-p 00000000 00:00 0
7f6a1551d000-7f6a15521000 r--p 00000000 08:08 6984554 /usr/lib64/ruby/zlib.so
7f6a15521000-7f6a1552b000 r-xp 00004000 08:08 6984554 /usr/lib64/ruby/zlib.so
7f6a1552b000-7f6a1552e000 r--p 0000e000 08:08 6984554 /usr/lib64/ruby/zlib.so
7f6a1552e000-7f6a1552f000 r--p 00010000 08:08 6984554 /usr/lib64/ruby/zlib.so
7f6a1552f000-7f6a155b0000 rw-p 00000000 00:00 0
7f6a155b0000-7f6a155b5000 r--p 00000000 08:08 6986346 /usr/lib64/girepository-1.0/GdkPixbuf-2.0.typelib
7f6a155b5000-7f6a155b7000 r--p 00000000 08:08 6989379 /usr/lib64/gems/ruby/json-2.7.1/json/ext/parser.so
7f6a155b7000-7f6a155bb000 r-xp 00002000 08:08 6989379 /usr/lib64/gems/ruby/json-2.7.1/json/ext/parser.so
7f6a155bb000-7f6a155bc000 r--p 00006000 08:08 6989379 /usr/lib64/gems/ruby/json-2.7.1/json/ext/parser.so
7f6a155bc000-7f6a155bd000 r--p 00006000 08:08 6989379 /usr/lib64/gems/ruby/json-2.7.1/json/ext/parser.so
7f6a155bd000-7f6a155be000 rw-p 00000000 00:00 0
7f6a155be000-7f6a155c5000 r--p 00000000 08:08 6984550 /usr/lib64/ruby/socket.so
7f6a155c5000-7f6a155e7000 r-xp 00007000 08:08 6984550 /usr/lib64/ruby/socket.so
7f6a155e7000-7f6a155ee000 r--p 00029000 08:08 6984550 /usr/lib64/ruby/socket.so
7f6a155ee000-7f6a155ef000 r--p 00030000 08:08 6984550 /usr/lib64/ruby/socket.so
7f6a155ef000-7f6a155f0000 rw-p 00031000 08:08 6984550 /usr/lib64/ruby/socket.so
7f6a155f0000-7f6a15600000 rw-p 00000000 00:00 0
7f6a15600000-7f6a15602000 r--p 00000000 08:08 6997306 /usr/lib64/girepository-1.0/PangoCairo-1.0.typelib
7f6a15602000-7f6a15606000 r--p 00000000 08:08 6984466 /usr/lib64/ruby/date_core.so
7f6a15606000-7f6a15635000 r-xp 00004000 08:08 6984466 /usr/lib64/ruby/date_core.so
7f6a15635000-7f6a1563d000 r--p 00033000 08:08 6984466 /usr/lib64/ruby/date_core.so
7f6a1563d000-7f6a1563e000 r--p 0003a000 08:08 6984466 /usr/lib64/ruby/date_core.so
7f6a1563e000-7f6a1563f000 rw-p 0003b000 08:08 6984466 /usr/lib64/ruby/date_core.so
7f6a1563f000-7f6a15700000 rw-p 00000000 00:00 0
7f6a15700000-7f6a15702000 r--p 00000000 08:08 6985837 /usr/lib64/libgmodule-2.0.so.0.7800.3
7f6a15702000-7f6a15704000 r-xp 00002000 08:08 6985837 /usr/lib64/libgmodule-2.0.so.0.7800.3
7f6a15704000-7f6a15705000 r--p 00004000 08:08 6985837 /usr/lib64/libgmodule-2.0.so.0.7800.3
7f6a15705000-7f6a15706000 r--p 00004000 08:08 6985837 /usr/lib64/libgmodule-2.0.so.0.7800.3
7f6a15706000-7f6a15707000 rw-p 00005000 08:08 6985837 /usr/lib64/libgmodule-2.0.so.0.7800.3
7f6a15707000-7f6a15709000 r--p 00000000 08:08 6991036 /usr/lib64/libhashkit.so.2.0.0
7f6a15709000-7f6a1570c000 r-xp 00002000 08:08 6991036 /usr/lib64/libhashkit.so.2.0.0
7f6a1570c000-7f6a1570d000 r--p 00005000 08:08 6991036 /usr/lib64/libhashkit.so.2.0.0
7f6a1570d000-7f6a1570e000 r--p 00006000 08:08 6991036 /usr/lib64/libhashkit.so.2.0.0
7f6a1570e000-7f6a1570f000 rw-p 00007000 08:08 6991036 /usr/lib64/libhashkit.so.2.0.0
7f6a1570f000-7f6a15711000 r--p 00000000 08:08 6989049 /usr/lib64/libyaml-0.so.2.0.9
7f6a15711000-7f6a1572a000 r-xp 00002000 08:08 6989049 /usr/lib64/libyaml-0.so.2.0.9
7f6a1572a000-7f6a1572e000 r--p 0001b000 08:08 6989049 /usr/lib64/libyaml-0.so.2.0.9
7f6a1572e000-7f6a1572f000 r--p 0001e000 08:08 6989049 /usr/lib64/libyaml-0.so.2.0.9
7f6a1572f000-7f6a15780000 rw-p 00000000 00:00 0
7f6a15780000-7f6a15782000 r--p 00000000 08:08 6991042 /usr/lib64/libmemcachedutil.so.2.0.0
7f6a15782000-7f6a15784000 r-xp 00002000 08:08 6991042 /usr/lib64/libmemcachedutil.so.2.0.0
7f6a15784000-7f6a15785000 r--p 00004000 08:08 6991042 /usr/lib64/libmemcachedutil.so.2.0.0
7f6a15785000-7f6a15786000 r--p 00004000 08:08 6991042 /usr/lib64/libmemcachedutil.so.2.0.0
7f6a15786000-7f6a15787000 rw-p 00005000 08:08 6991042 /usr/lib64/libmemcachedutil.so.2.0.0
7f6a15787000-7f6a15789000 r--p 00000000 08:08 6984536 /usr/lib64/ruby/etc.so
7f6a15789000-7f6a1578c000 r-xp 00002000 08:08 6984536 /usr/lib64/ruby/etc.so
7f6a1578c000-7f6a1578e000 r--p 00005000 08:08 6984536 /usr/lib64/ruby/etc.so
7f6a1578e000-7f6a1578f000 r--p 00006000 08:08 6984536 /usr/lib64/ruby/etc.so
7f6a1578f000-7f6a158a0000 rw-p 00000000 00:00 0
7f6a158a0000-7f6a158a1000 r--p 00000000 08:08 6985973 /usr/lib64/girepository-1.0/freetype2-2.0.typelib
7f6a158a1000-7f6a158a2000 r--p 00000000 08:08 6990641 /usr/lib64/gems/ruby/gio2-4.2.0/gio2.so
7f6a158a2000-7f6a158a3000 r-xp 00001000 08:08 6990641 /usr/lib64/gems/ruby/gio2-4.2.0/gio2.so
7f6a158a3000-7f6a158a4000 r--p 00002000 08:08 6990641 /usr/lib64/gems/ruby/gio2-4.2.0/gio2.so
7f6a158a4000-7f6a158a5000 r--p 00002000 08:08 6990641 /usr/lib64/gems/ruby/gio2-4.2.0/gio2.so
7f6a158a5000-7f6a158a6000 rw-p 00000000 00:00 0
7f6a158a6000-7f6a158a9000 r--p 00000000 08:08 6989691 /usr/lib64/gems/ruby/psych-5.1.2/psych.so
7f6a158a9000-7f6a158ad000 r-xp 00003000 08:08 6989691 /usr/lib64/gems/ruby/psych-5.1.2/psych.so
7f6a158ad000-7f6a158ae000 r--p 00007000 08:08 6989691 /usr/lib64/gems/ruby/psych-5.1.2/psych.so
7f6a158ae000-7f6a158af000 r--p 00008000 08:08 6989691 /usr/lib64/gems/ruby/psych-5.1.2/psych.so
7f6a158af000-7f6a15940000 rw-p 00000000 00:00 0
7f6a15940000-7f6a15944000 r--p 00000000 08:08 6985971 /usr/lib64/girepository-1.0/cairo-1.0.typelib
7f6a15944000-7f6a15947000 r--p 00000000 08:08 6984551 /usr/lib64/ruby/stringio.so
7f6a15947000-7f6a1594c000 r-xp 00003000 08:08 6984551 /usr/lib64/ruby/stringio.so
7f6a1594c000-7f6a1594e000 r--p 00008000 08:08 6984551 /usr/lib64/ruby/stringio.so
7f6a1594e000-7f6a1594f000 r--p 00009000 08:08 6984551 /usr/lib64/ruby/stringio.so
7f6a1594f000-7f6a15a10000 rw-p 00000000 00:00 0
7f6a15a10000-7f6a15a11000 r--p 00000000 08:08 6985967 /usr/lib64/girepository-1.0/GModule-2.0.typelib
7f6a15a11000-7f6a15a12000 rw-p 00000000 00:00 0
7f6a15a12000-7f6a15a13000 r--p 00000000 08:08 6984535 /usr/lib64/ruby/erb/escape.so
7f6a15a13000-7f6a15a14000 r-xp 00001000 08:08 6984535 /usr/lib64/ruby/erb/escape.so
7f6a15a14000-7f6a15a15000 r--p 00002000 08:08 6984535 /usr/lib64/ruby/erb/escape.so
7f6a15a15000-7f6a15a16000 r--p 00002000 08:08 6984535 /usr/lib64/ruby/erb/escape.so
7f6a15a16000-7f6a15a17000 rw-p 00000000 00:00 0
7f6a15a17000-7f6a15a19000 r--p 00000000 08:08 6984552 /usr/lib64/ruby/strscan.so
7f6a15a19000-7f6a15a1c000 r-xp 00002000 08:08 6984552 /usr/lib64/ruby/strscan.so
7f6a15a1c000-7f6a15a1d000 r--p 00005000 08:08 6984552 /usr/lib64/ruby/strscan.so
7f6a15a1d000-7f6a15a1e000 r--p 00006000 08:08 6984552 /usr/lib64/ruby/strscan.so
7f6a15a1e000-7f6a15a1f000 rw-p 00000000 00:00 0
7f6a15a1f000-7f6a15a20000 ---p 00000000 00:00 0
7f6a15a20000-7f6a15ac1000 rw-p 00000000 00:00 0
7f6a15ac1000-7f6a15ac2000 ---p 00000000 00:00 0
7f6a15ac2000-7f6a15b63000 rw-p 00000000 00:00 0
7f6a15b63000-7f6a15b64000 ---p 00000000 00:00 0
7f6a15b64000-7f6a15c05000 rw-p 00000000 00:00 0
7f6a15c05000-7f6a15c06000 ---p 00000000 00:00 0
7f6a15c06000-7f6a15ca7000 rw-p 00000000 00:00 0
7f6a15ca7000-7f6a15ca8000 ---p 00000000 00:00 0
7f6a15ca8000-7f6a15d49000 rw-p 00000000 00:00 0
7f6a15d49000-7f6a15d4a000 ---p 00000000 00:00 0
7f6a15d4a000-7f6a15deb000 rw-p 00000000 00:00 0
7f6a15deb000-7f6a15dec000 ---p 00000000 00:00 0
7f6a15dec000-7f6a15e8d000 rw-p 00000000 00:00 0
7f6a15e8d000-7f6a15e8e000 ---p 00000000 00:00 0
7f6a15e8e000-7f6a15f2f000 rw-p 00000000 00:00 0
7f6a15f2f000-7f6a15f30000 ---p 00000000 00:00 0
7f6a15f30000-7f6a15fd1000 rw-p 00000000 00:00 0
7f6a15fd1000-7f6a15fd2000 ---p 00000000 00:00 0
7f6a15fd2000-7f6a16073000 rw-p 00000000 00:00 0
7f6a16073000-7f6a16074000 ---p 00000000 00:00 0
7f6a16074000-7f6a16115000 rw-p 00000000 00:00 0
7f6a16115000-7f6a16116000 ---p 00000000 00:00 0
7f6a16116000-7f6a161b7000 rw-p 00000000 00:00 0
7f6a161b7000-7f6a161b8000 ---p 00000000 00:00 0
7f6a161b8000-7f6a16259000 rw-p 00000000 00:00 0
7f6a16259000-7f6a1625a000 ---p 00000000 00:00 0
7f6a1625a000-7f6a162fb000 rw-p 00000000 00:00 0
7f6a162fb000-7f6a162fc000 ---p 00000000 00:00 0
7f6a162fc000-7f6a1639d000 rw-p 00000000 00:00 0
7f6a1639d000-7f6a1639e000 ---p 00000000 00:00 0
7f6a1639e000-7f6a1643f000 rw-p 00000000 00:00 0
7f6a1643f000-7f6a16440000 ---p 00000000 00:00 0
7f6a16440000-7f6a164e1000 rw-p 00000000 00:00 0
7f6a164e1000-7f6a164e2000 ---p 00000000 00:00 0
7f6a164e2000-7f6a16583000 rw-p 00000000 00:00 0
7f6a16583000-7f6a16584000 ---p 00000000 00:00 0
7f6a16584000-7f6a16625000 rw-p 00000000 00:00 0
7f6a16625000-7f6a16626000 ---p 00000000 00:00 0
7f6a16626000-7f6a166c7000 rw-p 00000000 00:00 0
7f6a166c7000-7f6a166c8000 ---p 00000000 00:00 0
7f6a166c8000-7f6a16769000 rw-p 00000000 00:00 0
7f6a16769000-7f6a1676a000 ---p 00000000 00:00 0
7f6a1676a000-7f6a1680b000 rw-p 00000000 00:00 0
7f6a1680b000-7f6a1680c000 ---p 00000000 00:00 0
7f6a1680c000-7f6a168ad000 rw-p 00000000 00:00 0
7f6a168ad000-7f6a168ae000 ---p 00000000 00:00 0
7f6a168ae000-7f6a1694f000 rw-p 00000000 00:00 0
7f6a1694f000-7f6a16950000 ---p 00000000 00:00 0
7f6a16950000-7f6a169f1000 rw-p 00000000 00:00 0
7f6a169f1000-7f6a169f2000 ---p 00000000 00:00 0
7f6a169f2000-7f6a16a93000 rw-p 00000000 00:00 0
7f6a16a93000-7f6a16a94000 ---p 00000000 00:00 0
7f6a16a94000-7f6a16b35000 rw-p 00000000 00:00 0
7f6a16b35000-7f6a16b36000 ---p 00000000 00:00 0
7f6a16b36000-7f6a16bd7000 rw-p 00000000 00:00 0
7f6a16bd7000-7f6a16bd8000 ---p 00000000 00:00 0
7f6a16bd8000-7f6a16c79000 rw-p 00000000 00:00 0
7f6a16c79000-7f6a16c7a000 ---p 00000000 00:00 0
7f6a16c7a000-7f6a16d1b000 rw-p 00000000 00:00 0
7f6a16d1b000-7f6a16d1c000 ---p 00000000 00:00 0
7f6a16d1c000-7f6a16dbd000 rw-p 00000000 00:00 0
7f6a16dbd000-7f6a16dbe000 ---p 00000000 00:00 0
7f6a16dbe000-7f6a16e5f000 rw-p 00000000 00:00 0
7f6a16e5f000-7f6a16e60000 ---p 00000000 00:00 0
7f6a16e60000-7f6a176b0000 rw-p 00000000 00:00 0
7f6a176b0000-7f6a176b1000 r-xp 0000a000 08:08 6981703 /usr/lib64/libffi.so.8.1.2
7f6a176b1000-7f6a176b2000 rw-p 00000000 00:00 0
7f6a176b2000-7f6a176b3000 r--p 00000000 08:08 6979636 /usr/lib/locale/C.utf8/LC_MESSAGES/SYS_LC_MESSAGES
7f6a176b3000-7f6a176b5000 r--p 00000000 08:08 6984463 /usr/lib64/ruby/cgi/escape.so
7f6a176b5000-7f6a176b7000 r-xp 00002000 08:08 6984463 /usr/lib64/ruby/cgi/escape.so
7f6a176b7000-7f6a176b8000 r--p 00004000 08:08 6984463 /usr/lib64/ruby/cgi/escape.so
7f6a176b8000-7f6a176b9000 r--p 00004000 08:08 6984463 /usr/lib64/ruby/cgi/escape.so
7f6a176b9000-7f6a176ba000 rw-p 00000000 00:00 0
7f6a176ba000-7f6a176bb000 r--p 00000000 08:08 6984541 /usr/lib64/ruby/monitor.so
7f6a176bb000-7f6a176bc000 r-xp 00001000 08:08 6984541 /usr/lib64/ruby/monitor.so
7f6a176bc000-7f6a176bd000 r--p 00002000 08:08 6984541 /usr/lib64/ruby/monitor.so
7f6a176bd000-7f6a176be000 r--p 00002000 08:08 6984541 /usr/lib64/ruby/monitor.so
7f6a176be000-7f6a30abf000 rw-p 00000000 00:00 0
7f6a30abf000-7f6a30ac1000 r--p 00000000 08:08 6999731 /usr/lib64/gems/ruby/zoom-0.5.0/zoom.so
7f6a30ac1000-7f6a30ac5000 r-xp 00002000 08:08 6999731 /usr/lib64/gems/ruby/zoom-0.5.0/zoom.so
7f6a30ac5000-7f6a30ac6000 r--p 00006000 08:08 6999731 /usr/lib64/gems/ruby/zoom-0.5.0/zoom.so
7f6a30ac6000-7f6a30ac7000 r--p 00007000 08:08 6999731 /usr/lib64/gems/ruby/zoom-0.5.0/zoom.so
7f6a30ac7000-7f6a30ac8000 rw-p 00000000 00:00 0
7f6a30ac8000-7f6a30aca000 r--p 00000000 08:08 7003637 /usr/lib64/gems/ruby/racc-1.7.3/racc/cparse.so
7f6a30aca000-7f6a30acd000 r-xp 00002000 08:08 7003637 /usr/lib64/gems/ruby/racc-1.7.3/racc/cparse.so
7f6a30acd000-7f6a30ace000 r--p 00005000 08:08 7003637 /usr/lib64/gems/ruby/racc-1.7.3/racc/cparse.so
7f6a30ace000-7f6a30acf000 r--p 00005000 08:08 7003637 /usr/lib64/gems/ruby/racc-1.7.3/racc/cparse.so
7f6a30acf000-7f6a30b00000 rw-p 00000000 00:00 0
7f6a30b00000-7f6a30b01000 r--p 00000000 08:08 6984540 /usr/lib64/ruby/io/wait.so
7f6a30b01000-7f6a30b02000 r-xp 00001000 08:08 6984540 /usr/lib64/ruby/io/wait.so
7f6a30b02000-7f6a30b03000 r--p 00002000 08:08 6984540 /usr/lib64/ruby/io/wait.so
7f6a30b03000-7f6a30b04000 r--p 00002000 08:08 6984540 /usr/lib64/ruby/io/wait.so
7f6a30b04000-7f6a30b05000 rw-p 00000000 00:00 0
7f6a30b05000-7f6a30b07000 r--p 00000000 08:08 6984545 /usr/lib64/ruby/pathname.so
7f6a30b07000-7f6a30b0c000 r-xp 00002000 08:08 6984545 /usr/lib64/ruby/pathname.so
7f6a30b0c000-7f6a30b0e000 r--p 00007000 08:08 6984545 /usr/lib64/ruby/pathname.so
7f6a30b0e000-7f6a30b0f000 r--p 00008000 08:08 6984545 /usr/lib64/ruby/pathname.so
7f6a30b0f000-7f6a30b30000 rw-p 00000000 00:00 0
7f6a30b30000-7f6a30b31000 r--p 00000000 08:08 6984521 /usr/lib64/ruby/enc/trans/transdb.so
7f6a30b31000-7f6a30b32000 r-xp 00001000 08:08 6984521 /usr/lib64/ruby/enc/trans/transdb.so
7f6a30b32000-7f6a30b33000 r--p 00002000 08:08 6984521 /usr/lib64/ruby/enc/trans/transdb.so
7f6a30b33000-7f6a30b34000 r--p 00002000 08:08 6984521 /usr/lib64/ruby/enc/trans/transdb.so
7f6a30b34000-7f6a30c36000 rw-p 00000000 00:00 0
7f6a30c36000-7f6a30c3d000 r--s 00000000 08:08 6979736 /usr/lib64/gconv/gconv-modules.cache
7f6a30c3d000-7f6a30c96000 r--p 00000000 08:08 6979632 /usr/lib/locale/C.utf8/LC_CTYPE
7f6a30c96000-7f6a30cbc000 r--p 00000000 08:08 6979654 /usr/lib64/libc.so.6
7f6a30cbc000-7f6a30e1d000 r-xp 00026000 08:08 6979654 /usr/lib64/libc.so.6
7f6a30e1d000-7f6a30e6b000 r--p 00187000 08:08 6979654 /usr/lib64/libc.so.6
7f6a30e6b000-7f6a30e6f000 r--p 001d4000 08:08 6979654 /usr/lib64/libc.so.6
7f6a30e6f000-7f6a30e71000 rw-p 001d8000 08:08 6979654 /usr/lib64/libc.so.6
7f6a30e71000-7f6a30e79000 rw-p 00000000 00:00 0
7f6a30e79000-7f6a30e89000 r--p 00000000 08:08 6979657 /usr/lib64/libm.so.6
7f6a30e89000-7f6a30eff000 r-xp 00010000 08:08 6979657 /usr/lib64/libm.so.6
7f6a30eff000-7f6a30f59000 r--p 00086000 08:08 6979657 /usr/lib64/libm.so.6
7f6a30f59000-7f6a30f5a000 r--p 000df000 08:08 6979657 /usr/lib64/libm.so.6
7f6a30f5a000-7f6a30f5b000 rw-p 000e0000 08:08 6979657 /usr/lib64/libm.so.6
7f6a30f5b000-7f6a30f6c000 r--p 00000000 08:08 6980033 /usr/lib64/libgmp.so.10.4.1
7f6a30f6c000-7f6a30fe8000 r-xp 00011000 08:08 6980033 /usr/lib64/libgmp.so.10.4.1
7f6a30fe8000-7f6a30ffd000 r--p 0008d000 08:08 6980033 /usr/lib64/libgmp.so.10.4.1
7f6a30ffd000-7f6a30fff000 r--p 000a1000 08:08 6980033 /usr/lib64/libgmp.so.10.4.1
7f6a30fff000-7f6a31000000 rw-p 000a3000 08:08 6980033 /usr/lib64/libgmp.so.10.4.1
7f6a31000000-7f6a3104b000 r--p 00000000 08:08 6984462 /usr/lib64/libruby.so.3.3.0
7f6a3104b000-7f6a313e0000 r-xp 0004b000 08:08 6984462 /usr/lib64/libruby.so.3.3.0
7f6a313e0000-7f6a3154c000 r--p 003e0000 08:08 6984462 /usr/lib64/libruby.so.3.3.0
7f6a3154c000-7f6a31565000 r--p 0054c000 08:08 6984462 /usr/lib64/libruby.so.3.3.0
7f6a31565000-7f6a31566000 rw-p 00565000 08:08 6984462 /usr/lib64/libruby.so.3.3.0
7f6a31566000-7f6a3157e000 rw-p 00000000 00:00 0
7f6a3157e000-7f6a31581000 r--p 00000000 08:08 6976691 /usr/lib64/libgcc_s-13-20231205.so.1
7f6a31581000-7f6a3159c000 r-xp 00003000 08:08 6976691 /usr/lib64/libgcc_s-13-20231205.so.1
7f6a3159c000-7f6a315a0000 r--p 0001e000 08:08 6976691 /usr/lib64/libgcc_s-13-20231205.so.1
7f6a315a0000-7f6a315a1000 r--p 00021000 08:08 6976691 /usr/lib64/libgcc_s-13-20231205.so.1
7f6a315a1000-7f6a315a4000 rw-p 00000000 00:00 0
7f6a315a4000-7f6a315a6000 r--p 00000000 08:08 6980054 /usr/lib64/libcrypt.so.2.0.0
7f6a315a6000-7f6a315ba000 r-xp 00002000 08:08 6980054 /usr/lib64/libcrypt.so.2.0.0
7f6a315ba000-7f6a315d3000 r--p 00016000 08:08 6980054 /usr/lib64/libcrypt.so.2.0.0
7f6a315d3000-7f6a315d4000 r--p 0002e000 08:08 6980054 /usr/lib64/libcrypt.so.2.0.0
7f6a315d4000-7f6a315dd000 rw-p 00000000 00:00 0
7f6a315dd000-7f6a315e0000 r--p 00000000 08:08 6979909 /usr/lib64/libz.so.1.2.13.zlib-ng
7f6a315e0000-7f6a315f6000 r-xp 00003000 08:08 6979909 /usr/lib64/libz.so.1.2.13.zlib-ng
7f6a315f6000-7f6a315fd000 r--p 00019000 08:08 6979909 /usr/lib64/libz.so.1.2.13.zlib-ng
7f6a315fd000-7f6a315fe000 r--p 00020000 08:08 6979909 /usr/lib64/libz.so.1.2.13.zlib-ng
7f6a315fe000-7f6a31601000 rw-p 00000000 00:00 0
7f6a31601000-7f6a31602000 r--p 00000000 08:08 6984477 /usr/lib64/ruby/enc/encdb.so
7f6a31602000-7f6a31603000 r-xp 00001000 08:08 6984477 /usr/lib64/ruby/enc/encdb.so
7f6a31603000-7f6a31604000 r--p 00002000 08:08 6984477 /usr/lib64/ruby/enc/encdb.so
7f6a31604000-7f6a31605000 r--p 00002000 08:08 6984477 /usr/lib64/ruby/enc/encdb.so
7f6a31605000-7f6a31606000 rw-p 00000000 00:00 0
7f6a31606000-7f6a31607000 r--p 00000000 08:08 6979651 /usr/lib64/ld-linux-x86-64.so.2
7f6a31607000-7f6a3162e000 r-xp 00001000 08:08 6979651 /usr/lib64/ld-linux-x86-64.so.2
7f6a3162e000-7f6a31638000 r--p 00028000 08:08 6979651 /usr/lib64/ld-linux-x86-64.so.2
7f6a31638000-7f6a3163a000 r--p 00031000 08:08 6979651 /usr/lib64/ld-linux-x86-64.so.2
7f6a3163a000-7f6a3163c000 rw-p 00033000 08:08 6979651 /usr/lib64/ld-linux-x86-64.so.2
7ffdbe4fa000-7ffdbecf9000 rw-p 00000000 00:00 0 [stack]
7ffdbed8a000-7ffdbed8e000 r--p 00000000 00:00 0 [vvar]
7ffdbed8e000-7ffdbed90000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall]
/usr/bin/ruby -rbundler/setup -rsimplecov -Ilib -w -I/usr/share/gems/gems/rspec-support-3.12.1/lib:/usr/share/gems/gems/rspec-core-3.12.2/lib /usr/share/gems/gems/rspec-core-3.12.2/exe/rspec --pattern spec/alexandria/\*\*/\*_spec.rb failed
</code></pre>
<p>I have not tried to minimize failure test (it may take time..)</p> Ruby master - Bug #20076 (Open): M:N scheduler is stuck on macOS with RUBY_MN_THREADS=1https://bugs.ruby-lang.org/issues/200762023-12-21T03:17:50Zhsbt (Hiroshi SHIBATA)hsbt@ruby-lang.org
<p>This is known issue. I already shared this to ko1.</p>
<p>The version of <a href="https://github.com/ruby/ruby/commit/28e3886689c71b22487dd5d0cb62f3b5ed0a77cc" class="external">https://github.com/ruby/ruby/commit/28e3886689c71b22487dd5d0cb62f3b5ed0a77cc</a> is crashed with <code>make exam</code>.</p>
<p>This is happend with webrick test on <code>make test-tool</code>.</p>
<p>My environment is macOS Sonoma 14.3 beta1 and</p>
<pre><code>$ pkgutil --pkg-info=com.apple.pkg.CLTools_Executables
package-id: com.apple.pkg.CLTools_Executables
version: 15.1.0.0.1.1700200546
volume: /
location: /
install-time: 1702331495
</code></pre> Ruby master - Feature #20070 (Open): commas in pattern matchhttps://bugs.ruby-lang.org/issues/200702023-12-18T15:42:27ZDan0042 (Daniel DeLorme)
<p>In pattern matching, <code>case v; in 1,2,3</code> is a synonym for <code>case v; in [1,2,3]</code></p>
<p>This is the one thing that keeps confusing me, that I haven't been able to get used to. Because I'm used to <code>case v; when 1,2,3</code> it feels like <code>case v; in 1,2,3</code> should have a similar meaning. So it's possible to omit the square brackets but honestly I don't see much point for that, it just makes it look to me like something it is not.</p>
<p>In other words, I feel it would be far more intuitive (at least to me) if</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">case</span> <span class="n">v</span>
<span class="k">in</span> <span class="mi">1</span><span class="p">,</span><span class="mi">2</span><span class="p">,</span><span class="mi">3</span>
</code></pre>
<p>was a synonym for</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">case</span> <span class="n">v</span>
<span class="k">in</span> <span class="mi">1</span>
<span class="k">in</span> <span class="mi">2</span>
<span class="k">in</span> <span class="mi">3</span>
</code></pre>
<p>or possibly a synonym for</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">case</span> <span class="n">v</span>
<span class="k">in</span> <span class="p">(</span><span class="mi">1</span><span class="o">|</span><span class="mi">2</span><span class="o">|</span><span class="mi">3</span><span class="p">)</span>
</code></pre>
<p>which would make it similar to the syntax in <code>rescue A, B, C => err</code></p>
<p>Is it too late to change this?</p>