Ruby Issue Tracking System: Issues
https://redmine.ruby-lang.org/
https://redmine.ruby-lang.org/favicon.ico?1711330511
2024-03-18T15:37:22Z
Ruby Issue Tracking System
Redmine
Ruby master - Bug #20344 (Open): argument stack underflow (-1)
https://redmine.ruby-lang.org/issues/20344
2024-03-18T15:37:22Z
nobu (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 #20337 (Open): Complex#inspect mutates the string returned by `real.inspect`
https://redmine.ruby-lang.org/issues/20337
2024-03-14T11:23:54Z
Eregon (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 - Bug #20332 (Open): After upgrading to ruby v 3.2.3 rb_scan_args() skips argument va...
https://redmine.ruby-lang.org/issues/20332
2024-03-12T18:06:04Z
praveenrocket (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 - Bug #20330 (Open): [BUG] Segmentation fault at 0xffffffffffffffff
https://redmine.ruby-lang.org/issues/20330
2024-03-09T10:33:11Z
l33tname (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 - Bug #20285 (Assigned): Stale inline method caches when refinement modules are reopened
https://redmine.ruby-lang.org/issues/20285
2024-02-21T02:44:55Z
jhawthorn (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://redmine.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://redmine.ruby-lang.org/issues/20283
2024-02-20T06:41:28Z
watson1978 (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 - Bug #20269 (Open): bignum too big to convert into `long' when running String#bytesl...
https://redmine.ruby-lang.org/issues/20269
2024-02-15T16:22:39Z
simpliandy (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 #20255 (Open): Embedded arrays aren't moved correctly across ractors
https://redmine.ruby-lang.org/issues/20255
2024-02-10T17:31:30Z
luke-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 - Bug #20237 (Assigned): Unable to unshare(CLONE_NEWUSER) in Linux because of timer t...
https://redmine.ruby-lang.org/issues/20237
2024-02-05T04:59:20Z
hanazuki (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 - Bug #20216 (Open): Circular parameter reference not checked for assignment
https://redmine.ruby-lang.org/issues/20216
2024-01-26T18:25:53Z
kddnewton (Kevin Newton)
kddnewton@gmail.com
<p>I wanted to check if this was a bug or desired.</p>
<p>Usually when you reference a parameter within its own default value (optional positional or optional keyword) it raises a syntax error. This is unless you use it in an assignment, in which case it is not checked. Is this desired? Here's an example:</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="n">bar</span> <span class="o">=</span> <span class="n">bar</span> <span class="o">=</span> <span class="mi">1</span><span class="p">);</span> <span class="k">end</span>
<span class="k">def</span> <span class="nf">foo</span><span class="p">(</span><span class="ss">bar: </span><span class="n">bar</span> <span class="o">=</span> <span class="mi">1</span><span class="p">);</span> <span class="k">end</span>
</code></pre>
<p>I'm not sure what this code is supposed to be doing. I expected it to raise a syntax error.</p>
Ruby master - Bug #20167 (Open): Code execution isn't recorded in Ractor
https://redmine.ruby-lang.org/issues/20167
2024-01-09T09:08:58Z
shia (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 #20158 (Assigned): Ractor affects Coverage results
https://redmine.ruby-lang.org/issues/20158
2024-01-07T15:12:34Z
janosch-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 - Bug #20155 (Assigned): Using value of rb_fiber_scheduler_current() crashes Ruby
https://redmine.ruby-lang.org/issues/20155
2024-01-05T22:14:24Z
paddor (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://redmine.ruby-lang.org/issues/20154
2024-01-05T21:25:03Z
jprokop (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 - Bug #20151 (Open): Can't build Ruby 3.1 on FreeBSD 14.0
https://redmine.ruby-lang.org/issues/20151
2024-01-05T03:14:58Z
hsbt (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 #20146 (Assigned): Code using Ractor with env `RUBY_MAX_CPU=1` ends with unreac...
https://redmine.ruby-lang.org/issues/20146
2024-01-04T02:17:54Z
shia (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.0
https://redmine.ruby-lang.org/issues/20112
2024-01-03T15:51:14Z
ariasdiniz (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 - Bug #20079 (Open): alexandria testsuite began to segfault recently
https://redmine.ruby-lang.org/issues/20079
2023-12-22T03:59:59Z
mtasaka (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://redmine.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://redmine.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 #20047 (Open): ConditionVariable#wait has spurious wakeups from signal traps
https://redmine.ruby-lang.org/issues/20047
2023-12-07T13:07:37Z
Eregon (Benoit Daloze)
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">Signal</span><span class="p">.</span><span class="nf">trap</span><span class="p">(</span><span class="s2">"INT"</span><span class="p">)</span> <span class="p">{</span> <span class="nb">p</span> <span class="ss">:SIGINT</span> <span class="p">}</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="nb">sleep</span> <span class="mf">0.6</span>
<span class="sb">`kill -INT </span><span class="si">#{</span><span class="vg">$$</span><span class="si">}</span><span class="sb">`</span>
<span class="k">end</span>
<span class="n">m</span><span class="p">,</span> <span class="n">cv</span> <span class="o">=</span> <span class="no">Mutex</span><span class="p">.</span><span class="nf">new</span><span class="p">,</span> <span class="no">ConditionVariable</span><span class="p">.</span><span class="nf">new</span>
<span class="n">m</span><span class="p">.</span><span class="nf">synchronize</span> <span class="k">do</span>
<span class="n">r</span> <span class="o">=</span> <span class="no">ARGV</span><span class="p">[</span><span class="mi">0</span><span class="p">]</span> <span class="p">?</span> <span class="n">cv</span><span class="p">.</span><span class="nf">wait</span><span class="p">(</span><span class="n">m</span><span class="p">,</span> <span class="mi">2</span><span class="p">)</span> <span class="p">:</span> <span class="n">cv</span><span class="p">.</span><span class="nf">wait</span><span class="p">(</span><span class="n">m</span><span class="p">)</span>
<span class="nb">p</span> <span class="p">[</span><span class="s2">"ConditionVariable#wait returned"</span><span class="p">,</span> <span class="n">r</span><span class="p">]</span>
<span class="k">end</span>
</code></pre>
<p>The above program (without CLI arguments) should hang on <code>.wait</code> and not return, because neither ConditionVariable#{signal,broadcast} are used.<br>
That's the behavior on TruffleRuby and JRuby, but not on CRuby, where <code>.wait</code> wakes up spuriously.</p>
<pre><code>$ ruby -v spurious_cv.rb
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]
:SIGINT
["ConditionVariable#wait returned", 1]
$ ruby -v spurious_cv.rb
truffleruby 23.1.1, like ruby 3.2.2, Oracle GraalVM Native [x86_64-linux]
:SIGINT
# hangs as expected
$ ruby -v spurious_cv.rb
jruby 9.4.5.0 (3.1.4) 2023-11-02 1abae2700f OpenJDK 64-Bit Server VM 17.0.8+7 on 17.0.8+7 +jit [x86_64-linux]
:SIGINT
# hangs as expected
</code></pre>
<p>When given an argument, it should wait 2 seconds.<br>
But on CRuby it wakes up spuriously:</p>
<pre><code>$ ruby -v spurious_cv.rb timeout
ruby 3.2.2 (2023-03-30 revision e51014f9c0) [x86_64-linux]
:SIGINT
["ConditionVariable#wait returned", 0]
$ ruby -v spurious_cv.rb timeout
truffleruby 23.1.1, like ruby 3.2.2, Oracle GraalVM Native [x86_64-linux]
:SIGINT
["ConditionVariable#wait returned", #<ConditionVariable:0x188>]
$ ruby -v spurious_cv.rb timeout
jruby 9.4.5.0 (3.1.4) 2023-11-02 1abae2700f OpenJDK 64-Bit Server VM 17.0.8+7 on 17.0.8+7 +jit [x86_64-linux]
:SIGINT
["ConditionVariable#wait returned", #<Thread::ConditionVariable:0x482ba4b1>]
</code></pre>
<p><code>ConditionVariable#wait</code> needs to be interrupted to execute the signal handler, which does <code>{ p :SIGINT }</code> on the main thread.<br>
However, <code>ConditionVariable#wait</code> should automatically be restarted internally after that, with the remaining timeout.<br>
That is what I think is the bug in CRuby.</p>
<p>While it's good practice to have a loop around ConditionVariable#wait (at least when there is no timeout), it still seems highly unexpected in a high-level language like Ruby<br>
to have ConditionVariable#wait return when neither ConditionVariable#{signal,broadcast} are used (i.e., spurious wakeups).</p>
<p>Also adding a loop is non-trivial for the case where a timeout argument is passed, as then one needs to manually account the remaining timeout instead of letting ConditionVariable#wait do its job correctly.<br>
And also need to check that if ConditionVariable#wait returns nil then one should break the loop, which is quite error-prone.<br>
Instead of just using <code>cv.wait(mutex, timeout)</code> when it works correctly.</p>
<p>From <a href="https://github.com/ruby-concurrency/concurrent-ruby/issues/1015" class="external">https://github.com/ruby-concurrency/concurrent-ruby/issues/1015</a></p>
Ruby master - Bug #20045 (Assigned): `TestDir#test_home` fails on i686
https://redmine.ruby-lang.org/issues/20045
2023-12-07T09:28:07Z
vo.x (Vit Ondruch)
v.ondruch@tiscali.cz
<p>This is followup to <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: `TestFileExhaustive#test_expand_path_for_existent_username` and `TestDir#test_home` fails on i686 (Closed)" href="https://redmine.ruby-lang.org/issues/19147">#19147</a>. Testing on Fedora 38 and Fedora Rawhide, we are facing this test failure:</p>
<pre><code>$ tar xf build/SOURCES/ruby-3.2.2.tar.xz
$ cd ruby-3.2.2/
$ ./configure && make
... snip ...
---
Configuration summary for ruby version 3.2.2
* Installation prefix: /usr/local
* exec prefix: ${prefix}
* arch: i686-linux
* site arch: ${arch}
* RUBY_BASE_NAME: ruby
* 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: x86
* enable shared libs: no
* dynamic library ext: so
* CFLAGS: ${optflags} ${debugflags} ${warnflags}
* LDFLAGS: -L. -fstack-protector-strong -rdynamic -Wl,-export-dynamic
* DLDFLAGS: -Wl,--compress-debug-sections=zlib
* optflags: -O3 -fno-fast-math
* debugflags: -ggdb3
* warnflags: -Wall -Wextra -Wdeprecated-declarations -Wdiv-by-zero -Wduplicated-cond -Wimplicit-function-declaration -Wimplicit-int -Wmisleading-indentation -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 -Wundef
* strip command: strip -S -x
* install doc: rdoc
* MJIT support: yes
* YJIT support: no
* man page type: doc
---
... snip ...
$ LANG=C make test-all 'TESTS=-v -n /TestDir#test_home/'
config.status: creating ruby-runner.h
making mjit_build_dir.so
generating i686-linux-fake.rb
i686-linux-fake.rb updated
Run options:
--seed=10517
"--ruby=./miniruby -I./lib -I. -I.ext/common ./tool/runruby.rb --extout=.ext -- --disable-gems"
--excludes-dir=./test/excludes
--name=!/memory_leak/
-v
-n
/TestDir#test_home/
# Running tests:
[1/0] TestDir#test_home = 0.00 s
1) Error:
TestDir#test_home:
RuntimeError: can't set length of shared string
/builddir/ruby-3.2.2/test/ruby/test_dir.rb:557:in `expand_path'
/builddir/ruby-3.2.2/test/ruby/test_dir.rb:557:in `block in test_home'
Finished tests in 4.164691s, 0.2401 tests/s, 1.6808 assertions/s.
1 tests, 7 assertions, 0 failures, 1 errors, 0 skips
ruby -v: ruby 3.2.2 (2023-03-30 revision e51014f9c0) [i686-linux]
make: *** [uncommon.mk:855: yes-test-all] Error 1
</code></pre>
<p>Please note that having the <code>C</code> locale is essential. The test passes just fine with e.g. <code>C.UTF-8</code> locale.</p>
<p>We were able to reduce the test case to the following:</p>
<pre><code>$ whoami
mockbuild
$ echo 'File.expand_path("~mockbuild")' > test.rb
$ LANG=C RUBYLIB=/builddir/ruby-3.2.2/.ext/i686-linux LD_LIBRARY_PATH=. ./ruby --disable-gems test.rb
test.rb:1:in `expand_path': can't set length of shared string (RuntimeError)
from test.rb:1:in `<main>'
</code></pre>
<p>As I said earlier, the <code>LANG=C</code> is essential as well as the <code>RUBYLIB=/builddir/ruby-3.2.2/.ext/i386-linux</code>. Adding the path to <code>RUBYLIB</code> enables Ruby to load the following libraries:</p>
<pre><code>/builddir/ruby-3.2.2/.ext/i686-linux/enc/encdb.so
/builddir/ruby-3.2.2/.ext/i686-linux/enc/trans/transdb.so
</code></pre>
<p>And that makes the difference. Also, the <code>File.expand_path("~mockbuild")</code> must be in some file, replacing this by <code>-e 'File.expand_path("~mockbuild")'</code> does not reproduce the issue.</p>
<p>We also believe that this was introduced by <a href="https://github.com/ruby/ruby/pull/6699" class="external">https://github.com/ruby/ruby/pull/6699</a>, specifically by <a class="changeset" title="Transition shape when object's capacity changes This commit adds a `capacity` field to shapes, a..." href="https://redmine.ruby-lang.org/projects/ruby-master/repository/git/revisions/5246f4027ec574e77809845e1b1f7822cc2a5cef">git|5246f4027ec574e77809845e1b1f7822cc2a5cef</a> and fixed in master by <a class="changeset" title="Enable 5 size pools on 32 bit systems This commit will allow 32 bit systems to take advantage of..." href="https://redmine.ruby-lang.org/projects/ruby-master/repository/git/revisions/b4571097df4a6bd848f1195026d82a92f3a7f9d8">git|b4571097df4a6bd848f1195026d82a92f3a7f9d8</a>.</p>
<p>Unfortunately, we were not able to discover what is the mechanism behind this, why this depends on locale, why the test must be in file, why the string is shared etc. But I hope we have provided enough details for someone else more knowledgeable.</p>
<p>Some background for this issue is also available here:</p>
<p><a href="https://src.fedoraproject.org/rpms/ruby/pull-request/164" class="external">https://src.fedoraproject.org/rpms/ruby/pull-request/164</a></p>
Ruby master - Bug #20043 (Open): `defined?` checks for method existence but only sometimes
https://redmine.ruby-lang.org/issues/20043
2023-12-05T22:17:59Z
tenderlovemaking (Aaron Patterson)
tenderlove@ruby-lang.org
<p>When an expression is passed to <code>defined?</code>, it will <em>sometimes</em> check if a method in a sub-expression is defined and sometimes it won't.</p>
<p>For example:</p>
<pre><code>$ ./miniruby -e'p defined?(a)'
nil
$ ./miniruby -e'p defined?([a])'
nil
</code></pre>
<p>In the above case, Ruby will check whether or not the method <code>a</code> is defined, and it returns <code>nil</code>. However, if you use a splat, it will not check:</p>
<pre><code>$ ./miniruby -e'p defined?([*a])'
"expression"
</code></pre>
<p>The same thing seems to happen with method parameters:</p>
<pre><code>$ ./miniruby -e'p defined?(itself)'
"method"
$ ./miniruby -e'p defined?(itself(a))'
nil
$ ./miniruby -e'p defined?(itself(*a))'
"method"
</code></pre>
<p>Oddly, <code>defined?</code> will check contents of arrays, but <em>won't</em> check contents of hashes:</p>
<pre><code>$ ./miniruby -e'p defined?([[[[a]]]])'
nil
$ ./miniruby -e'p defined?({ a => a })'
"expression"
</code></pre>
<p>I think all of the cases that refer to <code>a</code> should check whether or not <code>a</code> is defined regardless of splats or hashes.</p>
Ruby master - Bug #20041 (Open): Array destructuring and default values in parameters
https://redmine.ruby-lang.org/issues/20041
2023-12-05T19:52:32Z
tenderlovemaking (Aaron Patterson)
tenderlove@ruby-lang.org
<p>It's possible to set the default value of a parameter to a previous parameter. For example:</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="n">a</span><span class="p">,</span> <span class="n">b</span> <span class="o">=</span> <span class="n">a</span><span class="p">)</span>
<span class="n">b</span>
<span class="k">end</span>
<span class="n">foo</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="c1"># => [1, 2]</span>
</code></pre>
<p>However, if the parameters are destructured, the destructring happens <em>after</em> default parameter assignment. For example:</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="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">),</span> <span class="n">b</span> <span class="o">=</span> <span class="n">x</span><span class="p">)</span>
<span class="p">[</span><span class="n">x</span><span class="p">,</span> <span class="n">y</span><span class="p">,</span> <span class="n">b</span><span class="p">]</span>
<span class="k">end</span>
<span class="n">foo</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="c1"># => [1, 2, nil]</span>
</code></pre>
<p>Is this expected behavior? I would have expected the parameters to be "evaluated" from left to right, and the array destructuring to happen <em>before</em> the default parameter assignment.</p>
<p>Thanks!</p>
Ruby master - Bug #19996 (Assigned): `RUBY_MN_THREADS=1` triggers Action Cable unit test failures
https://redmine.ruby-lang.org/issues/19996
2023-11-10T04:16:56Z
yahonda (Yasuo Honda)
yasuo.honda@gmail.com
<a name="Steps-to-reproduce"></a>
<h3 >Steps to reproduce<a href="#Steps-to-reproduce" class="wiki-anchor">¶</a></h3>
<ol>
<li>Install <code>ruby 3.3.0dev</code>
</li>
<li>Set <code>RUBY_MN_THREADS=1</code> environment variable</li>
<li>Follow these steps</li>
</ol>
<pre><code>git clone https://github.com/rails/rails
cd rails
rm Gemfile.lock
bundle install
cd actioncable
bin/test test/channel/base_test.rb test/subscription_adapter/redis_test.rb test/channel/test_case_test.rb test/subscription_adapter/redis_test.rb test/client_test.rb --seed 14800
</code></pre>
<a name="Expected-behavior"></a>
<h3 >Expected behavior<a href="#Expected-behavior" class="wiki-anchor">¶</a></h3>
<p>It should pass as not setting <code>RUBY_MN_THREADS</code>.</p>
<pre><code>$ unset RUBY_MN_THREADS
$ bin/test test/channel/base_test.rb test/subscription_adapter/redis_test.rb test/channel/test_case_test.rb test/subscription_adapter/redis_test.rb test/client_test.rb --seed 14800
/home/yahonda/.rbenv/versions/trunk/lib/ruby/gems/3.3.0+0/gems/minitest-5.20.0/lib/minitest.rb:3: warning: mutex_m which will no longer be part of the default gems since Ruby 3.4.0. Add mutex_m to your Gemfile or gemspec.
Run options: --seed 14800
# Running:
.........................................................................
Finished in 12.031310s, 6.0675 runs/s, 46.7115 assertions/s.
73 runs, 562 assertions, 0 failures, 0 errors, 0 skips
$
</code></pre>
<a name="Actual-behavior"></a>
<h3 >Actual behavior<a href="#Actual-behavior" class="wiki-anchor">¶</a></h3>
<p>It usually fails as follows.</p>
<pre><code>$ bin/test test/channel/base_test.rb test/subscription_adapter/redis_test.rb test/channel/test_case_test.rb test/subscription_adapter/redis_test.rb test/client_test.rb --seed 14800
/home/yahonda/.rbenv/versions/trunk/lib/ruby/gems/3.3.0+0/gems/minitest-5.20.0/lib/minitest.rb:3: warning: mutex_m which will no longer be part of the default gems since Ruby 3.4.0. Add mutex_m to your Gemfile or gemspec.
Run options: --seed 14800
# Running:
..................................................F
Failure:
RedisAdapterTest::AlternateConfiguration#test_channel_prefix [/home/yahonda/src/github.com/rails/rails/actioncable/test/subscription_adapter/common.rb:35]:
Expected #<Concurrent::Event:0x00007f0b2698d4f0 @__Lock__=#<Thread::Mutex:0x00007f0b26f8cab8>, @__Condition__=#<Thread::ConditionVariable:0x00007f0b26f8ca90>, @set=false, @iteration=0> to be set?.
bin/test test/subscription_adapter/channel_prefix.rb:6
.F
Failure:
RedisAdapterTest::AlternateConfiguration#test_multiple_broadcast [/home/yahonda/src/github.com/rails/rails/actioncable/test/subscription_adapter/common.rb:35]:
Expected #<Concurrent::Event:0x00007f0b2698a4d0 @__Lock__=#<Thread::Mutex:0x00007f0b26fac688>, @__Condition__=#<Thread::ConditionVariable:0x00007f0b26fac4f8>, @set=false, @iteration=0> to be set?.
bin/test test/subscription_adapter/common.rb:74
E
Error:
ClientTest#test_interacting_clients:
ThreadError: queue empty
<internal:thread_sync>:18:in `pop'
/home/yahonda/src/github.com/rails/rails/actioncable/test/client_test.rb:168:in `read_message'
/home/yahonda/src/github.com/rails/rails/actioncable/test/client_test.rb:241:in `block (2 levels) in test_interacting_clients'
/home/yahonda/src/github.com/rails/rails/actioncable/test/client_test.rb:218:in `block (2 levels) in concurrently'
/home/yahonda/.rbenv/versions/trunk/lib/ruby/gems/3.3.0+0/gems/concurrent-ruby-1.2.2/lib/concurrent-ruby/concurrent/promises.rb:1583:in `evaluate_to'
/home/yahonda/.rbenv/versions/trunk/lib/ruby/gems/3.3.0+0/gems/concurrent-ruby-1.2.2/lib/concurrent-ruby/concurrent/promises.rb:1766:in `block in on_resolvable'
/home/yahonda/.rbenv/versions/trunk/lib/ruby/gems/3.3.0+0/gems/concurrent-ruby-1.2.2/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:352:in `run_task'
/home/yahonda/.rbenv/versions/trunk/lib/ruby/gems/3.3.0+0/gems/concurrent-ruby-1.2.2/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:343:in `block (3 levels) in create_worker'
<internal:kernel>:187:in `loop'
/home/yahonda/.rbenv/versions/trunk/lib/ruby/gems/3.3.0+0/gems/concurrent-ruby-1.2.2/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:334:in `block (2 levels) in create_worker'
/home/yahonda/.rbenv/versions/trunk/lib/ruby/gems/3.3.0+0/gems/concurrent-ruby-1.2.2/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:333:in `catch'
/home/yahonda/.rbenv/versions/trunk/lib/ruby/gems/3.3.0+0/gems/concurrent-ruby-1.2.2/lib/concurrent-ruby/concurrent/executor/ruby_thread_pool_executor.rb:333:in `block in create_worker'
/home/yahonda/.rbenv/versions/trunk/lib/ruby/gems/3.3.0+0/gems/concurrent-ruby-1.2.2/lib/concurrent-ruby/concurrent/promises.rb:1258:in `raise'
/home/yahonda/.rbenv/versions/trunk/lib/ruby/gems/3.3.0+0/gems/concurrent-ruby-1.2.2/lib/concurrent-ruby/concurrent/promises.rb:1258:in `wait_until_resolved!'
/home/yahonda/.rbenv/versions/trunk/lib/ruby/gems/3.3.0+0/gems/concurrent-ruby-1.2.2/lib/concurrent-ruby/concurrent/promises.rb:988:in `value!'
/home/yahonda/src/github.com/rails/rails/actioncable/test/client_test.rb:218:in `map'
/home/yahonda/src/github.com/rails/rails/actioncable/test/client_test.rb:218:in `concurrently'
/home/yahonda/src/github.com/rails/rails/actioncable/test/client_test.rb:240:in `block in test_interacting_clients'
/home/yahonda/src/github.com/rails/rails/actioncable/test/client_test.rb:90:in `with_puma_server'
/home/yahonda/src/github.com/rails/rails/actioncable/test/client_test.rb:234:in `test_interacting_clients'
bin/test test/client_test.rb:233
E
Error:
ClientTest#test_disappearing_client:
ThreadError: queue empty
<internal:thread_sync>:18:in `pop'
/home/yahonda/src/github.com/rails/rails/actioncable/test/client_test.rb:168:in `read_message'
/home/yahonda/src/github.com/rails/rails/actioncable/test/client_test.rb:275:in `block in test_disappearing_client'
/home/yahonda/src/github.com/rails/rails/actioncable/test/client_test.rb:90:in `with_puma_server'
/home/yahonda/src/github.com/rails/rails/actioncable/test/client_test.rb:273:in `test_disappearing_client'
bin/test test/client_test.rb:272
..................
Finished in 1323.812615s, 0.0551 runs/s, 0.3830 assertions/s.
73 runs, 507 assertions, 2 failures, 2 errors, 0 skips
$
</code></pre>
Ruby master - Bug #19981 (Open): bootstraptest/test_ractor.rb: Segmentation fault on arm32
https://redmine.ruby-lang.org/issues/19981
2023-10-30T12:50:07Z
jaruga (Jun Aruga)
<p>I faced the following segmentation fault on Ubuntu jammy arm32 (emulated environment by <code>SETARCH='setarch linux32 --verbose --32bit'</code>) in both Travis CI arm64 <a href="https://app.travis-ci.com/github/ruby/ruby/jobs/612418476#L2422" class="external">log</a> and RubyCI arm64-neoverse server.</p>
<p>I tested it on the latest ruby master branch <code>14fa5e39d72c84d3e12e10dc5d77a6e6200c10f5</code>.</p>
<p>I was able to reproduce this issue on RubyCI arm64-neoverse server, and prepared the reproducing script. So, you can try to debug on the server.<br>
It seems that the <code>-O3</code> flag triggered the issue. Because I didn't see the issue when Travis CI setting <code>- optflags=-O1</code> in <code>.travis.yml</code> on the current master branch.<br>
<a href="https://github.com/junaruga/report-ruby-ractor-segmentation-fault" class="external">https://github.com/junaruga/report-ruby-ractor-segmentation-fault</a></p>
<pre><code>+ arm-linux-gnueabihf-gcc --version
arm-linux-gnueabihf-gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
+ setarch linux32 --verbose --32bit make -s test
Switching on ADDR_LIMIT_32BIT.
Execute command `make'.
Fstderr output is not empty
<internal:ractor>:760: [BUG] Segmentation fault at 0x0000000c
ruby 3.3.0dev (2023-10-30T09:27:06Z master 14fa5e39d7) [armv8l-linux-eabihf]
-- Control frame information -----------------------------------------------
c:0005 p:0003 s:0021 e:000020 METHOD <internal:ractor>:760
c:0004 p:0008 s:0014 e:000013 BLOCK bootstraptest.test_ractor.rb_541_1260.rb:4
c:0003 p:0018 s:0011 e:000010 METHOD <internal:kernel>:187
c:0002 p:0004 s:0006 e:000005 BLOCK bootstraptest.test_ractor.rb_541_1260.rb:3 [FINISH]
c:0001 p:---- s:0003 e:000002 DUMMY [FINISH]
-- Ruby level backtrace information ----------------------------------------
bootstraptest.test_ractor.rb_541_1260.rb:3:in `block in <main>'
<internal:kernel>:187:in `loop'
bootstraptest.test_ractor.rb_541_1260.rb:4:in `block (2 levels) in <main>'
<internal:ractor>:760:in `yield'
-- Threading information ---------------------------------------------------
Total ractor count: 2
Ruby thread count for this ractor: 1
-- Machine register context ------------------------------------------------
r0: 0x00000000 r1: 0x00000001 r2: 0x00000007 r3: 0x00000000 r4: 0x00c935c8
r5: 0x00000002 r6: 0x00000002 r7: 0x00000000 r8: 0x00000004 r9: 0x00c646b0
r10: 0x00000002 sp: 0xd5d91c90 fau: 0x0000000c
-- Other runtime information -----------------------------------------------
* Loaded script: bootstraptest.test_ractor.rb_541_1260.rb
* Loaded features:
0 enumerator.so
1 thread.rb
2 fiber.so
3 rational.so
4 complex.so
5 ruby2_keywords.rb
6 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/encdb.so
7 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/trans/transdb.so
* Process memory map:
00640000-0093a000 r-xp 00000000 103:03 29263803 /home/jaruga/git/ruby/ruby/build/ruby
0094a000-0094e000 r--p 002fa000 103:03 29263803 /home/jaruga/git/ruby/ruby/build/ruby
0094e000-0094f000 rw-p 002fe000 103:03 29263803 /home/jaruga/git/ruby/ruby/build/ruby
0094f000-00956000 rw-p 00000000 00:00 0
00bf3000-00cba000 rw-p 00000000 00:00 0 [heap]
d5700000-d5721000 rw-p 00000000 00:00 0
d5721000-d5800000 ---p 00000000 00:00 0
d5900000-d5921000 rw-p 00000000 00:00 0
d5921000-d5a00000 ---p 00000000 00:00 0
d5a00000-d5a21000 rw-p 00000000 00:00 0
d5a21000-d5b00000 ---p 00000000 00:00 0
d5b00000-d5b21000 rw-p 00000000 00:00 0
d5b21000-d5c00000 ---p 00000000 00:00 0
d5c5f000-d5c60000 ---p 00000000 00:00 0
d5c60000-d5c90000 rw-p 00000000 00:00 0
d5c9f000-d5ca0000 ---p 00000000 00:00 0
d5ca0000-d5cd0000 rw-p 00000000 00:00 0
d5cde000-d5cdf000 ---p 00000000 00:00 0
d5cdf000-d5cef000 rw-p 00000000 00:00 0
d5cef000-d5cf0000 ---p 00000000 00:00 0
d5cf0000-d5d81000 rw-p 00000000 00:00 0
d5d81000-d5d82000 ---p 00000000 00:00 0
d5d82000-d5e12000 rw-p 00000000 00:00 0
d5e12000-d5e13000 ---p 00000000 00:00 0
d5e13000-d5ea3000 rw-p 00000000 00:00 0
d5ea3000-d5ea4000 ---p 00000000 00:00 0
d5ea4000-d5f34000 rw-p 00000000 00:00 0
d5f34000-d5f35000 ---p 00000000 00:00 0
d5f35000-d5fc5000 rw-p 00000000 00:00 0
d5fc5000-d5fc6000 ---p 00000000 00:00 0
d5fc6000-d6056000 rw-p 00000000 00:00 0
d6056000-d6057000 ---p 00000000 00:00 0
d6057000-d60e7000 rw-p 00000000 00:00 0
d60e7000-d60e8000 ---p 00000000 00:00 0
d60e8000-d6178000 rw-p 00000000 00:00 0
d6178000-d6179000 ---p 00000000 00:00 0
d6179000-d6209000 rw-p 00000000 00:00 0
d6209000-d620a000 ---p 00000000 00:00 0
d620a000-d629a000 rw-p 00000000 00:00 0
d629a000-d629b000 ---p 00000000 00:00 0
d629b000-d632b000 rw-p 00000000 00:00 0
d632b000-d632c000 ---p 00000000 00:00 0
d632c000-f5d10000 rw-p 00000000 00:00 0
f5d10000-f5d12000 r-xp 00000000 103:03 29263555 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/trans/transdb.so
f5d12000-f5d21000 ---p 00002000 103:03 29263555 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/trans/transdb.so
f5d21000-f5d22000 r--p 00001000 103:03 29263555 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/trans/transdb.so
f5d22000-f5d23000 rw-p 00002000 103:03 29263555 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/trans/transdb.so
f5d30000-f5d32000 r-xp 00000000 103:03 29263548 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/encdb.so
f5d32000-f5d41000 ---p 00002000 103:03 29263548 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/encdb.so
f5d41000-f5d42000 r--p 00001000 103:03 29263548 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/encdb.so
f5d42000-f5d43000 rw-p 00002000 103:03 29263548 /home/jaruga/git/ruby/ruby/build/.ext/armv8l-linux-eabihf/enc/encdb.so
f5d4f000-f5d50000 ---p 00000000 00:00 0
f5d50000-f5d71000 rw-p 00000000 00:00 0
f5d71000-f5d72000 ---p 00000000 00:00 0
f5d72000-f5d93000 rw-p 00000000 00:00 0
f5d93000-f5d94000 ---p 00000000 00:00 0
f5d94000-f5db5000 rw-p 00000000 00:00 0
f5db5000-f5db6000 ---p 00000000 00:00 0
f5db6000-f5dd7000 rw-p 00000000 00:00 0
f5dd7000-f5dd8000 ---p 00000000 00:00 0
f5dd8000-f5df9000 rw-p 00000000 00:00 0
f5df9000-f5dfa000 ---p 00000000 00:00 0
f5dfa000-f5e1b000 rw-p 00000000 00:00 0
f5e1b000-f5e1c000 ---p 00000000 00:00 0
f5e1c000-f5e3d000 rw-p 00000000 00:00 0
f5e3d000-f5e3e000 ---p 00000000 00:00 0
f5e3e000-f5e5f000 rw-p 00000000 00:00 0
f5e5f000-f5e60000 ---p 00000000 00:00 0
f5e60000-f66a0000 rw-p 00000000 00:00 0
f66af000-f73b0000 rw-p 00000000 00:00 0
f73b5000-f7436000 rw-p 00000000 00:00 0
f7436000-f76b0000 r--p 0006f000 103:03 11802136 /usr/lib/locale/locale-archive
f76b0000-f78b0000 r--p 00000000 103:03 11802136 /usr/lib/locale/locale-archive
f78b0000-f79bc000 r-xp 00000000 103:03 11670018 /usr/lib/arm-linux-gnueabihf/libc.so.6
f79bc000-f79cc000 ---p 0010c000 103:03 11670018 /usr/lib/arm-linux-gnueabihf/libc.so.6
f79cc000-f79ce000 r--p 0010c000 103:03 11670018 /usr/lib/arm-linux-gnueabihf/libc.so.6
f79ce000-f79cf000 rw-p 0010e000 103:03 11670018 /usr/lib/arm-linux-gnueabihf/libc.so.6
f79cf000-f79d9000 rw-p 00000000 00:00 0
f79e0000-f7a21000 r-xp 00000000 103:03 11670021 /usr/lib/arm-linux-gnueabihf/libm.so.6
f7a21000-f7a30000 ---p 00041000 103:03 11670021 /usr/lib/arm-linux-gnueabihf/libm.so.6
f7a30000-f7a31000 r--p 00040000 103:03 11670021 /usr/lib/arm-linux-gnueabihf/libm.so.6
f7a31000-f7a32000 rw-p 00041000 103:03 11670021 /usr/lib/arm-linux-gnueabihf/libm.so.6
f7a40000-f7a6b000 r-xp 00000000 103:03 11670013 /usr/lib/arm-linux-gnueabihf/libcrypt.so.1.1.0
f7a6b000-f7a7b000 ---p 0002b000 103:03 11670013 /usr/lib/arm-linux-gnueabihf/libcrypt.so.1.1.0
f7a7b000-f7a7c000 r--p 0002b000 103:03 11670013 /usr/lib/arm-linux-gnueabihf/libcrypt.so.1.1.0
f7a7c000-f7a7d000 rw-p 0002c000 103:03 11670013 /usr/lib/arm-linux-gnueabihf/libcrypt.so.1.1.0
f7a7d000-f7a85000 rw-p 00000000 00:00 0
f7a88000-f7aa7000 r-xp 00000000 103:03 11670015 /usr/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
f7aac000-f7ab3000 r--s 00000000 103:03 11670285 /usr/lib/arm-linux-gnueabihf/gconv/gconv-modules.cache
f7ab3000-f7ab5000 rw-p 00000000 00:00 0
f7ab5000-f7ab6000 r-xp 00000000 00:00 0 [sigpage]
f7ab6000-f7ab8000 r--p 0001e000 103:03 11670015 /usr/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
f7ab8000-f7ab9000 rw-p 00020000 103:03 11670015 /usr/lib/arm-linux-gnueabihf/ld-linux-armhf.so.3
ff7dd000-fffdc000 rw-p 00000000 00:00 0 [stack]
ffff0000-ffff1000 r-xp 00000000 00:00 0 [vectors]
</code></pre>
Ruby master - Bug #19794 (Assigned): Ruby 3.2.2 fails to build on macOS Sonoma betas
https://redmine.ruby-lang.org/issues/19794
2023-08-02T05:08:15Z
jhaungs (Jim Haungs)
<p>With Big Sur, Apple deprecated putting dylibs in /usr/local/lib. In Sonoma (beta 4), this directory has disappeared completely. However, ruby's configure script depends on its existence. So, virtually every ruby installer (RVM, rbenv, asdf, ruby-build, and even building from source tarball) fails.</p>
<p>When building ruby 3.2.2 from source, the configure step outputs the irritatingly useless "something wrong with LDFLAGS" error message and fails to build.</p>
<p>The solution was to <code>cd /usr/local; sudo mkdir lib</code> to create the missing lib directory under /usr/local.</p>
<p>It would be nice to remove this dependency from the configure script.</p>
Ruby master - Bug #19761 (Open): AddressSanitizer fails with Thread and Process
https://redmine.ruby-lang.org/issues/19761
2023-07-08T07:26:56Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<p>With AddressSanitizer on macOS, this code crashes.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">system</span><span class="p">(</span><span class="s1">''</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="mi">300_000</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="no">String</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">capacity: </span><span class="mi">1000</span><span class="p">)</span>
<span class="k">end</span>
</code></pre>
<pre><code>==62870==ERROR: AddressSanitizer failed to deallocate 0x8000 (32768) bytes at address 0x62d00000a400
AddressSanitizer: CHECK failed: sanitizer_posix.cpp:61 "(("unable to unmap" && 0)) != (0)" (0x0, 0x0) (tid=857549)
<empty stack>
Assertion Failed: ../debug/vm_core.h:1853:rb_current_execution_context:!expect_ec || ec != NULL
ruby 3.3.0dev (2023-07-08T02:54:37Z tmp 0083edc3a0) [x86_64-darwin22]
-- Crash Report log information --------------------------------------------
See Crash Report log file in one of the following locations:
* ~/Library/Logs/DiagnosticReports
* /Library/Logs/DiagnosticReports
for more details.
Don't forget to include the above Crash Report log file in bug reports.
-- C level backtrace information -------------------------------------------
</code></pre>
Ruby master - Bug #19749 (Open): Confirm correct behaviour when attaching private method with `#d...
https://redmine.ruby-lang.org/issues/19749
2023-06-28T13:40:35Z
itarato (Peter Arato)
<p>This issue is a special case of <a href="https://bugs.ruby-lang.org/issues/19745" class="external">https://bugs.ruby-lang.org/issues/19745</a>:</p>
<p>Should dynamically added private methods via <code>.singleton_class.send(:define_method,...</code> at the top-level be accessible publicly?</p>
<p>See the following example:</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="k">end</span>
<span class="n">foo</span> <span class="o">=</span> <span class="no">Object</span><span class="p">.</span><span class="nf">new</span>
<span class="n">foo</span><span class="p">.</span><span class="nf">singleton_class</span><span class="p">.</span><span class="nf">define_method</span><span class="p">(</span><span class="ss">:bar</span><span class="p">,</span> <span class="nb">method</span><span class="p">(</span><span class="ss">:bar</span><span class="p">))</span>
<span class="n">foo</span><span class="p">.</span><span class="nf">bar</span> <span class="c1"># No error.</span>
</code></pre>
<p>The script above runs fine on latest Ruby 3.3. Is this correct to ignore the fact that the visibility in the caller context is the default top-level private visibility?</p>
<p>This came up during a TruffleRuby investigation (<a href="https://github.com/oracle/truffleruby/issues/3134" class="external">https://github.com/oracle/truffleruby/issues/3134</a>) where the result for the same script is: <code>private method 'bar' called for #<Object:0xc8> (NoMethodError)</code></p>
Ruby master - Bug #19557 (Open): Deadlock on STDOUT(ERR) lock on signal handler
https://redmine.ruby-lang.org/issues/19557
2023-03-29T08:27:05Z
ko1 (Koichi Sasada)
<p>The following Ruby code produces <code>deadlock; recursive locking (ThreadError)</code>.<br>
It means some IO operations (<code>puts</code>, ...) is not used on trap handlers safely.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">trap</span><span class="p">(</span><span class="ss">:USR1</span><span class="p">){</span><span class="nb">puts</span> <span class="s1">'world'</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="kp">loop</span><span class="p">{</span><span class="no">Process</span><span class="p">.</span><span class="nf">kill</span><span class="p">(</span><span class="ss">:USR1</span><span class="p">,</span> <span class="vg">$$</span><span class="p">);</span> <span class="nb">sleep</span> <span class="mf">0.5</span><span class="p">}}</span>
<span class="kp">loop</span><span class="p">{</span><span class="nb">puts</span> <span class="s1">'hello'</span><span class="p">}</span>
</code></pre>
<pre><code>...
hello
hello
hello
hello
hello
../../src/clean/test.rb:2:in `write': deadlock; recursive locking (ThreadError)
from ../../src/clean/test.rb:2:in `puts'
from ../../src/clean/test.rb:2:in `puts'
from ../../src/clean/test.rb:2:in `block in <main>'
from ../../src/clean/test.rb:4:in `write'
from ../../src/clean/test.rb:4:in `puts'
from ../../src/clean/test.rb:4:in `puts'
from ../../src/clean/test.rb:4:in `block in <main>'
from <internal:kernel>:187:in `loop'
from ../../src/clean/test.rb:4:in `<main>'
</code></pre>
<a name="Reason"></a>
<h2 >Reason<a href="#Reason" class="wiki-anchor">¶</a></h2>
<ul>
<li>
<code>puts()</code> calls <code>rb_io_writev()</code>
</li>
<li>it calls <code>IO#write</code>
</li>
<li>it calls <code>io_write_m()</code>
</li>
<li>it calls <code>io_writev()</code>
</li>
<li>it calls <code>io_fwritev()</code>
</li>
<li>it calls <code>io_binwritev()</code>
</li>
<li>it calls <code>rb_mutex_synchronize()</code> with <code>io_binwritev_internal()</code>
<ul>
<li>STDOUT's <code>fptr->write_lock</code> is acquired here</li>
</ul>
</li>
<li>
<code>io_binwritev_internal()</code> calls <code>rb_writev_internal()</code>
</li>
<li>it calls <code>rb_thread_io_blocking_region()</code> with <code>internal_writev_func()</code>
</li>
</ul>
<p>Here, <code>internal_writev_func()</code> can be interrupted by signals and if a trap handler is registered, call the trap handler (written in Ruby, <code>puts 'world'</code> in this case) and call <code>Kernel#puts()</code> and <code>fptr->write_lock</code> is already acquired -> <code>deadlock; recursive locking</code>.</p>
<a name="Ideas"></a>
<h2 >Ideas<a href="#Ideas" class="wiki-anchor">¶</a></h2>
<p>I'm not sure why <code>fptr->write_lock</code> is needed, but if there is no internal consistency issue, we can make <code>fptr->write_lock</code> <code>nil</code> at least for STDOUT/ERR.</p>
<p>Another idea is, calling trap handlers (or other interruptible Ruby code such as finalizers and so on) after releasing the lock. But I'm not sure it is feasible.</p>
Ruby master - Bug #19473 (Open): can't be called from trap context (ThreadError) is too limiting
https://redmine.ruby-lang.org/issues/19473
2023-03-02T12:04:28Z
Eregon (Benoit Daloze)
<p>Simple reproducer:</p>
<pre><code>$ ruby -ve 'm=Mutex.new; trap(:HUP) { m.synchronize { p :OK } }; Process.kill :HUP, Process.pid; sleep 0.1'
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [x86_64-linux]
-e:1:in `synchronize': can't be called from trap context (ThreadError)
from -e:1:in `block in <main>'
from -e:1:in `kill'
from -e:1:in `<main>'
</code></pre>
<p>Expected behavior:</p>
<pre><code>$ ruby -ve 'm=Mutex.new; trap(:HUP) { m.synchronize { p :OK } }; Process.kill :HUP, Process.pid; sleep 0.1'
truffleruby 22.3.1, like ruby 3.0.3, GraalVM CE Native [x86_64-linux]
:OK
$ ruby -ve 'm=Mutex.new; trap(:HUP) { m.synchronize { p :OK } }; Process.kill :HUP, Process.pid; sleep 0.1'
jruby 9.4.0.0 (3.1.0) 2022-11-23 95c0ec159f OpenJDK 64-Bit Server VM 17.0.6+10 on 17.0.6+10 +jit [x86_64-linux]
:OK
</code></pre>
<p>This exception is highly problematic, for instance it breaks <code>Timeout.timeout</code> in <code>trap</code>:<br>
<a href="https://github.com/ruby/timeout/issues/17#issuecomment-1142035939" class="external">https://github.com/ruby/timeout/issues/17#issuecomment-1142035939</a></p>
<p>I suppose this behavior is because <em>sometimes</em> it's problematic to lock a Mutex in trap, e.g., if it's already locked by the main thread/fiber.<br>
But that would otherwise already raise <code>deadlock; recursive locking (ThreadError)</code>, so there is no point to fail early.<br>
And that's just one case, not all, so we should not always raise an exception.</p>
<p>There seems to be no valid reason to prevent <em>all</em> <code>Mutex#synchronize</code> in <code>trap</code>.<br>
After all, if the Mutex for instance is only used in <code>trap</code>, it's well-defined AFAIK.<br>
For instance a given trap handler does not seem executed concurrently:</p>
<pre><code>$ ruby -ve 'trap(:HUP) { puts "in trap\n"+caller.join("\n")+"\n\n"; sleep 0.1 }; pid = Process.pid; Process.wait fork { 20.times { Process.kill :HUP, pid } }; sleep 1'
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [x86_64-linux]
in trap
-e:1:in `wait'
-e:1:in `<main>'
in trap
-e:1:in `wait'
-e:1:in `<main>'
in trap
-e:1:in `wait'
-e:1:in `<main>'
in trap
-e:1:in `wait'
-e:1:in `<main>'
in trap
-e:1:in `wait'
-e:1:in `<main>'
in trap
-e:1:in `wait'
-e:1:in `<main>'
</code></pre>
<p>And if the trap handler using the Mutex is never called while the Mutex is held by the main thread/fiber, there is also no problem.</p>
Ruby master - Bug #19413 (Open): Can't move object when 2 ivars refer to same object
https://redmine.ruby-lang.org/issues/19413
2023-02-04T22:15:59Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">A</span>
<span class="k">def</span> <span class="nf">initialize</span>
<span class="vi">@a</span> <span class="o">=</span> <span class="no">Object</span><span class="p">.</span><span class="nf">new</span>
<span class="vi">@b</span> <span class="o">=</span> <span class="vi">@a</span>
<span class="k">end</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="o">|</span><span class="n">err</span><span class="o">|</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">receive</span>
<span class="nb">p</span> <span class="n">obj</span>
<span class="k">end</span>
<span class="n">r</span><span class="p">.</span><span class="nf">send</span><span class="p">(</span><span class="no">A</span><span class="p">.</span><span class="nf">new</span><span class="p">,</span> <span class="ss">move: </span><span class="kp">true</span><span class="p">)</span> <span class="c1"># Allocator undefined for Ractor::MovedObject</span>
<span class="n">r</span><span class="p">.</span><span class="nf">take</span>
</code></pre>
<p>To fix it we could have a hash of old to new objects during traversal/replacement and use the same new object over again if necessary.</p>
Ruby master - Bug #19410 (Assigned): If move from ractor fails with error, some objects are left ...
https://redmine.ruby-lang.org/issues/19410
2023-02-03T20:02:50Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<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="k">do</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">receive</span>
<span class="k">end</span>
<span class="n">a</span> <span class="o">=</span> <span class="no">Object</span><span class="p">.</span><span class="nf">new</span>
<span class="n">obj</span> <span class="o">=</span> <span class="p">[</span><span class="n">a</span><span class="p">,</span> <span class="nb">proc</span> <span class="p">{</span> <span class="p">}]</span>
<span class="k">begin</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="k">rescue</span> <span class="o">=></span> <span class="n">e</span>
<span class="nb">puts</span> <span class="s2">"couldn't move"</span>
<span class="k">end</span>
<span class="nb">p</span> <span class="n">a</span> <span class="c1"># a is moved, this errors out. But it's not really moved because the other ractor can't access it. It's in limbo :)</span>
<span class="n">r</span> <span class="o"><<</span> <span class="ss">:end</span>
<span class="n">r</span><span class="p">.</span><span class="nf">take</span>
</code></pre>
<p>This might be tricky to fix, as it requires some sort of commit function for moving objects after every object is checked for ability to move.</p>
Ruby master - Bug #19408 (Assigned): Object no longer frozen after moved from a ractor
https://redmine.ruby-lang.org/issues/19408
2023-02-03T18:55:10Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<p>I think frozen objects should still be frozen after a move.</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="k">do</span>
<span class="n">obj</span> <span class="o">=</span> <span class="n">receive</span>
<span class="nb">p</span> <span class="n">obj</span><span class="p">.</span><span class="nf">frozen?</span> <span class="c1"># should be true but is false</span>
<span class="nb">p</span> <span class="n">obj</span>
<span class="k">end</span>
<span class="n">obj</span> <span class="o">=</span> <span class="p">[</span><span class="no">Object</span><span class="p">.</span><span class="nf">new</span><span class="p">].</span><span class="nf">freeze</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>
Ruby master - Bug #19407 (Assigned): 2 threads taking from current ractor will hang forever
https://redmine.ruby-lang.org/issues/19407
2023-02-03T18:43:11Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<p>In the current implementation of Ractors, it's possible to <code>take</code> from the current ractor. This could be useful<br>
when co-ordinating threads:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">t</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="n">obj</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">current</span><span class="p">.</span><span class="nf">take</span>
<span class="nb">p</span> <span class="n">obj</span> <span class="c1"># do some work with obj</span>
<span class="k">end</span>
<span class="n">t0</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="n">obj</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">current</span><span class="p">.</span><span class="nf">take</span>
<span class="nb">p</span> <span class="n">obj</span> <span class="c1"># do some work with obj</span>
<span class="k">end</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">yield</span> <span class="ss">:go</span>
</code></pre>
<p>However it hangs forever:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">t</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="n">obj</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">current</span><span class="p">.</span><span class="nf">take</span>
<span class="nb">p</span> <span class="n">obj</span>
<span class="k">end</span>
<span class="n">t0</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="n">obj</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">current</span><span class="p">.</span><span class="nf">take</span>
<span class="nb">p</span> <span class="n">obj</span>
<span class="k">end</span>
<span class="nb">sleep</span> <span class="mf">0.5</span>
</code></pre>
<p>Should "self-take" be disabled, or was it designed to allow it but this is just a bug?</p>
Ruby master - Bug #19384 (Open): ASCII 128..154 characters in IO.popen or %x output do not reflec...
https://redmine.ruby-lang.org/issues/19384
2023-01-26T21:17:30Z
stringsn88keys (Thomas Powell)
<p>Operating systems: Windows 10 and Windows Server 2022 (likely all recent versions of Windows)<br>
Ruby: confirmed on 2.7.7 through 3.1.3</p>
<p>On macOS and Linux I can create a file named "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ" and then do a directory listing via IO.popen or %x and find the file name in the output string.</p>
<p>In Windows, while the encoding is reported as #<a href="Encoding:UTF-8" class="external">Encoding:UTF-8</a>, I have to .force_encoding on the output to be able to find the string in the output:</p>
<a name="xdir-tmp"></a>
<h2 >%x|dir tmp|<a href="#xdir-tmp" class="wiki-anchor">¶</a></h2>
<p>output encoding: #<a href="Encoding:UTF-8" class="external">Encoding:UTF-8</a><br>
Output can be made to match by forcing the following encodings:<br>
IBM437<br>
CP850<br>
IBM865</p>
<a name="IOpopendir-tmpread"></a>
<h2 >IO.popen(dir tmp).read<a href="#IOpopendir-tmpread" class="wiki-anchor">¶</a></h2>
<p>output encoding: #<a href="Encoding:UTF-8" class="external">Encoding:UTF-8</a><br>
Output can be made to match by forcing the following encodings:<br>
IBM437<br>
CP850<br>
IBM865</p>
<p>But on macOS or Linux:<br>
❯ ruby directory_test.rb</p>
<a name="xls-tmp"></a>
<h2 >%x|ls tmp|<a href="#xls-tmp" class="wiki-anchor">¶</a></h2>
<p>output encoding: #<a href="Encoding:UTF-8" class="external">Encoding:UTF-8</a><br>
output matches without forcing encoding<br>
Output can be made to match by forcing the following encodings:<br>
UTF-8<br>
UTF8-MAC<br>
CESU-8<br>
UTF8-DoCoMo<br>
UTF8-KDDI<br>
UTF8-SoftBank</p>
<a name="IOpopenls-tmpread"></a>
<h2 >IO.popen(ls tmp).read<a href="#IOpopenls-tmpread" class="wiki-anchor">¶</a></h2>
<p>output encoding: #<a href="Encoding:UTF-8" class="external">Encoding:UTF-8</a><br>
output matches without forcing encoding<br>
Output can be made to match by forcing the following encodings:<br>
UTF-8<br>
UTF8-MAC<br>
CESU-8<br>
UTF8-DoCoMo<br>
UTF8-KDDI<br>
UTF8-SoftBank</p>
<p>Note:<br>
The example is contrived because the actual IO.popen output is from a customer system with umlaut characters. However, I have found creating a filename with these characters will adequately reproduce the issue.<br>
Also, I'm only using ASCII/IBM437 as an encoding to create a contiguous set of characters, "ÇüéâäàåçêëèïîìÄÅÉæÆôöòûùÿÖÜ" as a contrived example.</p>
Ruby master - Bug #19383 (Assigned): Time.now.zone encoding for German display language in Window...
https://redmine.ruby-lang.org/issues/19383
2023-01-26T20:52:24Z
stringsn88keys (Thomas Powell)
<p>OS:<br>
Verified on Windows 10 and Windows Server 2022 and Ruby 2.7.7 through 3.1.3</p>
<p>Display language:<br>
Verified on German, but may impact other languages in which Time.now.zone returns characters that aren't [A-Za-z].</p>
<p>Time zone:<br>
CET (UTC +01:00) Amsterdam, Berlin, ...</p>
<p>Time.now.zone # => "Mitteleuro\xE3ische Zeit"<br>
Time.now.zone.encoding # => #<a href="Encoding:IBM437" class="external">Encoding:IBM437</a><br>
puts Time.now.zone # => "Mitteleurop∑ische Zeit" (should be "Mitteleuropäische Zeit")<br>
Time.now.zone.encode(Encoding::UTF_8) # => "Mitteleurop∑ische Zeit"</p>
<p>Doing a force_encoding on all encodings in Encoding.list reveals that ISO-8859-(1..16) and Windows-125(0,2,4,7) work to coerce the ä out of the time zone string:<br>
Time.now.zone.force_encoding(Encoding::WINDOWS_1252) # => "Mitteleuro\xE3ische Zeit"<br>
... but ...<br>
Time.now.zone.force_encoding(Encoding::WINDOWS_1252).encode(Encoding::UTF_8) #=> "Mitteleuropäische Zeit"</p>
<p>Related issue: This improper encoding/rendering caused Ohai's JSON output to be unparseable. Workaround was forcing to Windows-1252.<br>
<a href="https://github.com/chef/ohai/pull/1781" class="external">https://github.com/chef/ohai/pull/1781</a></p>
Ruby master - Bug #19378 (Assigned): Windows: Use less syscalls for faster require of big gems
https://redmine.ruby-lang.org/issues/19378
2023-01-26T07:02:23Z
aidog (Andi Idogawa)
andi@idogawa.com
<p>Hello 🙂</p>
<a name="Problem"></a>
<h2 >Problem<a href="#Problem" class="wiki-anchor">¶</a></h2>
<p>require is slow on windows for big gems. (example: require 'gtk3'=> 3 seconds+). This is a problem for people who want to make cross platform GUI apps with ruby.</p>
<a name="Possible-Reason"></a>
<h2 >Possible Reason<a href="#Possible-Reason" class="wiki-anchor">¶</a></h2>
<p>As touched on in <a href="https://bugs.ruby-lang.org/issues/15797" class="external">#15797</a> it seems like require uses realpath, which is emulated on windows. It checks every parent directory. The same syscalls run many times.</p>
<a name="Testfile"></a>
<h2 >Testfile<a href="#Testfile" class="wiki-anchor">¶</a></h2>
<p>C:\tmp\speedtest\testrequire.rb:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="n">__dir__</span> <span class="o">+</span> <span class="s2">"/helloworld1.rb"</span>
<span class="nb">require</span> <span class="n">__dir__</span> <span class="o">+</span> <span class="s2">"/helloworld2.rb"</span>
</code></pre>
<pre><code class="shell syntaxhl" data-language="shell">ruby <span class="nt">--disable-gems</span> C:<span class="se">\t</span>mp<span class="se">\s</span>peedtest<span class="se">\t</span>estrequire.rb
</code></pre>
<a name="Syscalls-per-FileDirectory"></a>
<h3 >Syscalls per File/Directory:<a href="#Syscalls-per-FileDirectory" class="wiki-anchor">¶</a></h3>
<ol>
<li>CreateFile</li>
<li>QueryInformationVolume</li>
<li>QueryIdInformation</li>
<li>QueryAllInformationFile</li>
<li>QueryNameInformationFile</li>
<li>QueryNameInformationFile</li>
<li>QueryNormalizedNameInformationFile</li>
<li>CloseFile</li>
</ol>
<a name="FilesDirectories-checked"></a>
<h3 >Files/Directories checked<a href="#FilesDirectories-checked" class="wiki-anchor">¶</a></h3>
<ol>
<li>C:\tmp</li>
<li>C:\tmp\speedtest</li>
<li>C:\tmp\speedtest\helloworld1.rb</li>
<li>C:\tmp</li>
<li>C:\tmp\speedtest</li>
<li>C:\tmp\speedtest\helloworld2.rb</li>
</ol>
<p>For two required files Ruby had to do 8*6 = <strong>48</strong> syscalls.<br>
The syscalls orginate from rb_w32_reparse_symlink_p / lstat</p>
<p>Rubygems live in subfolders with 9+ parts: "C:\Ruby32-x64\lib\ruby\gems\3.2.0\gems\glib2-4.0.8\lib\glib2\variant.rb"<br>
Each file takes 8 * 9 = <strong>72</strong>+ calls. For variant.rb it is <strong>80</strong> calls.<br>
The result for the syscalls don't change in such a short time, so it should be possible to cache it.</p>
<p>With require_relative it's twice as many calls.</p>
<a name="Other-testcases"></a>
<h2 >Other testcases<a href="#Other-testcases" class="wiki-anchor">¶</a></h2>
<p>Same result:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">File</span><span class="p">.</span><span class="nf">realpath</span> <span class="n">__dir__</span> <span class="o">+</span> <span class="s2">"/helloworld1.rb"</span>
<span class="no">File</span><span class="p">.</span><span class="nf">realpath</span> <span class="n">__dir__</span> <span class="o">+</span> <span class="s2">"/helloworld2.rb"</span>
</code></pre>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">File</span><span class="p">.</span><span class="nf">stat</span> <span class="n">__dir__</span> <span class="o">+</span> <span class="s2">"/helloworld1.rb"</span>
<span class="no">File</span><span class="p">.</span><span class="nf">stat</span> <span class="n">__dir__</span> <span class="o">+</span> <span class="s2">"/helloworld2.rb"</span>
</code></pre>
<p>It does not happen in $LOAD_PATH.resolve_feature_path(<strong>dir</strong> + "/helloworld1.rb")</p>
<a name="Request"></a>
<h2 >Request<a href="#Request" class="wiki-anchor">¶</a></h2>
<p>Would it be possible to cache the stat calls when using require?<br>
I tried to implement a cache inside the ruby source code, but failed.<br>
If not, is there now a way to combine ruby files into one?</p>
<p>I previously talked about require here: <a href="https://bugs.ruby-lang.org/issues/19325#note-11" class="external">YJIT: Windows support lacking.</a></p>
<a name="How-to-reproduce"></a>
<h2 >How to reproduce<a href="#How-to-reproduce" class="wiki-anchor">¶</a></h2>
<p>Ruby versions: At least 3.0+, most likely older ones too.<br>
Tested using Ruby Installer 3.1 and 3.2.<br>
<a href="https://learn.microsoft.com/en-us/sysinternals/downloads/procmon" class="external">Procmon Software by Sysinternals</a></p>
Ruby master - Bug #19374 (Assigned): Issue with Ractor.make_shareable with curried procs
https://redmine.ruby-lang.org/issues/19374
2023-01-24T12:40:33Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<p>This works, but shouldn't:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Worker</span>
<span class="k">def</span> <span class="nf">start</span><span class="p">(</span><span class="o">&</span><span class="n">blk</span><span class="p">)</span>
<span class="n">blk</span> <span class="o">=</span> <span class="n">blk</span><span class="p">.</span><span class="nf">curry</span> <span class="c1"># bug in ruby allows sharing of non-shareable proc</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">make_shareable</span><span class="p">(</span><span class="n">blk</span><span class="p">)</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="p">(</span><span class="n">blk</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">b</span><span class="o">|</span>
<span class="n">main</span> <span class="o">=</span> <span class="n">b</span><span class="p">.</span><span class="nf">call</span>
<span class="nb">p</span> <span class="s2">"from ractor: </span><span class="si">#{</span><span class="n">main</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">work</span>
<span class="vi">@ractor</span><span class="p">.</span><span class="nf">take</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">worker</span> <span class="o">=</span> <span class="no">Worker</span><span class="p">.</span><span class="nf">new</span>
<span class="n">a</span> <span class="o">=</span> <span class="nb">self</span> <span class="c1"># unshareable main object</span>
<span class="nb">p</span> <span class="s2">"from main: </span><span class="si">#{</span><span class="n">a</span><span class="si">}</span><span class="s2">"</span>
<span class="n">worker</span><span class="p">.</span><span class="nf">start</span> <span class="p">{</span> <span class="n">a</span> <span class="p">}</span>
<span class="n">worker</span><span class="p">.</span><span class="nf">work</span>
</code></pre>
<p>The curried proc has a reference to the original proc and it's not checked for shareability.</p>
Ruby master - Bug #19372 (Assigned): Proc objects are not traversed for shareable check during Ra...
https://redmine.ruby-lang.org/issues/19372
2023-01-23T19:23:33Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Proc</span>
<span class="nb">attr_accessor</span> <span class="ss">:obj1</span>
<span class="k">def</span> <span class="nf">initialize</span>
<span class="vi">@obj1</span> <span class="o">=</span> <span class="no">Object</span><span class="p">.</span><span class="nf">new</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="nb">p</span> <span class="o">=</span> <span class="kp">true</span><span class="p">.</span><span class="nf">instance_eval</span> <span class="p">{</span> <span class="no">Proc</span><span class="p">.</span><span class="nf">new</span> <span class="p">{</span> <span class="nb">puts</span> <span class="s2">"hi"</span> <span class="p">}</span> <span class="p">}</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">make_shareable</span><span class="p">(</span><span class="nb">p</span><span class="p">)</span>
<span class="nb">p</span> <span class="s2">"Obj1 frozen?"</span><span class="p">,</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">shareable?</span><span class="p">(</span><span class="nb">p</span><span class="p">.</span><span class="nf">obj1</span><span class="p">)</span>
<span class="no">P</span> <span class="o">=</span> <span class="nb">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="k">do</span>
<span class="n">pp</span> <span class="o">=</span> <span class="no">P</span>
<span class="nb">p</span> <span class="n">pp</span><span class="p">.</span><span class="nf">obj1</span> <span class="c1"># gives error in debug builds (rb_ractor_confirm_belonging rb_bug() call)</span>
<span class="k">end</span>
</code></pre>
Ruby master - Bug #19369 (Assigned): Small corner-case issue that breaks Ractor isolation: change...
https://redmine.ruby-lang.org/issues/19369
2023-01-23T01:28:22Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<p>I was looking into how objects are traversed for deep cloning and I came up with a way to break it. I don't think it'll ever happen in real life so it's not really an issue, just<br>
an interesting case. Run with warnings disabled.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">obj</span> <span class="o">=</span> <span class="no">Object</span><span class="p">.</span><span class="nf">new</span>
<span class="nb">p</span> <span class="s2">"unshareable obj:"</span><span class="p">,</span> <span class="n">obj</span>
<span class="no">UNSHAREABLE</span> <span class="o">=</span> <span class="n">obj</span>
<span class="no">GO</span> <span class="o">=</span> <span class="kp">false</span>
<span class="no">SET</span> <span class="o">=</span> <span class="kp">false</span>
<span class="k">class</span> <span class="nc">Object</span>
<span class="nb">attr_accessor</span> <span class="ss">:unshareable</span>
<span class="k">def</span> <span class="nf">initialize_clone</span><span class="p">(</span><span class="n">orig</span><span class="p">)</span>
<span class="nb">puts</span> <span class="s2">"Clone called for </span><span class="si">#{</span><span class="n">orig</span><span class="p">.</span><span class="nf">inspect</span><span class="si">}</span><span class="s2">, self = </span><span class="si">#{</span><span class="nb">self</span><span class="p">.</span><span class="nf">inspect</span><span class="si">}</span><span class="s2">"</span>
<span class="n">_self</span> <span class="o">=</span> <span class="nb">self</span>
<span class="k">if</span> <span class="n">orig</span> <span class="o">==</span> <span class="no">UNSHAREABLE</span>
<span class="n">t</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="nb">puts</span> <span class="s2">"In thread"</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">pass</span> <span class="k">until</span> <span class="no">GO</span>
<span class="nb">puts</span> <span class="s2">"Setting unshareable!"</span>
<span class="c1"># this must be done in separate thread to bypass object traversal deep-cloning</span>
<span class="n">_self</span><span class="p">.</span><span class="nf">unshareable</span> <span class="o">=</span> <span class="no">UNSHAREABLE</span>
<span class="no">Object</span><span class="p">.</span><span class="nf">const_set</span><span class="p">(</span><span class="ss">:SET</span><span class="p">,</span> <span class="kp">true</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">super</span><span class="p">(</span><span class="n">orig</span><span class="p">)</span>
<span class="k">end</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="p">(</span><span class="n">obj</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">o</span><span class="o">|</span>
<span class="nb">puts</span> <span class="s2">"from r</span><span class="si">#{</span><span class="no">Ractor</span><span class="p">.</span><span class="nf">current</span><span class="p">.</span><span class="nf">object_id</span><span class="si">}</span><span class="s2"> obj </span><span class="si">#{</span><span class="n">o</span><span class="p">.</span><span class="nf">inspect</span><span class="si">}</span><span class="s2">"</span>
<span class="no">GO</span> <span class="o">=</span> <span class="kp">true</span>
<span class="kp">loop</span> <span class="k">until</span> <span class="no">SET</span>
<span class="nb">p</span> <span class="s2">"from ractor, got unshareable:"</span><span class="p">,</span> <span class="n">o</span><span class="p">.</span><span class="nf">unshareable</span>
<span class="k">end</span>
<span class="n">r</span><span class="p">.</span><span class="nf">take</span>
</code></pre>
Ruby master - Bug #19368 (Assigned): Small issue with isolated procs and eval
https://redmine.ruby-lang.org/issues/19368
2023-01-22T17:40:38Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<pre><code>a = Object.new # non-shareable
prok = Ractor.current.instance_eval do
Proc.new do
eval('a')
end
end
prok.call # this should work, we're in the main ractor and the proc is not isolated
Ractor.make_shareable(prok) # this doesn't currently work, but I think it should. It gives Ractor::IsolationError. See below for reasoning on why I think it should work.
# A flag seems to be set on the proc after it's run and accesses outers...
</code></pre>
<p>Because this work fine:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">a</span> <span class="o">=</span> <span class="no">Object</span><span class="p">.</span><span class="nf">new</span> <span class="c1"># non-shareable</span>
<span class="n">prok</span> <span class="o">=</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">current</span><span class="p">.</span><span class="nf">instance_eval</span> <span class="k">do</span>
<span class="no">Proc</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="nb">eval</span><span class="p">(</span><span class="s1">'a'</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="no">Ractor</span><span class="p">.</span><span class="nf">make_shareable</span><span class="p">(</span><span class="n">prok</span><span class="p">)</span> <span class="c1"># this works, and it's okay because we get a different error when actually running the shareable proc inside a ractor that accesses outers through eval.</span>
</code></pre>
Ruby master - Bug #19367 (Assigned): Issue with ractor local storage API
https://redmine.ruby-lang.org/issues/19367
2023-01-22T14:46:45Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<p>In a non-main ractor, you can do Ractor.main[:key] = 'val', but it only affects storage for Ractor.current, not Ractor.main (which is good!).<br>
I think it should throw a RuntimeError if trying to get/set ractor-local storage for non-current ractor.</p>
<p>Patch coming.</p>
Ruby master - Bug #19364 (Assigned): Issue with tracepoint enable/disable across ractors
https://redmine.ruby-lang.org/issues/19364
2023-01-21T22:54:58Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<p>This sometimes segfaults:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">test_enable_disable_in_multiple_ractors_with_target</span>
<span class="n">rs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="mi">100</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="c1"># setup new iseqs</span>
<span class="no">Kernel</span><span class="p">.</span><span class="nf">define_method</span> <span class="ss">:"my_method_to_change_for_tracing_</span><span class="si">#{</span><span class="n">i</span><span class="si">}</span><span class="ss">"</span> <span class="k">do</span>
<span class="kp">true</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="mi">100</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">rs</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">j</span><span class="o">|</span>
<span class="n">meth</span> <span class="o">=</span> <span class="ss">:"my_method_to_change_for_tracing_</span><span class="si">#{</span><span class="n">j</span><span class="si">}</span><span class="ss">"</span>
<span class="n">tp</span> <span class="o">=</span> <span class="no">TracePoint</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">:line</span><span class="p">)</span> <span class="p">{</span> <span class="p">}</span> <span class="c1"># local to ractor</span>
<span class="mi">100</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="n">tp</span><span class="p">.</span><span class="nf">enable</span><span class="p">(</span><span class="ss">target: </span><span class="nb">method</span><span class="p">(</span><span class="n">meth</span><span class="p">))</span> <span class="c1"># change iseq internals of given method, should be done with lock</span>
<span class="n">tp</span><span class="p">.</span><span class="nf">disable</span> <span class="c1"># disable hooks should hold lock too, changes method definition internals</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">rs</span><span class="p">.</span><span class="nf">each</span><span class="p">(</span><span class="o">&</span><span class="ss">:take</span><span class="p">)</span> <span class="c1"># shouldn't raise</span>
<span class="k">end</span>
<span class="n">test_enable_disable_in_multiple_ractors_with_target</span><span class="p">()</span>
</code></pre>
<p>Changing iseq internals is done without the VM lock. This is true in Tracepoint#enable and Tracepoint#disable methods.<br>
I have a patch coming.</p>
Ruby master - Bug #19338 (Assigned): Ruby hangs when ouputting warnings inside ractor with VM loc...
https://redmine.ruby-lang.org/issues/19338
2023-01-14T18:15:37Z
luke-gru (Luke Gruber)
luke.gru@gmail.com
<p>This code causes Ruby to hang:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">rs</span> <span class="o">=</span> <span class="p">[]</span>
<span class="mi">2</span><span class="p">.</span><span class="nf">times</span> <span class="k">do</span>
<span class="n">rs</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">MYCONSTANT</span> <span class="o">=</span> <span class="mi">2</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">rs</span><span class="p">.</span><span class="nf">each</span><span class="p">(</span><span class="o">&</span><span class="ss">:take</span><span class="p">)</span>
</code></pre>
<p>There is a problem when the warning is being outputted with multiple ractors. A thread is calling RB_VM_LOCK() while holding the VM lock in ractor.c (ractor_check_blocking())</p>
<p>If the code is changed to RB_VM_LOCK_ENTER() and RB_VM_LOCK_LEAVE() then it fixes it, but I don't know if there's a better way.</p>
<p>Thanks!</p>
Ruby master - Bug #19297 (Open): Don't download content from internet to execute Ruby test suite
https://redmine.ruby-lang.org/issues/19297
2023-01-02T13:41:57Z
vo.x (Vit Ondruch)
v.ondruch@tiscali.cz
<p>Trying to build Ruby 3.2.0 for Fedora and execute its test suite via <code>make check</code> as we always did <a href="https://src.fedoraproject.org/rpms/ruby/blob/631163e3b8a51ed610528181aabe0da008049bb6/f/ruby.spec#_1008" class="external">1</a>, the test suite suddenly fails (while it was working with <a class="changeset" title="darwin: resolve rb symbols from ext by `-flat_namespace` to see libruby transitively This repair..." href="https://redmine.ruby-lang.org/projects/ruby-master/repository/git/revisions/c5eefb7f37db2865891298dd1a1e60dff09560ad">git|c5eefb7f37</a>):</p>
<pre><code>... snip ...
C-API Util function ruby_strtod
- converts a string to a double and returns the remaining string
- returns 0 and the full string if there's no numerical value
Finished in 45.737677 seconds
3827 files, 31635 examples, 177877 expectations, 0 failures, 0 errors, 0 tagged
./miniruby -I/builddir/build/BUILD/ruby-3.2.0/lib -I. -I.ext/common /builddir/build/BUILD/ruby-3.2.0/tool/runruby.rb --extout=.ext -- --disable-gems -C "/builddir/build/BUILD/ruby-3.2.0" bin/gem install --no-document \
--install-dir .bundle --conservative "bundler" "rake" "rspec:~> 3" #"ruby-prof"
ERROR: Could not find a valid gem 'bundler' (>= 0), here is why:
Unable to download data from https://rubygems.org/ - SocketError: Failed to open TCP connection to rubygems.org:443 (getaddrinfo: Temporary failure in name resolution) (https://rubygems.org/specs.4.8.gz)
ERROR: Could not find a valid gem 'rspec' (~> 3), here is why:
Unable to download data from https://rubygems.org/ - SocketError: Failed to open TCP connection to rubygems.org:443 (getaddrinfo: Temporary failure in name resolution) (https://rubygems.org/specs.4.8.gz)
make: Leaving directory '/builddir/build/BUILD/ruby-3.2.0/redhat-linux-build'
make: *** [uncommon.mk:1464: yes-test-syntax-suggest-prepare] Error 2
</code></pre>
<p>This is obviously due to the test suite trying to download <code>rspec</code> from the internet, while Fedora builders does not have internet access (and won't ever have for security reasons). If I am not mistaken, this is caused by <a class="changeset" title="Test syntax_suggest by `make check`" href="https://redmine.ruby-lang.org/projects/ruby-master/repository/git/revisions/cae53842735237ccf71a13873fd0d1ae7f165582">git|cae53842735237ccf71a13873fd0d1ae7f165582</a>. Now</p>
<ol>
<li>Can this be fixed?</li>
<li>Can the tarball be always self contained?</li>
</ol>
Ruby master - Bug #19044 (Open): Attempting to compile a static ruby 3.1 fails with MinGW
https://redmine.ruby-lang.org/issues/19044
2022-10-09T12:24:03Z
maxirmx (Maxim Samsonov)
<ol>
<li>
<p>I use the code from <a href="https://github.com/ruby/ruby/tree/ruby_3_1" class="external">https://github.com/ruby/ruby/tree/ruby_3_1</a> and GHA workflow at <a href="https://github.com/ruby/ruby/blob/ruby_3_1/.github/workflows/mingw.yml" class="external">https://github.com/ruby/ruby/blob/ruby_3_1/.github/workflows/mingw.yml</a> as a baseline</p>
</li>
<li>
<p>I alter configure command in the workflow from</p>
</li>
</ol>
<pre><code>- name: configure
run: >
../src/configure --disable-install-doc --prefix=/.
--build=$CHOST --host=$CHOST --target=$CHOST
</code></pre>
<pre><code> to
</code></pre>
<pre><code>- name: configure
run: >
../src/configure --disable-install-doc --with-static-linked-ext --disable-shared --without-gmp -- prefix=/.
--build=$CHOST --host=$CHOST --target=$CHOST
</code></pre>
<p>and uncomment <code>option nodynamic</code> in <code>ext/Setup</code></p>
<ol start="3">
<li>The first failure I observe is:</li>
</ol>
<pre><code>C:\msys64\ucrt64\bin\dllwrap.exe: WARNING: C:\msys64\ucrt64\bin\dllwrap.exe is deprecated, use gcc -shared or ld -shared instead
C:\msys64\ucrt64\bin\dllwrap.exe: no export definition file provided.
Creating one, but that may not be what you want
x86_64-w64-mingw32-cc: error: unrecognized command-line option '-mno-cygwin'; did you mean '-mno-clwb'?
C:\msys64\ucrt64\bin\dllwrap.exe: x86_64-w64-mingw32-cc exited with status 1
make: *** [GNUmakefile:73: ruby.exp] Error 1
</code></pre>
<pre><code> In order to resolve it I comment out ``` DLLWRAP += -mno-cygwin``` in ```cygwin/GNUmakefile.in```
</code></pre>
<ol start="4">
<li>Then I get the second failure:</li>
</ol>
<pre><code>creating ruby.exp
C:\msys64\ucrt64\bin\dllwrap.exe: WARNING: C:\msys64\ucrt64\bin\dllwrap.exe is deprecated, use gcc -shared or ld -shared instead
C:\msys64\ucrt64\bin\dllwrap.exe: no export definition file provided.
Creating one, but that may not be what you want
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: warning: cannot find entry symbol _DllMainCRTStartup@12; defaulting to 0000000063981000
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: warning: cannot find entry symbol _DllMainCRTStartup@12; defaulting to 0000000063981000
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: warning: cannot find entry symbol _DllMainCRTStartup@12; defaulting to 0000000063981000
C:/msys64/ucrt64/bin/../lib/gcc/x86_64-w64-mingw32/12.2.0/../../../../x86_64-w64-mingw32/bin/ld.exe: ruby.o:ruby.c:(.text+0x54f5): undefined reference to `Init_enc'
collect2.exe: error: ld returned 1 exit status
make: *** [GNUmakefile:74: ruby.exp] Error 1
</code></pre>
<p>I believe that when <code>GNUMakefile</code> is generated <code>disable-shared</code> flag is ignored silently</p>
Ruby master - Bug #19039 (Open): Closing an IO being select'ed in another thread does not resume ...
https://redmine.ruby-lang.org/issues/19039
2022-10-06T05:30:13Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<p>Is this intentional?</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r1</span><span class="p">,</span> <span class="n">w1</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</span>
<span class="n">r2</span><span class="p">,</span> <span class="n">w2</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="nb">select</span><span class="p">([</span><span class="n">r1</span><span class="p">,</span> <span class="n">r2</span><span class="p">])</span>
<span class="nb">p</span> <span class="ss">:ok</span>
<span class="k">end</span>
<span class="nb">sleep</span> <span class="mi">1</span>
<span class="nb">p</span> <span class="n">r1</span><span class="p">.</span><span class="nf">close</span>
<span class="c1"># expected: closing r1 resumes select([r1, r2]) in the thread</span>
<span class="c1"># actual: select([r1, r2]) continues to wait</span>
<span class="nb">sleep</span> <span class="mi">1</span>
<span class="n">w2</span> <span class="o"><<</span> <span class="s2">"foo"</span>
<span class="c1"># Making r2 readable resumes select([r1, r2])</span>
<span class="c1"># And it raises an exception: closed stream (IOError)</span>
<span class="nb">sleep</span> <span class="mi">1</span>
</code></pre>
<p>Incidentally, IO#read is resumed by closing the IO.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r1</span><span class="p">,</span> <span class="n">w1</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</span>
<span class="no">Thread</span><span class="p">.</span><span class="nf">new</span> <span class="k">do</span>
<span class="n">r1</span><span class="p">.</span><span class="nf">read</span>
<span class="nb">p</span> <span class="ss">:ok</span>
<span class="k">end</span>
<span class="nb">sleep</span> <span class="mi">1</span>
<span class="nb">p</span> <span class="n">r1</span><span class="p">.</span><span class="nf">close</span>
<span class="c1"># Closing r1 resumes r1.read in the thread</span>
<span class="c1"># And it raises: stream closed in another thread (IOError)</span>
<span class="nb">sleep</span> <span class="mi">1</span>
</code></pre>
Ruby master - Bug #18940 (Assigned): Ruby Ractor fails with IOError when handling higher concurrency
https://redmine.ruby-lang.org/issues/18940
2022-07-26T18:33:12Z
brodock (Gabriel Mazetto)
brodock@gmail.com
<p>Reproduction server:</p>
<pre><code>require 'socket'
# Set based on CPU count
CONCURRENCY = 8
server = TCPServer.new(8080)
workers = CONCURRENCY.times.map do
Ractor.new do
loop do
# receive TCPSocket
session = Ractor.recv
request = session.gets
puts request
session.print "HTTP/1.1 200\r\n"
session.print "Content-Type: text/html\r\n"
session.print "\r\n"
session.print "Hello world! Current time is #{Time.now}"
session.close
end
end
end
loop do
conn, _ = server.accept
# pass TCPSocket to one of the workers
workers.sample.send(conn, move: true)
end
</code></pre>
<p>run apache benchmark against code above:</p>
<pre><code>ab -n 20000 -c 20 http://localhost:8080/
</code></pre>
<p>or run using hey (<a href="https://github.com/rakyll/hey" class="external">https://github.com/rakyll/hey</a>):</p>
<pre><code>hey -n 20000 -c 20 http://localhost:8080/
</code></pre>
<p>you should see something like this on the benchmark tool side:</p>
<pre><code>Summary:
Total: 32.9538 secs
Slowest: 2.6317 secs
Fastest: 0.0002 secs
Average: 0.0331 secs
Requests/sec: 606.9098
Response time histogram:
0.000 [1] |
0.263 [16968] |■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
0.527 [1740] |■■■■
0.790 [0] |
1.053 [0] |
1.316 [0] |
1.579 [0] |
1.842 [0] |
2.105 [20] |
2.369 [0] |
2.632 [6] |
Latency distribution:
10% in 0.0008 secs
25% in 0.0010 secs
50% in 0.0012 secs
75% in 0.0016 secs
90% in 0.0075 secs
95% in 0.3101 secs
99% in 0.3175 secs
Details (average, fastest, slowest):
DNS+dialup: 0.0322 secs, 0.0002 secs, 2.6317 secs
DNS-lookup: 0.0006 secs, 0.0000 secs, 0.0127 secs
req write: 0.0001 secs, 0.0000 secs, 0.0095 secs
resp wait: 0.0007 secs, 0.0000 secs, 0.0140 secs
resp read: 0.0001 secs, 0.0000 secs, 0.0088 secs
Status code distribution:
[200] 18735 responses
Error distribution:
[1231] Get "http://localhost:8080/": dial tcp [::1]:8080: connect: connection refused
[16] Get "http://localhost:8080/": dial tcp [::1]:8080: connect: connection reset by peer
[1] Get "http://localhost:8080/": net/http: HTTP/1.x transport connection broken: unexpected EOF
[1] Get "http://localhost:8080/": read tcp 127.0.0.1:57078->127.0.0.1:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57054->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57058->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57059->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57062->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57067->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57068->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57069->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57070->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57071->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57072->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57075->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57076->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57087->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57088->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57089->[::1]:8080: read: connection reset by peer
[1] Get "http://localhost:8080/": read tcp [::1]:57090->[::1]:8080: read: connection reset by peer
</code></pre>
<p>and this on the ruby process:</p>
<pre><code>...
GET / HTTP/1.1
GET / HTTP/1.1
#<Thread:0x0000000100fbf6e8 run> terminated with exception (report_on_exception is true):
ractor.rb:21:in `write': GET / HTTP/1.1
uninitialized stream (IOError)
from ractor.rb:21:in `print'
from ractor.rb:21:in `block (3 levels) in <main>'
from ractor.rb:11:in `loop'
from ractor.rb:11:in `block (2 levels) in <main>'
GET / HTTP/1.1
GET / HTTP/1.1
</code></pre>
Ruby master - Bug #18923 (Open): Dir.glob Errno::ENAMETOOLONG - Caused by outdated logic in open_...
https://redmine.ruby-lang.org/issues/18923
2022-07-17T20:33:45Z
test35965@gmail.com (Alexander Riccio)
<p>This bug - as do most of my bug reports - started out while dealing with something productive and completely unrelated :)</p>
<p>In short: <code>open_dir_handle</code> in <code>win32.c</code> handles long paths incorrectly.</p>
<p>At best, this will cause programs that use <code>Dir.glob</code> to crash on windows when paths in the tree exceed the length allocated by ruby. I believe this is wrong in master too.</p>
<p>I'm a bit confused by error handling for <a href="https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew" class="external"><code>GetFinalPathNameByHandleW</code></a>. It <em>looks correct</em> , but its a confusing enough API that I'm going to mention it further down just in case.</p>
<p>In more detail:</p>
<p>As the developer of altWinDirStat, I'm way more familiar than I'd like with the labyrinth of weirdness that is handling paths on Windows. Long file paths have been supported through UNC paths and similar weirdness for as long as I've been around, maybe since the beginning of NT.</p>
<p>Many probably know all of this already, but will recap off the top of my head for context:</p>
<p>"Long" means up to the UTF-16 limit of 32k characters or so (and yes, IIRC, official documentation does not give the exact number of 32,768 because they say something about substitutions and such), which in practice is half the max value <code>UNICODE_STRING</code> struct can store in the <code>USHORT</code> <code>Length</code> member. Windows 10 has recently removed the <code>MAX_PATH</code> restriction from many dated Windows APIs that used to require kinda-UNC path prefixing (<code>"\\?\"</code>), which makes things easier for users, but also broke a lot of poorly written software that handled buffers incorrectly.</p>
<p>In ruby, any program that relies on <code>Dir.glob</code> will crash with a valid <em>final</em> path that exceeds MAX_PATH, since <a href="https://github.com/ruby/ruby/blob/82add06f9cbe00ad611e99692d8d49b77159c601/win32/win32.c#L2061" class="external"><code>GetFinalPathNameByHandleW</code> will return a length longer than <code>FINAL_PATH_MAX</code></a>.</p>
<p>One option to fix this is to make the stack buffer large enough to hold any possible string. I don't think this is a good idea. But it would be the smallest change.</p>
<p>A different option is to add this error explicitly to the <code>Dir.glob</code> docs, and make every single program work around this. I don't think that's a good fix either.</p>
<p>Another option to fix this that I do not <em>necessarily</em> recommend is to do the classic windows thing and call <code>GetFinalPathNameByHandleW</code> once with a zero-sized buffer and then use the return value of <code>GetFinalPathNameByHandleW</code> to allocate a sufficiently large buffer on the heap to hold the buffer, then call it again. Much slower, but definitely works well. This could cause a lot of heap churn if you have a lot of files (e.g. anybody who has a node_modules somewhere in their monorepo). Apparently people are already paying attention to <a href="https://bugs.ruby-lang.org/issues/9934" class="external">filepath-sized allocations in ruby</a>.</p>
<p>I'm very very OCD about how I use heap when I'm writing native code, it's a huge pain, but OCD means OCD <em>and</em> slightly better performance :). If you want to do it, the other option I see is <em>first</em> try the API with a <code>MAX_PATH</code> sized stack buffer, and if that works, excellent! Lightning fast code, no heap. If the stack buffer is too small, <em>then</em> I'll allocate a heap buffer big enough to hold the size of the string requested by whatever that win32 api has suggested I use in the return code. Excellent performance, but you need to make sure you're not introducing new bugs when you implement the code twice now, and not to mix up the heap/stack buffers.</p>
<p>With any fix, I suggest checking the last error on failure and reporting that instead. That may be better than just using the length of the input string. If the error is any of the errors listed in the documentation, it probably doesn't make sense to use the length of the input string anyways... in that case there's something wrong?</p>
<p>It might be a good idea for someone with the time to go through and update all the <code>MAX_PATH</code>-adjacent code to support long paths. That will be a huge endeavor, but worth it.</p>
<p>You can reproduce this with one line, calling <code>Dir.glob([])</code> on any valid path that's longer than 260 characters.</p>
<p>I'm also noticing that ruby is still using <code>lstrlenW</code> and <code>lstrcat</code> in <code>win32.c</code>... this is a terrible idea! <code>lstrcat</code> catches access violations/segfaults and then just continues program execution. I've seen this happen in other software and lost data to it. It's a pervasive enough problem on windows that I once thought of writing an EMET-style shim to redirect those system calls to normal c stdlib functions that crash on access violations. You don't need to switch to strsafe funcs or secure c lib funcs, it's an easy enough drop-in fix to switch to standard functions. Nothing will break unless something was already broken. I'll open a simple bug for that.</p>
<hr>
<p>The "maybe an issue" is that the <code>GetFinalPathNameByHandleW</code> appears even more confusing than most old win32 path-handling functions. <a href="https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-getfinalpathnamebyhandlew" class="external">The docs</a> say:</p>
<pre><code>If the function succeeds, the return value is the length of the string received by lpszFilePath, in TCHARs. This value does not include the size of the terminating null character.
</code></pre>
<p>...then a note for the ANSI version on vista and following windows versions, with subtly contradictory behavior, and then the failure behavior:</p>
<pre><code>If the function fails because lpszFilePath is too small to hold the string plus the terminating null character, the return value is the required buffer size, in TCHARs. This value includes the size of the terminating null character.
If the function fails for any other reason, the return value is zero. To get extended error information, call GetLastError.
</code></pre>
<p>...and then a table that probably talks about the possible values <code>GetLastError</code> will return, though annoyingly, doesn't say that explicitly.</p>
<p>I've been off-by-one when dealing with APIs like this enough times to not trust myself or any human around it. The SAL in the headers isn't as good as it is for some similarly-worded APIs, so it's not useful here.</p>
Ruby master - Bug #18677 (Assigned): BigDecimal#power (**) returns FloatDomainError when passing ...
https://redmine.ruby-lang.org/issues/18677
2022-04-04T09:27:59Z
dorianmariefr (Dorian Marié)
<p>Example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="o">></span> <span class="no">BigDecimal</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> <span class="o">**</span> <span class="no">BigDecimal</span><span class="p">(</span><span class="s2">"Infinity"</span><span class="p">)</span>
<span class="no">FloatDomainError</span><span class="p">:</span> <span class="no">Computation</span> <span class="n">results</span> <span class="k">in</span> <span class="s1">'Infinity'</span>
</code></pre>
<p>Maybe:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s2">"bigdecimal/util"</span>
<span class="k">class</span> <span class="nc">BigDecimal</span> <span class="o"><</span> <span class="no">Numeric</span>
<span class="k">def</span> <span class="nf">**</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="k">if</span> <span class="n">other</span><span class="p">.</span><span class="nf">infinite?</span> <span class="o">==</span> <span class="mi">1</span>
<span class="k">if</span> <span class="nb">self</span> <span class="o">></span> <span class="mi">1</span>
<span class="no">BigDecimal</span><span class="o">::</span><span class="no">INFINITY</span>
<span class="k">elsif</span> <span class="nb">self</span> <span class="o">==</span> <span class="mi">1</span>
<span class="nb">self</span>
<span class="k">elsif</span> <span class="nb">self</span> <span class="o">>=</span> <span class="mi">0</span>
<span class="no">BigDecimal</span><span class="p">(</span><span class="mi">0</span><span class="p">)</span>
<span class="k">else</span>
<span class="n">power</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">else</span>
<span class="n">power</span><span class="p">(</span><span class="n">other</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">def</span> <span class="nf">puts_and_eval</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="nb">puts</span> <span class="n">string</span>
<span class="nb">p</span> <span class="nb">eval</span><span class="p">(</span><span class="n">string</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">puts_and_eval</span> <span class="s2">"10 ** BigDecimal::INFINITY"</span>
<span class="n">puts_and_eval</span> <span class="s2">"1 ** BigDecimal::INFINITY"</span>
<span class="n">puts_and_eval</span> <span class="s2">"0.1 ** BigDecimal::INFINITY"</span>
<span class="n">puts_and_eval</span> <span class="s2">"0 ** BigDecimal::INFINITY"</span>
<span class="n">puts_and_eval</span> <span class="s2">"-1 ** BigDecimal::INFINITY"</span>
</code></pre>
<p>Seems like ruby is doing very different things from math though</p>
Ruby master - Bug #18622 (Open): const_get still looks in Object, while lexical constant lookup n...
https://redmine.ruby-lang.org/issues/18622
2022-03-10T16:12:55Z
Eregon (Benoit Daloze)
<p>There is some inconsistency here between literal constant lookup and the meta API (const_get).</p>
<p>Lexical constant lookup no longer uses a special case for Object, and this is good as it avoids surprises: <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: remove top-level constant lookup (Closed)" href="https://redmine.ruby-lang.org/issues/11547">#11547</a></p>
<p>However, <code>const_get</code> still looks in Object, even though that's confusing, inconsistent and IMHO shouldn't really happen.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">module</span> <span class="nn">ConstantSpecsTwo</span>
<span class="no">Foo</span> <span class="o">=</span> <span class="ss">:cs_two_foo</span>
<span class="k">end</span>
<span class="k">module</span> <span class="nn">ConstantSpecs</span>
<span class="k">end</span>
<span class="nb">p</span> <span class="no">ConstantSpecs</span><span class="p">.</span><span class="nf">const_get</span><span class="p">(</span><span class="s2">"ConstantSpecsTwo::Foo"</span><span class="p">)</span> <span class="c1"># => :cs_two_foo</span>
<span class="nb">p</span> <span class="no">ConstantSpecs</span><span class="o">::</span><span class="no">ConstantSpecsTwo</span><span class="o">::</span><span class="no">Foo</span> <span class="c1"># => const_get.rb:9:in `<main>': uninitialized constant ConstantSpecs::ConstantSpecsTwo (NameError)</span>
</code></pre>
<p>I think we should change it so both behave the same (i.e., NameError).<br>
It's like if <code>cd /foo/bar</code> would go to <code>/bar</code> if <code>/foo/bar</code> does not exist and <code>/bar</code> does.</p>
<p><code>const_get</code> is a meta API so it cannot know the surrounding <code>Module.nesting</code>, but so I think it should consider the receiver of <code>const_get</code> as the only nesting (so just <code>ConstantSpecs</code> in this case, not <code>Object</code>).</p>
<p>Note this does not affect nested constants inside the <code>const_get</code> like <code>Foo</code> above (another way to look at the inconsistency that the first component is treated differently).</p>
<p>From <a href="https://bugs.ruby-lang.org/issues/11547#note-19" class="external">https://bugs.ruby-lang.org/issues/11547#note-19</a></p>
Ruby master - Bug #18476 (Open): Call to require stuck forever after receiving EAGAIN on writev w...
https://redmine.ruby-lang.org/issues/18476
2022-01-11T18:30:15Z
JelteF (Jelte Fennema)
<a name="Environment"></a>
<h1 >Environment<a href="#Environment" class="wiki-anchor">¶</a></h1>
<p>I'm using Ubuntu 18.04 running on Windows using WSL2:</p>
<pre><code>$ uname -a
Linux myhostname 5.10.60.1-microsoft-standard-WSL2 #1 SMP Wed Aug 25 23:20:18 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 18.04.6 LTS
Release: 18.04
Codename: bionic
</code></pre>
<a name="Problem-description"></a>
<h1 >Problem description<a href="#Problem-description" class="wiki-anchor">¶</a></h1>
<p>When using <code>zeus</code> to run a ruby project in an effort to cache dependency loading it gets stuck when calling <code>require 'rubocop'</code> on Ruby 3.0 and 3.1. Everything works fine on Ruby 2.6.</p>
<p>When looking at strace output of the stuck process it shows a <code>writev</code> call that receives an <code>EAGAIN</code> right before the process gets to its stuck state:</p>
<pre><code>[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/number_conversion.rb", iov_len=115}, {iov_base="\n", iov_len=1}], 2) = 116
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/numbered_parameter_assignment.rb", iov_len=127}, {iov_base="\n", iov_len=1}], 2) = 128
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/or_assignment_to_constant.rb", iov_len=123}, {iov_base="\n", iov_len=1}], 2) = 124
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/ordered_magic_comments.rb", iov_len=120}, {iov_base="\n", iov_len=1}], 2) = 121
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/out_of_range_regexp_ref.rb", iov_len=121}, {iov_base="\n", iov_len=1}], 2) = 122
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/parentheses_as_grouped_expression"..., iov_len=131}, {iov_base="\n", iov_len=1}], 2) = 132
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/percent_string_array.rb", iov_len=118}, {iov_base="\n", iov_len=1}], 2) = 119
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/percent_symbol_array.rb", iov_len=118}, {iov_base="\n", iov_len=1}], 2) = 119
[pid 24872] writev(14, [{iov_base="/home/jelte/.rbenv/versions/3.1.0/lib/ruby/gems/3.1.0/gems/rubocop-1.23.0/lib/rubocop/cop/lint/raise_exception.rb", iov_len=113}, {iov_base="\n", iov_len=1}], 2) = -1 EAGAIN (Resource temporarily unavailable)
[pid 24872] getpid() = 24872
[pid 24872] ppoll([{fd=14, events=POLLOUT}, {fd=7, events=POLLIN}], 2, NULL, NULL, 8 <unfinished ...>
[pid 24859] <... futex resumed> ) = -1 ETIMEDOUT (Connection timed out)
[pid 24859] select(0, NULL, NULL, NULL, {tv_sec=0, tv_usec=20}) = 0 (Timeout)
[pid 24859] futex(0x605f38, FUTEX_WAIT, 0, {tv_sec=60, tv_nsec=0}
</code></pre>
<p>The exact file at which the process receives the EAGAIN and is stuck is consistent across runs with the same Ruby version (at least on my machine). For 3.1.0 it's <code>raise_exception.rb</code> and for 3.0.3 it's <code>redundant_dir_glob_sort.rb</code></p>
<p>For reference this is the link to the repo of <code>zeus</code>: <a href="https://github.com/burke/zeus" class="external">https://github.com/burke/zeus</a></p>
<a name="How-to-reproduce"></a>
<h1 >How to reproduce<a href="#How-to-reproduce" class="wiki-anchor">¶</a></h1>
<p>See this example repo for minimal steps on how to reproduce this: <a href="https://github.com/JelteF/ruby-zeus-bug" class="external">https://github.com/JelteF/ruby-zeus-bug</a></p>
<a name="Expectation"></a>
<h1 >Expectation<a href="#Expectation" class="wiki-anchor">¶</a></h1>
<p>For Ruby to not get stuck after receiving <code>EAGAIN</code> on the <code>writev</code> call.</p>
Ruby master - Bug #18396 (Open): An unexpected "hash value omission" syntax error when without pa...
https://redmine.ruby-lang.org/issues/18396
2021-12-08T03:25:13Z
koic (Koichi ITO)
koic.ito@gmail.com
<a name="Summary"></a>
<h2 >Summary<a href="#Summary" class="wiki-anchor">¶</a></h2>
<p>I encountered an unexpected "hash value omission" syntax error when parentheses call expression follows:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="sx">% cat </span><span class="n">example</span><span class="p">.</span><span class="nf">rb</span>
<span class="n">foo</span> <span class="ss">key:
</span><span class="n">foo</span> <span class="n">arg</span>
</code></pre>
<pre><code class="console syntaxhl" data-language="console"><span class="go">% ruby -cv /tmp/b.rb
ruby 3.1.0dev (2021-12-07T23:18:11Z master 4a3e7984bf) [x86_64-darwin19]
example.rb:2: syntax error, unexpected local variable or method, expecting `do' or '{' or '('
foo arg
</span></code></pre>
<a name="Additional-Information"></a>
<h2 >Additional Information<a href="#Additional-Information" class="wiki-anchor">¶</a></h2>
<p>The following is a traditional usage.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># No errors.</span>
<span class="n">foo</span> <span class="ss">key: </span><span class="n">key</span>
<span class="n">foo</span> <span class="n">arg</span>
</code></pre>
<p>A syntax error is unexpectedly raised when hash value omission argument without parentheses is followed by a method call without parentheses.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># No errors is expected, but syntax error is raised.</span>
<span class="n">foo</span> <span class="ss">key:
</span><span class="n">foo</span> <span class="n">arg</span>
</code></pre>
<p>No error occurs if any of the calls have parentheses.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># No errors.</span>
<span class="n">foo</span><span class="p">(</span><span class="n">key</span><span class="p">:)</span>
<span class="n">foo</span> <span class="n">arg</span>
</code></pre>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># Also no errors.</span>
<span class="n">foo</span> <span class="ss">key:
</span><span class="n">foo</span><span class="p">(</span><span class="n">arg</span><span class="p">)</span>
</code></pre>
<p>No error occurs when calling alone.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># No errors.</span>
<span class="n">foo</span> <span class="ss">key:
</span></code></pre>
<p>I encountered this error while trying to apply hash value omission to RSpec code of a real-world application (proprietary) .<br>
But this is a new Ruby 3.1 syntax and may not be supported yet. Thank you.</p>
Ruby master - Bug #18337 (Assigned): Ruby allows zero-width characters in identifiers
https://redmine.ruby-lang.org/issues/18337
2021-11-15T00:14:21Z
duerst (Martin Dürst)
duerst@it.aoyama.ac.jp
<p>Ruby allows zero-width characters in identifiers, which can be shown with the following small test:</p>
<p>irb(main):001:0> script = "ab = 20; a\u200Bb = 30; puts ab;"<br>
=> "ab = 20; ab = 30; puts ab;"<br>
irb(main):002:0> eval(script)<br>
20<br>
=> nil</p>
<p>The first line creates the script. It contains a zero-width space (ZWSP), but that's not visible in most contexts (see next line). Looking at the script, one expects 30 as an output, but the output is 20 because there are two variables involved, one with a ZWSP and one without. I propose we fix this by disallowing such characters in identifiers. I'll give more details in a followup.</p>
Ruby master - Bug #18131 (Open): addr2line.c: Some inlined functions mistakenly shown
https://redmine.ruby-lang.org/issues/18131
2021-08-24T19:59:25Z
xtkoba (Tee KOBAYASHI)
<p>What is observed in ppc64le CI (pathnames edited for readability):</p>
<pre><code>-- C level backtrace information -------------------------------------------
/home/xxx/ruby/ruby(rb_vm_bugreport+0x198) [0x6430d199028] vm_dump.c:759
/home/xxx/ruby/ruby(ibf_load_small_value+0x78) [0x6430cf011c8] error.c:815
/home/xxx/ruby/ruby(ibf_load_iseq_each) compile.c:11650
/home/xxx/ruby/ruby(vm_respond_to) compile.c:12594
/home/xxx/ruby/ruby(rb_ec_obj_respond_to) vm_method.c:2576
/home/xxx/ruby/ruby(rb_obj_respond_to) vm_method.c:2569
/home/xxx/ruby/ruby(rb_bug_for_fatal_signal) vm_method.c:2584
/home/xxx/ruby/ruby(sigsegv+0x64) [0x6430d0bb954] signal.c:961
linux-vdso64.so.1(__kernel_sigtramp_rt64+0x0) [0x795f1d6304c8]
/home/xxx/ruby/ruby(rb_ary_push+0x2c) [0x6430d1b31cc] array.c:1313
(...)
</code></pre>
<p>Here, 6 functions are shown for address <code>0x6430cf011c8</code>, of which only <code>rb_bug_for_fatal_signal</code> is valid.</p>
<p>I have not yet come up with how to fix this, but I suspect this is partially due to <code>ranges_include</code> in <code>addr2line.c</code> not handling <code>DW_AT_entry_pc</code> at all.</p>
Ruby master - Bug #18119 (Assigned): Ractor crashes when instantiating classes
https://redmine.ruby-lang.org/issues/18119
2021-08-19T13:23:40Z
peterzhu2118 (Peter Zhu)
peter@peterzhu.ca
<p>The following script crashes with a segfault (tested on Ubuntu 20.04 and macOS 11.5.2):</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">workers</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">map</span> <span class="k">do</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="mi">100</span><span class="p">.</span><span class="nf">times</span><span class="p">.</span><span class="nf">map</span> <span class="p">{</span> <span class="no">Class</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">yield</span> <span class="kp">nil</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="mi">100</span><span class="p">.</span><span class="nf">times</span> <span class="p">{</span> <span class="no">Ractor</span><span class="p">.</span><span class="nf">select</span><span class="p">(</span><span class="o">*</span><span class="n">workers</span><span class="p">)</span> <span class="p">}</span>
</code></pre>
<p>Crash error:</p>
<pre><code><internal:ractor>:267: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.
test.rb:4: [BUG] Segmentation fault at 0x0000000000000040
ruby 3.1.0dev (2021-08-19T08:44:48Z master 6963f8f743) [x86_64-linux]
-- Control frame information -----------------------------------------------
c:0010 p:---- s:0033 e:000032 CFUNC :new
c:0009 p:0011 s:0029 e:000028 BLOCK test.rb:4 [FINISH]
c:0008 p:---- s:0026 e:000025 IFUNC
c:0007 p:---- s:0023 e:000022 CFUNC :times
c:0006 p:---- s:0020 e:000019 CFUNC :each
c:0005 p:---- s:0017 e:000016 CFUNC :map
c:0004 p:0007 s:0013 e:000012 BLOCK test.rb:4 [FINISH]
c:0003 p:---- s:0010 e:000009 CFUNC :loop
c:0002 p:0004 s:0006 e:000005 BLOCK test.rb:3 [FINISH]
c:0001 p:---- s:0003 e:000002 (none) [FINISH]
-- Ruby level backtrace information ----------------------------------------
test.rb:3:in `block (2 levels) in <main>'
test.rb:3:in `loop'
test.rb:4:in `block (3 levels) in <main>'
test.rb:4:in `map'
test.rb:4:in `each'
test.rb:4:in `times'
test.rb:4:in `block (4 levels) in <main>'
test.rb:4:in `new'
-- Machine register context ------------------------------------------------
RIP: 0x0000562c1f9cd2cb RBP: 0x00007f6c3736d378 RSP: 0x00007f6c368285f0
RAX: 0x00007f6c1c00e208 RBX: 0x00007f6c3736d378 RCX: 0x0000562c20ed8330
RDX: 0x0000000000000000 RDI: 0x00007f6c100095c0 RSI: 0x0000000000000000
R8: 0x0000000000000007 R9: 0x0000562c20ed8120 R10: 0x0000000000000022
R11: 0x0000562c21180760 R12: 0x0000000000000000 R13: 0x00007f6c3736c000
R14: 0x0000000000000000 R15: 0x00007f6c3736d378 EFL: 0x0000000000010202
-- C level backtrace information -------------------------------------------
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_print_backtrace+0x11) [0x562c1f995e38] ../vm_dump.c:759
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_vm_bugreport) ../vm_dump.c:1041
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_bug_for_fatal_signal+0xec) [0x562c1f78a0bc] ../error.c:815
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(sigsegv+0x4d) [0x562c1f8ebcbd] ../signal.c:961
/lib/x86_64-linux-gnu/libpthread.so.0(__restore_rt+0x0) [0x7f6c3b2c63c0]
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_class_remove_from_super_subclasses+0x2b) [0x562c1f9cd2cb] ../class.c:99
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(obj_free+0x37a) [0x562c1f7ae95a] ../gc.c:3123
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(gc_plane_sweep+0x21) [0x562c1f7aef3d] ../gc.c:5322
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(gc_page_sweep) ../gc.c:5464
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(gc_sweep_step) ../gc.c:5630
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(gc_heap_prepare_minimum_pages+0x0) [0x562c1f7afd94] ../gc.c:5834
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(gc_sweep) ../gc.c:5837
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(gc_marks+0x1c0) [0x562c1f7b3df8] ../gc.c:8144
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(gc_start) ../gc.c:9013
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(heap_prepare+0x2f) [0x562c1f7b8b6f] ../gc.c:2131
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(heap_next_freepage) ../gc.c:2422
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(ractor_cache_slots) ../gc.c:2454
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(newobj_slowpath) ../gc.c:2495
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(newobj_slowpath_wb_protected) ../gc.c:2519
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(newobj_of0+0x5) [0x562c1f7b8ebd] ../gc.c:2562
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(newobj_of) ../gc.c:2572
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_wb_protected_newobj_of) ../gc.c:2596
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(class_alloc+0x5) [0x562c1f9cd49e] ../class.c:185
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_class_boot) ../class.c:230
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(class_call_alloc_func+0x5) [0x562c1f84e5d3] ../object.c:2075
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_class_alloc) ../object.c:2047
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_class_new_instance_pass_kw) ../object.c:2120
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_cfp_consistent_p+0x0) [0x562c1f96d6bc] ../vm_insnhelper.c:2989
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_call_cfunc_with_frame) ../vm_insnhelper.c:2991
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_sendish+0x303) [0x562c1f978393] ../vm_insnhelper.c:4562
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_exec_core+0xcd) [0x562c1f98316d] ../insns.def:775
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_vm_exec+0x197) [0x562c1f978fc7] ../vm.c:2164
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(collect_i+0x12) [0x562c1fa27bf2] ../enum.c:608
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_vm_pop_frame+0x0) [0x562c1f976ba8] ../vm_insnhelper.c:3795
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_yield_with_cfunc) ../vm_insnhelper.c:3796
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(invoke_block_from_c_bh+0x10) [0x562c1f97d0d3] ../vm.c:1359
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_yield) ../vm.c:1399
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_yield_0) ../vm_eval.c:1350
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_yield_1) ../vm_eval.c:1356
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(int_dotimes+0x5c) [0x562c1f83a49c] ../numeric.c:5014
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_cfp_consistent_p+0x0) [0x562c1f97dd4f] ../vm_eval.c:135
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_call0_cfunc_with_frame) ../vm_eval.c:137
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_call0_cfunc) ../vm_eval.c:149
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_call0_body) ../vm_eval.c:182
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_call0+0x1ea) [0x562c1f9812fa] ../vm_eval.c:72
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(iterate_method+0x3b) [0x562c1f981e9b] ../vm_eval.c:847
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_iterate0+0x101) [0x562c1f973001] ../vm_eval.c:1534
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_block_call_kw+0x76) [0x562c1f9731f6] ../vm_eval.c:1566
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(enumerator_block_call+0x59) [0x562c1fa358e9] ../enumerator.c:553
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_cfp_consistent_p+0x0) [0x562c1f97dd4f] ../vm_eval.c:135
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_call0_cfunc_with_frame) ../vm_eval.c:137
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_call0_cfunc) ../vm_eval.c:149
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_call0_body) ../vm_eval.c:182
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_call0+0x1ea) [0x562c1f9812fa] ../vm_eval.c:72
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(iterate_method+0x3b) [0x562c1f981e9b] ../vm_eval.c:847
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_iterate0+0x101) [0x562c1f973001] ../vm_eval.c:1534
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_lambda_call+0x75) [0x562c1f973295] ../vm_eval.c:1633
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(enum_collect+0x5b) [0x562c1fa29acb] ../enum.c:647
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_cfp_consistent_p+0x0) [0x562c1f96d6bc] ../vm_insnhelper.c:2989
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_call_cfunc_with_frame) ../vm_insnhelper.c:2991
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_sendish+0x303) [0x562c1f978393] ../vm_insnhelper.c:4562
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_exec_core+0x130) [0x562c1f9831d0] ../insns.def:756
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_vm_exec+0x197) [0x562c1f978fc7] ../vm.c:2164
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(invoke_block_from_c_bh+0x130) [0x562c1f97c85a] ../vm.c:1264
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_yield) ../vm.c:1399
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_yield_0) ../vm_eval.c:1350
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(loop_i) ../vm_eval.c:1449
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_vrescue2+0x114) [0x562c1f794694] ../eval.c:1023
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_rescue2+0x8e) [0x562c1f79490e] ../eval.c:1000
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_cfp_consistent_p+0x0) [0x562c1f96d6bc] ../vm_insnhelper.c:2989
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_call_cfunc_with_frame) ../vm_insnhelper.c:2991
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_sendish+0x303) [0x562c1f978393] ../vm_insnhelper.c:4562
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(vm_exec_core+0x130) [0x562c1f9831d0] ../insns.def:756
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_vm_exec+0x197) [0x562c1f978fc7] ../vm.c:2164
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(thread_do_start_proc+0x294) [0x562c1f930f24] ../thread.c:716
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(thread_do_start+0xc) [0x562c1f9336fc] ../thread.c:760
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(thread_start_func_2) ../thread.c:835
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(rb_native_cond_initialize+0x0) [0x562c1f933a09] ../thread_pthread.c:1051
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(register_cached_thread_and_wait) ../thread_pthread.c:1103
/home/spin/src/github.com/Shopify/ruby-master/install/bin/ruby(thread_start_func_1) ../thread_pthread.c:1058
/lib/x86_64-linux-gnu/libpthread.so.0(0x9609) [0x7f6c3b2ba609]
/lib/x86_64-linux-gnu/libc.so.6(clone+0x43) [0x7f6c3b044293]
</code></pre>
Ruby master - Bug #18012 (Open): Case-insensitive character classes can only match multiple code ...
https://redmine.ruby-lang.org/issues/18012
2021-06-29T08:35:05Z
jirkamarsik (Jirka Marsik)
<p>Some Unicode characters case-fold to strings of multiple code points, e.g. the ligature <code>\ufb00</code> can match the string <code>ff</code>.</p>
<pre><code>irb(main):001:0> /\A[\ufb00]\z/i.match("\ufb00")
=> #<MatchData "ff">
irb(main):002:0> /\A[\ufb00]\z/i.match("ff")
=> #<MatchData "ff">
</code></pre>
<p>As expected, when we negate this character class, we can no longer match neither the ligature character <code>\ufb00</code> nor the string <code>ff</code>.</p>
<pre><code>irb(main):003:0> /\A[^\ufb00]\z/i.match("\ufb00")
=> nil
irb(main):004:0> /\A[^\ufb00]\z/i.match("ff")
=> nil
</code></pre>
<p>Then, when we add a second negation, the <code>\ufb00</code> ligature reappears in the character set but the string <code>ff</code> is no longer accepted.</p>
<pre><code>irb(main):005:0> /\A[^[^\ufb00]]\z/i.match("\ufb00")
=> #<MatchData "ff">
irb(main):006:0> /\A[^[^\ufb00]]\z/i.match("ff")
=> nil
</code></pre>
<p>This reveals that the multi-code-point matches in character classes are blocked by negation. However, this is implemented only by checking whether the topmost character class is negated. If we wrap the character class in another set of brackets, the semantics change.</p>
<pre><code>irb(main):007:0> /\A[[^[^\ufb00]]]\z/i.match("\ufb00")
=> #<MatchData "ff">
irb(main):008:0> /\A[[^[^\ufb00]]]\z/i.match("ff")
=> #<MatchData "ff">
</code></pre>
<p>The cause behind this discrepancy (the fact that <code>[^[^\ufb00]]</code> and <code>[[^[^\ufb00]]]</code> match different strings) is the extra <code>IS_NCCLASS_NOT</code> check in <code>i_apply_case_fold</code> (<a href="https://github.com/ruby/ruby/blob/9eae8cdefba61e9e51feb30a4b98525593169666/regparse.c#L5568" class="external">https://github.com/ruby/ruby/blob/9eae8cdefba61e9e51feb30a4b98525593169666/regparse.c#L5568</a>).</p>
Ruby master - Bug #18010 (Open): Character class with single character gets case-folded with foll...
https://redmine.ruby-lang.org/issues/18010
2021-06-28T09:30:01Z
jirkamarsik (Jirka Marsik)
<pre><code>irb(main):001:0> /ff/i.match("\ufb00")
=> #<MatchData "ff">
irb(main):002:0> /[f]f/i.match("\ufb00")
=> #<MatchData "ff">
irb(main):003:0> /f[f]/i.match("\ufb00")
=> nil
irb(main):004:0> /[f][f]/i.match("\ufb00")
=> nil
irb(main):005:0> /(?:f)f/i.match("\ufb00")
=> nil
irb(main):006:0> /f(?:f)/i.match("\ufb00")
=> nil
irb(main):007:0> /(?:f)(?:f)/i.match("\ufb00")
=> nil
</code></pre>
<p>In the above, singleton character classes (<code>[...]</code>) and even parentheses (<code>(?:...)</code>) break up string literals, forcing each separate substring to be matched against separately. However, in the one case when a singleton character class precedes a string, it is joined with it as an optimization. However, this optimization ends up changing the semantics of the Regexp.</p>
Ruby master - Bug #17998 (Assigned): ractor: process hanging (with ractors initialized, but not b...
https://redmine.ruby-lang.org/issues/17998
2021-06-17T13:45:50Z
chucke (Tiago Cardoso)
<p>I couldn't figure out how to reproduce this in a more contained way, so I'll share what I'm doing <a href="https://github.com/HoneyryderChuck/minitest/tree/issue-872" class="external">in this minitest branch</a>.</p>
<p>I'm trying to make minitest's parallel mode use ractors. If you look at the last commit of the branch, I'm:</p>
<ul>
<li>replacing the parallel executor with a ractor-based one;</li>
<li>I'm defining the ractor executor, where I have a ractor pipe that a pool will consume work from</li>
<li>I'm turning off parallel subset of tests (to reproduce the bug that I'll be describing).</li>
</ul>
<p>When I run <code>rake test</code> in my Mac (BigSur 11.4), the process hangs. I can see that the ractor threads are executing and running, but the test process doesn't respond to the INFO signal interrupt (which should tell me where the process is hanging). This seems like a bug in the VM, as no work is being sent to the parallel executor, i.e. all ractors should be sleeping (I've <code>puts</code>'d also the executor shutdown process, and it never reaches it).</p>
<p>If I replace the ractor-based executor back with the thread based executor, everything works as expected.</p>
Ruby master - Bug #17996 (Open): Cygwin: thread + pipe behavior since Ruby 2.6
https://redmine.ruby-lang.org/issues/17996
2021-06-17T03:59:49Z
xtkoba (Tee KOBAYASHI)
<p>The following one-liner is the repro named <code>thread-pipe-read-close.rb</code> the aim of which is essentially the same as that of "IO#close raises an IOError with a clear message" test in <code>spec/ruby/core/io/close_spec.rb</code>.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r</span><span class="p">,</span> <span class="n">w</span> <span class="o">=</span> <span class="no">IO</span><span class="p">.</span><span class="nf">pipe</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">r</span><span class="p">.</span><span class="nf">read</span> <span class="p">};</span> <span class="nb">sleep</span> <span class="mf">0.5</span><span class="p">;</span> <span class="n">r</span><span class="p">.</span><span class="nf">close</span>
</code></pre>
<p>Run on Cygwin with Ruby 2.6 or later, this hangs up indefinitely consuming a full core. On the other hand, with Ruby 2.5.9p229 it works as expected.</p>
<pre><code>$ miniruby25 -v
ruby 2.5.9p229 (2021-04-05 revision 67939) [x86_64-cygwin]
$ miniruby25 thread-pipe-read-close.rb
#<Thread:0x000000080006c9f0@thread-pipe-read-close.rb:2 run> terminated with exception (report_on_exception is true):
Traceback (most recent call last):
1: from thread-pipe-read-close.rb:2:in `block in <main>'
thread-pipe-read-close.rb:2:in `read': IOError
$ miniruby -v
ruby 3.1.0dev (2021-06-10T23:31:51Z master 9210f8df7f) [x86_64-cygwin]
$ miniruby thread-pipe-read-close.rb
</code></pre>
Ruby master - Bug #17989 (Open): Case insensitive Regexps do not handle characters with overlappi...
https://redmine.ruby-lang.org/issues/17989
2021-06-15T11:43:14Z
jirkamarsik (Jirka Marsik)
<p>When a Regexp uses the case-insensitive flag, strings are compared by first case folding them and then comparing the case foldings for equality. When a literal string is encountered in a Regexp source, the pattern analyzer tries to enumerate all possible strings that would case fold to the same string as the string in the pattern. In this way, case folding can be avoided when the Regexp is used to match. However, the algorithm used to enumerate all the possible strings which case fold to the same string is not complete. It assumes that the case foldings of different characters do not overlap (i.e. the multi-character case folding of some character cannot be a prefix or suffix of the multi-character case folding of some other character). However, this is not the case for several Unicode characters.</p>
<p>In the code below, many of the equalities <code>A == B</code>, tested via <code>/A/i.match("B")</code>, do not hold. Those that do hold hold only because the number of case-equivalent strings detected by the analyzer crosses a threshold at which point the analyzer abandons this optimization.</p>
<pre><code>/\ufb00/i.match("ff") # LATIN SMALL LIGATURE FF
/\ufb01/i.match("fi") # LATIN SMALL LIGATURE FI
/\ufb02/i.match("fl") # LATIN SMALL LIGATURE FL
/\ufb03/i.match("ffi") # LATIN SMALL LIGATURE FFI
/\ufb04/i.match("ffl") # LATIN SMALL LIGATURE FFL
# (ff)i == (ffi)
/\ufb00i/i.match("\ufb03")
# (ffi) == (ff)i
/\ufb03/i.match("\ufb00i")
# f(fi) == (ffi)
/f\ufb01/i.match("\ufb03")
# (ffi) == f(fi)
/\ufb03/i.match("f\ufb01")
# (ff)l == (ffl)
/\ufb00l/i.match("\ufb04")
# (ffl) == (ff)l
/\ufb04/i.match("\ufb00l")
# f(fl) == (ffl)
/f\ufb02/i.match("\ufb04")
# (ffl) == f(fl)
/\ufb04/i.match("f\ufb02")
/\u1f50/i.match("\u03c5\u0313") # GREEK SMALL LETTER UPSILON WITH PSILI
/\u1f52/i.match("\u03c5\u0313\u0300") # GREEK SMALL LETTER UPSILON WITH PSILI AND VARIA
/\u1f54/i.match("\u03c5\u0313\u0301") # GREEK SMALL LETTER UPSILON WITH PSILI AND OXIA
/\u1f56/i.match("\u03c5\u0313\u0342") # GREEK SMALL LETTER UPSILON WITH PSILI AND PERISPOMENI
# (upsilon psili) varia == (upsilon psili varia)
/\u1f50\u0300/i.match("\u1f52")
# (upsilon psili varia) == (upsilon psili) varia
/\u1f52/i.match("\u1f50\u0300")
# (upsilon psili) oxia == (upsilon psili oxia)
/\u1f50\u0301/i.match("\u1f54")
# (upsilon psili oxia) == (upsilon psili) oxia
/\u1f54/i.match("\u1f50\u0301")
# (upsilon psili) perispomeni == (upsilon psili perispomeni)
/\u1f50\u0342/i.match("\u1f56")
# (upsilon psili perispomeni) == (upsilon psili) perispomeni
/\u1f56/i.match("\u1f50\u0342")
/\u1fb6/i.match("\u03b1\u0342") # GREEK SMALL LETTER ALPHA WITH PERISPOMENI
/\u1fb7/i.match("\u03b1\u0342\u03b9") # GREEK SMALL LETTER ALPHA WITH PERISPOMENI AND YPOGEGRAMMENI
# (alpha perispomeni) ypogegrammeni == (alpha perispomeni ypogegrammeni)
/\u1fb6\u03b9/i.match("\u1fb7")
# (alpha perispomeni ypogegrammeni) == (alpha perispomeni) ypogegrammeni
/\u1fb7/i.match("\u1fb6\u03b9")
/\u1fc6/i.match("\u03b7\u0342") # GREEK SMALL LETTER ETA WITH PERISPOMENI
/\u1fc7/i.match("\u03b7\u0342\u03b9") # GREEK SMALL LETTER ETA WITH PERISPOMENI AND YPOGEGRAMMENI
# (eta perispomeni) ypogegrammeni == (eta perispomeni ypogegrammeni)
/\u1fc6\u03b9/i.match("\u1fc7")
# (eta perispomeni ypogegrammeni) == (eta perispomeni) ypogegrammeni
/\u1fc7/i.match("\u1fc6\u03b9")
/\u1ff6/i.match("\u03c9\u0342") # GREEK SMALL LETTER OMEGA WITH PERISPOMENI
/\u1ff7/i.match("\u03c9\u0342\u03b9") # GREEK SMALL LETTER OMEGA WITH PERISPOMENI AND YPOGEGRAMMENI
# (omega perispomeni) ypogegrammeni == (omega perispomeni ypogegrammeni)
/\u1ff6\u03b9/i.match("\u1ff7")
# (omega perispomeni ypogegrammeni) == (omega perispomeni) ypogegrammeni
/\u1ff7/i.match("\u1ff6\u03b9")
</code></pre>
Ruby master - Bug #17931 (Open): Compile fails setup option nodynamic
https://redmine.ruby-lang.org/issues/17931
2021-05-31T11:21:13Z
Terabin (Allyson Souza Bacon)
<p>I can compile the ruby normally without deselecting the #option nodinamyc and some other extension, but when deselecting I get the following error</p>
<pre><code class="shell syntaxhl" data-language="shell">rbconfig.rb updated
generating enc.mk
making srcs under enc
generating transdb.h
transdb.h updated
compiling C:/ruby-3.0.1/dln.c
dln.c
compiling C:/ruby-3.0.1/localeinit.c
localeinit.c
creating verconf.h
verconf.h updated
compiling C:/ruby-3.0.1/loadpath.c
loadpath.c
builtin_binary.inc updated
compiling C:/ruby-3.0.1/builtin.c
builtin.c
linking static-library x64-vcruntime140-ruby300-static.lib
generating x64-vcruntime140-ruby300.def
linking import-library x64-vcruntime140-ruby300.lib
Criando biblioteca x64-vcruntime140-ruby300.lib e objeto x64-vcruntime140-ruby300.exp
generating makefiles ext/configure-ext.mk
ext/configure-ext.mk updated
configuring fiddle
libffi_version: 3.2.1
generating makefile exts.mk
exts.mk updated
The system cannot find the path specified.
NMAKE : fatal error U1077: <span class="s1">'cd'</span> : código de retorno <span class="s1">'0x1'</span>
Stop.
NMAKE : fatal error U1077: <span class="s1">'"C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\bin\Hostx64\x64\nmake.EXE"'</span> : código de retorno <span class="s1">'0x2'</span>
Stop.
C:<span class="se">\r</span>build2>
</code></pre>
<p>I tested at visual studio 2017 and 2019.</p>
<p><strong>How to reproduce</strong></p>
<pre><code class="shell syntaxhl" data-language="shell"><span class="nb">set </span><span class="nv">PATH</span><span class="o">=</span>C:<span class="se">\P</span>rogram Files <span class="o">(</span>x86<span class="o">)</span><span class="se">\M</span>icrosoft Visual Studio<span class="se">\2</span>019<span class="se">\C</span>ommunity<span class="se">\V</span>C<span class="se">\T</span>ools<span class="se">\M</span>SVC<span class="se">\1</span>4.28.29910<span class="se">\b</span><span class="k">in</span><span class="se">\H</span>ostx64<span class="se">\x</span>64<span class="p">;</span>%PATH%
<span class="nb">cd </span>C:<span class="se">\r</span>build_x64
<span class="nb">cd </span>C:<span class="se">\r</span>build2
C:<span class="se">\r</span>uby-3.0.1<span class="se">\w</span>in32<span class="se">\c</span>onfigure.bat <span class="nt">--disable-dln</span> <span class="nt">--with-static-link-ext</span> <span class="nt">--enable-shared</span><span class="o">=</span>no
</code></pre>
Ruby master - Bug #17882 (Assigned): bootstraptest/test_ractor.rb:224 segfaults on Cygwin
https://redmine.ruby-lang.org/issues/17882
2021-05-22T16:03:35Z
xtkoba (Tee KOBAYASHI)
<p>The attached test code is excerpted from <code>bootstraptest/test_ractor.rb:224</code>. This code causes a segmentation fault every time when run on <code>x86_64-cygwin</code>. There are at least 3 types of dying messages, as shown below.</p>
<p>I have no idea whether this is relevant to <a class="issue tracker-1 status-1 priority-4 priority-default" title="Bug: bootstraptest/test_ractor.rb:224 a random failing test with "The outgoing-port is already closed ... (Open)" href="https://redmine.ruby-lang.org/issues/17878">#17878</a>, which is an issue with the very same test code.</p>
<p>Type 1 (null pointer dereference):</p>
<pre><code>Thread 6 received signal SIGSEGV, Segmentation fault.
[Switching to Thread 5368]
VM_CF_BLOCK_HANDLER (cfp=0x0) at ../vm.c:115
115 const VALUE *ep = VM_CF_LEP(cfp);
(gdb) bt
#0 VM_CF_BLOCK_HANDLER (cfp=0x0) at ../vm.c:115
#1 0x00007ff6acedb495 in rb_vm_frame_block_handler (cfp=<optimized out>) at ../vm.c:128
#2 0x00007ff6acdd954e in pass_passed_block_handler (ec=0x80012bba0) at ../eval_intern.h:17
#3 rb_obj_call_init_kw (obj=obj@entry=123145240968920, argc=argc@entry=1, argv=argv@entry=0xffd0ca08, kw_splat=kw_splat@entry=0) at ../eval.c:1724
#4 0x00007ff6ace3efc2 in rb_class_new_instance (argc=argc@entry=1, argv=argv@entry=0xffd0ca08, klass=klass@entry=123145300575160) at ../object.c:2192
#5 0x00007ff6acdd1c30 in rb_exc_new_str (etype=etype@entry=123145300575160, str=<optimized out>) at ../error.c:1123
#6 0x00007ff6acdd29ad in rb_vraise (exc=123145300575160, fmt=<optimized out>, ap=<optimized out>) at ../error.c:2922
#7 0x00007ff6acdd29e5 in rb_raise (exc=0, fmt=0x0) at ../error.c:2930
#8 0x00007ff6acdf90e8 in rb_io_check_initialized (fptr=0x0) at ../io.c:767
#9 rb_io_check_initialized (fptr=<optimized out>) at ../io.c:764
#10 0x00007ff6acdf90fb in rb_io_check_closed (fptr=0x0) at ../io.c:774
#11 0x00007ff6ace011ec in prep_stdio (f=0x18023acb8 <reent_data+1336>, fmode=fmode@entry=1, klass=123145300573360, klass@entry=140697440105184, path=path@entry=0x7ff6acf158e0 <prelude_table+2944> "<STDIN>") at ../io.c:8239
#12 0x00007ff6ace0122f in rb_io_prep_stdin () at ../io.c:8255
#13 0x00007ff6acebc980 in thread_start_func_2 (th=0x0, th@entry=0x80011cbf0, stack_start=stack_start@entry=0xffd0ccf8) at ../thread.c:801
#14 0x00007ff6acebd032 in thread_start_func_1 (th_ptr=<optimized out>) at ../thread_pthread.c:1035
#15 0x000000018016d45f in pthread::thread_init_wrapper(void*) () from target:/usr/bin/cygwin1.dll
#16 0x00000001800ddbba in pthread_wrapper () from target:/usr/bin/cygwin1.dll
#17 0x0000000000000000 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
</code></pre>
<p>Type 2 (<code>rb_gc_mark()</code>: <code><address></code> is <code>T_ZOMBIE</code>):</p>
<pre><code>Thread 7 hit Breakpoint 1, rb_bug (fmt=0x7ff6acf1396a <stat_data_type+8138> "rb_gc_mark(): %p is T_ZOMBIE") at ../error.c:782
782 {
(gdb) bt
#0 rb_bug (fmt=0x7ff6acf1396a <stat_data_type+8138> "rb_gc_mark(): %p is T_ZOMBIE") at ../error.c:782
#1 0x00007ff6acdeae8f in gc_mark_children (objspace=objspace@entry=0x800053970, obj=obj@entry=123145240171400) at ../gc.c:6934
#2 0x00007ff6acdeafb0 in gc_mark_stacked_objects (objspace=0x800053970, incremental=incremental@entry=0, count=count@entry=0) at ../gc.c:6961
#3 0x00007ff6acded415 in gc_mark_stacked_objects_all (objspace=0x800053970) at ../gc.c:7001
#4 gc_marks_rest (objspace=objspace@entry=0x800053970) at ../gc.c:7972
#5 0x00007ff6acdec08c in gc_marks (full_mark=<optimized out>, objspace=0x800053970) at ../gc.c:8028
#6 gc_start (objspace=objspace@entry=0x800053970, reason=<optimized out>, reason@entry=256) at ../gc.c:8862
#7 0x00007ff6acdee522 in heap_prepare (heap=0x800053998, objspace=0x800053970) at ../gc.c:2153
#8 heap_next_freepage (heap=0x800053998, objspace=0x800053970) at ../gc.c:2444
#9 ractor_cache_slots (objspace=objspace@entry=0x800053970, cr=cr@entry=0x800135d60) at ../gc.c:2476
#10 0x00007ff6acdee61a in newobj_slowpath (alloc_size=<optimized out>, wb_protected=0, cr=0x800135d60, objspace=0x800053970, flags=11, klass=123145300573360) at ../gc.c:2517
#11 newobj_slowpath_wb_unprotected (klass=123145300573360, flags=11, objspace=0x800053970, cr=0x800135d60, alloc_size=<optimized out>) at ../gc.c:2547
#12 0x00007ff6acdee815 in newobj_of0 (klass=klass@entry=123145300573360, flags=flags@entry=11, wb_protected=wb_protected@entry=0, cr=<optimized out>, alloc_size=<optimized out>) at ../gc.c:2585
#13 0x00007ff6acdee86d in newobj_of (klass=klass@entry=123145300573360, flags=flags@entry=11, v1=v1@entry=0, v2=v2@entry=0, v3=v3@entry=0, wb_protected=wb_protected@entry=0, alloc_size=40) at ../gc.c:2594
#14 0x00007ff6acdeec23 in rb_wb_unprotected_newobj_of (klass=klass@entry=123145300573360, flags=flags@entry=11, size=40, size@entry=0) at ../gc.c:2610
#15 0x00007ff6acdf666c in io_alloc (klass=klass@entry=123145300573360) at ../io.c:1038
#16 0x00007ff6acdfbca9 in prep_io (fd=2, fmode=fmode@entry=65546, klass=klass@entry=123145300573360, path=path@entry=0x7ff6acf158f1 <prelude_table+2961> "<STDERR>") at ../io.c:8206
#17 0x00007ff6ace011d4 in prep_stdio (f=0x18023ae28 <reent_data+1704>, fmode=fmode@entry=10, klass=123145300573360, klass@entry=34361007456, path=path@entry=0x7ff6acf158f1 <prelude_table+2961> "<STDERR>") at ../io.c:8237
#18 0x00007ff6ace01295 in rb_io_prep_stderr () at ../io.c:8267
#19 0x00007ff6acebc9a6 in thread_start_func_2 (th=0x0, th@entry=0x800134550, stack_start=stack_start@entry=0xffa0ccf8) at ../thread.c:803
#20 0x00007ff6acebd032 in thread_start_func_1 (th_ptr=<optimized out>) at ../thread_pthread.c:1035
#21 0x000000018016d45f in pthread::thread_init_wrapper(void*) () from target:/usr/bin/cygwin1.dll
#22 0x00000001800ddbba in pthread_wrapper () from target:/usr/bin/cygwin1.dll
#23 0x0000000000000000 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
</code></pre>
<p>Type 3 (try to mark <code>T_NONE</code> object):</p>
<pre><code><OBJ_INFO:gc_mark_ptr@../gc.c:6580> 0x00006fffffe7fb70 [0 M ] T_NONE
------------------------------------------------------------------------
Thread 7 hit Breakpoint 1, rb_bug (fmt=fmt@entry=0x7ff6acf138a0 <stat_data_type+7936> "try to mark T_NONE object") at ../error.c:782
782 {
(gdb) bt
#0 rb_bug (fmt=fmt@entry=0x7ff6acf138a0 <stat_data_type+7936> "try to mark T_NONE object") at ../error.c:782
#1 0x00007ff6acdea5c9 in gc_mark_ptr (objspace=0x800053970, obj=123145300736880) at ../gc.c:6581
#2 0x00007ff6ace672ea in ractor_mark (ptr=0x800117240) at ../ractor.c:197
#3 0x00007ff6acdeafb0 in gc_mark_stacked_objects (objspace=objspace@entry=0x800053970, incremental=incremental@entry=1, count=count@entry=2147483647) at ../gc.c:6961
#4 0x00007ff6acded3f9 in gc_mark_stacked_objects_incremental (count=2147483647, objspace=0x800053970) at ../gc.c:6995
#5 gc_marks_rest (objspace=objspace@entry=0x800053970) at ../gc.c:7968
#6 0x00007ff6acdee4f1 in gc_marks_continue (heap=0x800053998, objspace=0x800053970) at ../gc.c:8012
#7 heap_prepare (heap=0x800053998, objspace=0x800053970) at ../gc.c:2148
#8 heap_next_freepage (heap=0x800053998, objspace=0x800053970) at ../gc.c:2444
#9 ractor_cache_slots (objspace=objspace@entry=0x800053970, cr=cr@entry=0x800129350) at ../gc.c:2476
#10 0x00007ff6acdee61a in newobj_slowpath (alloc_size=<optimized out>, wb_protected=0, cr=0x800129350, objspace=0x800053970, flags=11, klass=123145300573360) at ../gc.c:2517
#11 newobj_slowpath_wb_unprotected (klass=123145300573360, flags=11, objspace=0x800053970, cr=0x800129350, alloc_size=<optimized out>) at ../gc.c:2547
#12 0x00007ff6acdee815 in newobj_of0 (klass=klass@entry=123145300573360, flags=flags@entry=11, wb_protected=wb_protected@entry=0, cr=<optimized out>, alloc_size=<optimized out>) at ../gc.c:2585
#13 0x00007ff6acdee86d in newobj_of (klass=klass@entry=123145300573360, flags=flags@entry=11, v1=v1@entry=0, v2=v2@entry=0, v3=v3@entry=0, wb_protected=wb_protected@entry=0, alloc_size=40) at ../gc.c:2594
#14 0x00007ff6acdeec23 in rb_wb_unprotected_newobj_of (klass=klass@entry=123145300573360, flags=flags@entry=11, size=40, size@entry=0) at ../gc.c:2610
#15 0x00007ff6acdf666c in io_alloc (klass=klass@entry=123145300573360) at ../io.c:1038
#16 0x00007ff6acdfbca9 in prep_io (fd=0, fmode=fmode@entry=65537, klass=klass@entry=123145300573360, path=path@entry=0x7ff6acf158e0 <prelude_table+2944> "<STDIN>") at ../io.c:8206
#17 0x00007ff6ace011d4 in prep_stdio (f=0x18023acb8 <reent_data+1336>, fmode=fmode@entry=1, klass=123145300573360, klass@entry=140697440105184, path=path@entry=0x7ff6acf158e0 <prelude_table+2944> "<STDIN>") at ../io.c:8237
#18 0x00007ff6ace0122f in rb_io_prep_stdin () at ../io.c:8255
#19 0x00007ff6acebc980 in thread_start_func_2 (th=0x0, th@entry=0x80010dcb0, stack_start=stack_start@entry=0xffa0ccf8) at ../thread.c:801
#20 0x00007ff6acebd032 in thread_start_func_1 (th_ptr=<optimized out>) at ../thread_pthread.c:1035
#21 0x000000018016d45f in pthread::thread_init_wrapper(void*) () from target:/usr/bin/cygwin1.dll
#22 0x00000001800ddbba in pthread_wrapper () from target:/usr/bin/cygwin1.dll
#23 0x0000000000000000 in ?? ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
</code></pre>
Ruby master - Bug #17878 (Open): bootstraptest/test_ractor.rb:224 a random failing test with "The...
https://redmine.ruby-lang.org/issues/17878
2021-05-21T14:25:41Z
jaruga (Jun Aruga)
<p>I was running Travis several times I am trying to revive based on the master commit: <code>50a534a1526e2b9f4ea41e44b802bd73f9cebbeb</code>.<br>
Then I got the following failure on Travis arm64 Ubuntu focal environment. The failure happened for the first time in around 5 times.</p>
<p>Here is the Travis log.<br>
<a href="https://travis-ci.com/github/junaruga/ruby/jobs/506885939#L2227" class="external">https://travis-ci.com/github/junaruga/ruby/jobs/506885939#L2227</a></p>
<pre><code>$ $SETARCH make -s test -o showflags TESTOPTS="${TESTOPTS=-j33 -q --tty=no}"
...
test_ractor.rb ....................Fstderr output is not empty
<internal:ractor>:345:in `select': The outgoing-port is already closed (Ractor::ClosedError)
from bootstraptest.tmp.rb:12:in `block in test'
from bootstraptest.tmp.rb:11:in `times'
from bootstraptest.tmp.rb:11:in `test'
from bootstraptest.tmp.rb:26:in `block in <main>'
from bootstraptest.tmp.rb:25:in `times'
from bootstraptest.tmp.rb:25:in `each'
from bootstraptest.tmp.rb:25:in `map'
from bootstraptest.tmp.rb:25:in `<main>'
</code></pre>
<pre><code>Fiber count: 10000 (skipping)
#1213 test_ractor.rb:224:in `<top (required)>':
def test n
rs = (1..n).map do |i|
Ractor.new(i) do |i|
"r#{i}"
end
end
as = []
all_rs = rs.dup
n.times{
r, obj = Ractor.select(*rs)
as << [r, obj]
rs.delete(r)
}
if as.map{|r, o| r.object_id}.sort == all_rs.map{|r| r.object_id}.sort &&
as.map{|r, o| o}.sort == (1..n).map{|i| "r#{i}"}.sort
'ok'
else
'ng'
end
end
30.times.map{|i|
test i
}
#=> "" (expected "[\"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\", \"ok\"]")
FAIL 1/1488 tests failed
make: *** [uncommon.mk:768: yes-btest-ruby] Error 1
The command "$SETARCH make -s test -o showflags TESTOPTS="${TESTOPTS=$JOBS -q --tty=no}"" exited with 2.
</code></pre>
Ruby master - Bug #17678 (Assigned): Ractors do not restart after fork
https://redmine.ruby-lang.org/issues/17678
2021-03-08T16:19:45Z
ivoanjo (Ivo Anjo)
ivo.anjo@datadoghq.com
<p>Hello there! I'm working at Datadog on the <code>ddtrace</code> gem -- <a href="https://github.com/DataDog/dd-trace-rb" class="external">https://github.com/DataDog/dd-trace-rb</a> and we're experimenting with using Ractors in our library but run into a few issues.</p>
<a name="Background"></a>
<h3 >Background<a href="#Background" class="wiki-anchor">¶</a></h3>
<p>When running a Ractor as a background process, the Ractor stops & does not restart when the application forks.</p>
<a name="How-to-reproduce-Ruby-version-amp-script"></a>
<h3 >How to reproduce (Ruby version & script)<a href="#How-to-reproduce-Ruby-version-amp-script" class="wiki-anchor">¶</a></h3>
<p><code>ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]</code></p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r2</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="p">{</span> <span class="nb">puts</span> <span class="s2">"[</span><span class="si">#{</span><span class="no">Process</span><span class="p">.</span><span class="nf">pid</span><span class="si">}</span><span class="s2">] Ractor"</span><span class="p">;</span> <span class="nb">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">}</span>
<span class="k">end</span>
<span class="nb">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="nb">puts</span> <span class="s2">"[</span><span class="si">#{</span><span class="no">Process</span><span class="p">.</span><span class="nf">pid</span><span class="si">}</span><span class="s2">] Forking..."</span>
<span class="nb">fork</span> <span class="k">do</span>
<span class="nb">sleep</span><span class="p">(</span><span class="mi">5</span><span class="p">)</span>
<span class="nb">puts</span> <span class="s2">"[</span><span class="si">#{</span><span class="no">Process</span><span class="p">.</span><span class="nf">pid</span><span class="si">}</span><span class="s2">] End fork."</span>
<span class="k">end</span>
<span class="kp">loop</span> <span class="k">do</span>
<span class="nb">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">end</span>
</code></pre>
<a name="Expectation-and-result"></a>
<h3 >Expectation and result<a href="#Expectation-and-result" class="wiki-anchor">¶</a></h3>
<p>The application prints “Ractor” each second in the main process, but not in the fork.</p>
<p>Expected the Ractor (defined as <code>r2</code>) to run in the fork.</p>
<pre><code>[29] Ractor
[29] Ractor
[29] Forking...
[29] Ractor
[29] Ractor
[29] Ractor
[29] Ractor
[29] Ractor
[32] End fork.
[29] Ractor
[29] Ractor
[29] Ractor
</code></pre>
<a name="Additional-notes"></a>
<h3 >Additional notes<a href="#Additional-notes" class="wiki-anchor">¶</a></h3>
<p>Threads do not restart across forks either, so it might not be unreasonable to expect consistent behavior. However, it’s possible to detect a dead Thread and recreate it after a fork (e.g. with <code>#alive?</code>, <code>#status</code>), but there’s no such mechanism for Ractors.</p>
<a name="Suggested-solutions"></a>
<h3 >Suggested solutions<a href="#Suggested-solutions" class="wiki-anchor">¶</a></h3>
<ol>
<li>Auto-restart Ractors after fork</li>
<li>Add additional methods to Ractors that allow users to check & manage the status of the Ractor, similar to Thread.</li>
</ol>
Ruby master - Bug #17677 (Assigned): Ractor crashes fork when blocking
https://redmine.ruby-lang.org/issues/17677
2021-03-08T16:19:22Z
delner (David Elner)
<a name="Background"></a>
<h2 >Background<a href="#Background" class="wiki-anchor">¶</a></h2>
<p>If you create a Ractor which blocks (e.g. <code>receive</code>), then fork the process, the fork will segfault upon completion.</p>
<a name="How-to-reproduce"></a>
<h2 >How to reproduce<a href="#How-to-reproduce" class="wiki-anchor">¶</a></h2>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r2</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">receive</span>
<span class="k">end</span>
<span class="nb">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="nb">puts</span> <span class="s2">"Forking..."</span>
<span class="nb">fork</span> <span class="k">do</span>
<span class="nb">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="nb">puts</span> <span class="s2">"End fork."</span>
<span class="k">end</span>
<span class="kp">loop</span> <span class="k">do</span>
<span class="nb">puts</span> <span class="s2">"Main thread."</span>
<span class="nb">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span>
<span class="k">end</span>
</code></pre>
<a name="Expectation-and-result"></a>
<h2 >Expectation and result<a href="#Expectation-and-result" class="wiki-anchor">¶</a></h2>
<p>Application prints “Main thread” from main process every second, while fork prints “End fork.” then produces a segfault. Main process continues to run.</p>
<p>Expected fork to not raise a segfault.</p>
<pre><code><internal:ractor>:267: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.
Forking...
Main thread.
Main thread.
End fork.
app/sandbox.rb:80: [BUG]: Device or resource busy (EBUSY)
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-linux]
-- Control frame information -----------------------------------------------
c:0003 p:---- s:0011 e:000010 CFUNC :fork
c:0002 p:0048 s:0007 E:001b48 EVAL app/sandbox.rb:80 [FINISH]
c:0001 p:0000 s:0003 E:002590 (none) [FINISH]
-- Ruby level backtrace information ----------------------------------------
app/sandbox.rb:80:in `<main>'
app/sandbox.rb:80:in `fork'
-- C level backtrace information -------------------------------------------
/usr/local/lib/libruby.so.3.0(rb_print_backtrace+0x11) [0x7f9848528cfb] vm_dump.c:758
/usr/local/lib/libruby.so.3.0(rb_vm_bugreport) vm_dump.c:998
/usr/local/lib/libruby.so.3.0(bug_report_end+0x0) [0x7f9848354808] error.c:763
/usr/local/lib/libruby.so.3.0(rb_bug_without_die) error.c:763
/usr/local/lib/libruby.so.3.0(die+0x0) [0x7f98482c6902] error.c:771
/usr/local/lib/libruby.so.3.0(rb_bug) error.c:773
/usr/local/lib/libruby.so.3.0(rb_bug_errno+0x3c) [0x7f9848354a1c] error.c:802
/usr/local/lib/libruby.so.3.0(rb_native_mutex_destroy+0x20) [0x7f98484ce380] thread_pthread.c:444
/usr/local/lib/libruby.so.3.0(rb_native_cond_initialize) (null):0
/usr/local/lib/libruby.so.3.0(ractor_free+0xd) [0x7f984844487d] ractor.c:229
/usr/local/lib/libruby.so.3.0(run_final+0xb) [0x7f9848371c66] gc.c:3670
/usr/local/lib/libruby.so.3.0(finalize_list) gc.c:3689
/usr/local/lib/libruby.so.3.0(rb_objspace_call_finalizer+0x33d) [0x7f984837cc5d] gc.c:3852
/usr/local/lib/libruby.so.3.0(rb_ec_cleanup+0x311) [0x7f984835f0b1] eval.c:184
/usr/local/lib/libruby.so.3.0(ruby_stop+0x9) [0x7f984835f339] eval.c:329
/usr/local/lib/libruby.so.3.0(rb_f_fork+0x1f) [0x7f98484402f8] process.c:4348
/usr/local/lib/libruby.so.3.0(rb_f_fork) process.c:4338
/usr/local/lib/libruby.so.3.0(vm_call_cfunc_with_frame+0x11b) [0x7f984850672b] vm_insnhelper.c:2898
/usr/local/lib/libruby.so.3.0(vm_call_method_each_type+0xf9) [0x7f98485192c9] vm_insnhelper.c:3388
/usr/local/lib/libruby.so.3.0(vm_call_method+0xb4) [0x7f9848519b24] vm_insnhelper.c:3506
/usr/local/lib/libruby.so.3.0(vm_sendish+0xb3) [0x7f984850a3d3] vm_insnhelper.c:4499
/usr/local/lib/libruby.so.3.0(vm_exec_core+0x140) [0x7f98485123e0] insns.def:770
/usr/local/lib/libruby.so.3.0(rb_vm_exec+0x176) [0x7f9848517b26] vm.c:2163
/usr/local/lib/libruby.so.3.0(rb_ec_exec_node+0xd9) [0x7f9848359719] eval.c:317
/usr/local/lib/libruby.so.3.0(ruby_run_node+0x55) [0x7f984835f395] eval.c:375
/usr/local/bin/ruby(main+0x5b) [0x565147e5410b] ./main.c:50
...
Main thread.
Main thread.
Main thread.
</code></pre>
<a name="Additional-notes"></a>
<h2 >Additional notes<a href="#Additional-notes" class="wiki-anchor">¶</a></h2>
<p>This does not happen if a blocking operation does not occur in the Ractor. E.g.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">r2</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="p">{</span> <span class="nb">puts</span> <span class="s2">"[</span><span class="si">#{</span><span class="no">Process</span><span class="p">.</span><span class="nf">pid</span><span class="si">}</span><span class="s2">] Ractor"</span><span class="p">;</span> <span class="nb">sleep</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> <span class="p">}</span>
<span class="k">end</span>
</code></pre>
<p>Segfault can also be prevented by invoking <code>close_incoming</code> prior to forking, although this raises another error internally.</p>
<p>It also does not crash on MacOS 10.15.7: ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin19].</p>
<a name="Suggested-solutions"></a>
<h2 >Suggested solutions<a href="#Suggested-solutions" class="wiki-anchor">¶</a></h2>
<p>(None)</p>
Ruby master - Bug #17578 (Assigned): mkmf experimental C++ Support
https://redmine.ruby-lang.org/issues/17578
2021-01-25T06:26:31Z
cfis (Charlie Savage)
<p>I've been working on the Rice gem (<a href="https://github.com/jasonroelofs/rice" class="external">https://github.com/jasonroelofs/rice</a>) that wraps C++ code for use in Ruby.</p>
<p>I noticed that some c++ support was added to mkmf for Ruby 2.7. However, if I try to use it find a header it fails to work. For example:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="n">find_header</span><span class="p">(</span><span class="s1">'rice.hpp'</span><span class="p">)</span>
</code></pre>
<p>The reason is the conftest uses gcc -E instead of g++ -E. To fix that requires overlading the cpp_command to support C++.</p>
<p>This the fix I have put in that works:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">MakeMakefile</span><span class="p">[</span><span class="s1">'C++'</span><span class="p">].</span><span class="nf">module_eval</span> <span class="k">do</span>
<span class="k">def</span> <span class="nf">cpp_command</span><span class="p">(</span><span class="n">outfile</span><span class="p">,</span> <span class="n">opt</span><span class="o">=</span><span class="s2">""</span><span class="p">)</span>
<span class="n">conf</span> <span class="o">=</span> <span class="n">cc_config</span><span class="p">(</span><span class="n">opt</span><span class="p">)</span>
<span class="k">if</span> <span class="vg">$universal</span> <span class="ow">and</span> <span class="p">(</span><span class="n">arch_flag</span> <span class="o">=</span> <span class="n">conf</span><span class="p">[</span><span class="s1">'ARCH_FLAG'</span><span class="p">])</span> <span class="ow">and</span> <span class="o">!</span><span class="n">arch_flag</span><span class="p">.</span><span class="nf">empty?</span>
<span class="n">conf</span><span class="p">[</span><span class="s1">'ARCH_FLAG'</span><span class="p">]</span> <span class="o">=</span> <span class="n">arch_flag</span><span class="p">.</span><span class="nf">gsub</span><span class="p">(</span><span class="sr">/(?:\G|\s)-arch\s+\S+/</span><span class="p">,</span> <span class="s1">''</span><span class="p">)</span>
<span class="k">end</span>
<span class="no">RbConfig</span><span class="o">::</span><span class="n">expand</span><span class="p">(</span><span class="s2">"$(CXX) -E </span><span class="si">#$INCFLAGS</span><span class="s2"> </span><span class="si">#$CPPFLAGS</span><span class="s2"> </span><span class="si">#$CFLAGS</span><span class="s2"> </span><span class="si">#{</span><span class="n">opt</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="no">CONFTEST_CXX</span><span class="si">}</span><span class="s2"> </span><span class="si">#{</span><span class="n">outfile</span><span class="si">}</span><span class="s2">"</span><span class="p">,</span>
<span class="n">conf</span><span class="p">)</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>The two changes over the default method are:</p>
<p>$(CC) -> $(CXX) -E<br>
#{CONFTEST_c} -> #{CONFTEST_cxx}</p>
<p>Could this change be merged in? I can provide a patch file if you would like.</p>
<p>Last, it wasn't obvious to me how to activate the C++ support in mkfm. I ended up doing this:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="kp">include</span> <span class="no">MakeMakefile</span><span class="p">[</span><span class="s1">'C++'</span><span class="p">]</span>
</code></pre>
<p>Is that correct?</p>
Ruby master - Bug #17516 (Assigned): forking in a ractor causes Ruby to crash
https://redmine.ruby-lang.org/issues/17516
2021-01-06T10:56:50Z
pkmuldoon (Phil Muldoon)
<p>I just want to point out, there's absolutely no reason to do this, but</p>
<p>r = Ractor.new do<br>
Process.fork()<br>
end</p>
<p>Will cause:</p>
<p><a href="internal:ractor" class="external">internal:ractor</a>:267: warning: Ractor is experimental, and the behavior may change in future versions of Ruby! Also there are many implementation issues.<br>
[BUG] rb_thread_terminate_all: called by child thread (0x0000700004ddca40, 0x00007f981b567ee0)<br>
ruby 3.0.0p0 (2020-12-25 revision 95aff21468) [x86_64-darwin20]</p>
<p>-- Crash Report log information --------------------------------------------<br>
See Crash Report log file under the one of following:<br>
* ~/Library/Logs/DiagnosticReports<br>
* /Library/Logs/DiagnosticReports<br>
for more details.<br>
Don't forget to include the above Crash Report log file in bug reports.</p>
<p>-- Control frame information -----------------------------------------------<br>
c:0001 p:---- s:0003 e:000002 (none) [FINISH]</p>
<p>-- C level backtrace information -------------------------------------------<br>
=> #<Ractor:#3 (pry):5 terminated><br>
[4] pry(main)> /Users/phillipmuldoon/.rubies/ruby-3.0.0/bin/ruby(rb_vm_bugreport+0x6cf) [0x103084d1f]<br>
/Users/phillipmuldoon/.rubies/ruby-3.0.0/bin/ruby(rb_bug_without_die+0x206) [0x102e9e2b6]<br>
/Users/phillipmuldoon/.rubies/ruby-3.0.0/bin/ruby(rb_bug+0x71) [0x103091e6b]<br>
/Users/phillipmuldoon/.rubies/ruby-3.0.0/bin/ruby(rb_thread_terminate_all+0x329) [0x10301e5b9]<br>
/Users/phillipmuldoon/.rubies/ruby-3.0.0/bin/ruby(rb_ractor_terminate_all+0xa3) [0x102f8acc3]<br>
/Users/phillipmuldoon/.rubies/ruby-3.0.0/bin/ruby(rb_ec_cleanup+0x229) [0x102ea9299]<br>
/Users/phillipmuldoon/.rubies/ruby-3.0.0/bin/ruby(ruby_stop+0x9) [0x102ea9509]<br>
/Users/phillipmuldoon/.rubies/ruby-3.0.0/bin/ruby(thread_start_func_2+0x8ce) [0x103027fce]<br>
/Users/phillipmuldoon/.rubies/ruby-3.0.0/bin/ruby(thread_start_func_1+0x10d) [0x10302753d]<br>
/usr/lib/system/libsystem_pthread.dylib(_pthread_start+0xe0) [0x7fff20382950]</p>
Ruby master - Bug #16819 (Assigned): Line reporting off by one when reporting line of a hash?
https://redmine.ruby-lang.org/issues/16819
2020-04-27T18:18:58Z
enebo (Thomas Enebo)
tom.enebo@gmail.com
<p>If I run this program:</p>
<pre><code>TracePoint.new(:line) { |t| p t.lineno}.enable
def foo(a, b) # 2
a + b # 3
end # 4
# 5
foo 1, 2 # 6
# 7
A = { # 8
a: 1, # 9
b: 2 # 10
} # 11
</code></pre>
<p>I see:</p>
<pre><code>system ~/work/jruby no_sourceposition * 2388% mri26 ../snippets/ast1.rb
2
6
3
9
</code></pre>
<p>I believe this 9 should be an 8 (it is what we currently emit for JRuby). I tried to figure out why this is the case and I patched RubyVM::AbstractSyntaxTree with the ability to note newline flag:</p>
<pre><code>diff --git a/ast.c b/ast.c
index f0e8dd2eaf..df58006a96 100644
--- a/ast.c
+++ b/ast.c
@@ -7,6 +7,8 @@
#include "vm_core.h"
#include "iseq.h"
+#define RBOOL(v) ((v) ? Qtrue : Qfalse)
+
static VALUE rb_mAST;
static VALUE rb_cNode;
@@ -731,6 +733,16 @@ rb_ast_node_inspect(VALUE self)
return str;
}
+static VALUE
+rb_ast_node_newline(VALUE self)
+{
+ struct ASTNodeData *data;
+ TypedData_Get_Struct(self, struct ASTNodeData, &rb_node_type, data);
+
+ return RBOOL(data->node->flags & NODE_FL_NEWLINE);
+}
+
+
void
Init_ast(void)
{
@@ -756,5 +768,6 @@ Init_ast(void)
rb_define_method(rb_cNode, "last_lineno", rb_ast_node_last_lineno, 0);
rb_define_method(rb_cNode, "last_column", rb_ast_node_last_column, 0);
rb_define_method(rb_cNode, "children", rb_ast_node_children, 0);
+ rb_define_method(rb_cNode, "newline?", rb_ast_node_newline, 0);
rb_define_method(rb_cNode, "inspect", rb_ast_node_inspect, 0);
}
</code></pre>
<p>I also made a simple script:</p>
<pre><code>source = File.read ARGV.shift
root = RubyVM::AbstractSyntaxTree.parse source
def print_node(node, indent = "")
if node.respond_to? :first_lineno
eol = node.newline? ? " <-- newline" : ""
$stdout.write "#{indent}(#{node.type}@#{node.first_lineno-1}-#{node.last_lineno-1})"
case node.type
when :LIT, :STR
puts " = #{node.children[0].inspect}#{eol}"
when :ARRAY
puts eol
node.children[0..-2].each do |child|
print_node(child, indent + " ")
end
when :FCALL
puts " = #{node.children[0]}#{eol}"
node.children[1..-1].each do |child|
print_node(child, indent + " ")
end
else
puts eol
node.children.each do |child|
print_node(child, indent + " ")
end
end
elsif node.nil?
puts "#{indent}nil"
else
puts "#{indent}#{node.inspect}"
end
end
print_node root
puts RubyVM::InstructionSequence.compile(source).disasm
</code></pre>
<p>If I run this I see MRI has line 8 marked as the newline (which JRuby also matches) but if we look at the disasm it would appear compile.c decided to put the line in a different location:</p>
<pre><code>../ruby/ruby --disable-gems ../snippets/ast_mri.rb ../snippets/ast1.rb
(SCOPE@0-10)
[]
nil
(BLOCK@0-10)
(CALL@0-0) <-- newline
(ITER@0-0)
(CALL@0-0)
(CONST@0-0)
:TracePoint
:new
(ARRAY@0-0)
(LIT@0-0) = :line
(SCOPE@0-0)
[:t]
(ARGS@0-0)
1
nil
nil
nil
0
nil
nil
nil
nil
nil
(FCALL@0-0) = p <-- newline
(ARRAY@0-0)
(CALL@0-0)
(DVAR@0-0)
:t
:lineno
nil
:enable
nil
(DEFN@1-3) <-- newline
:foo
(SCOPE@1-3)
[:a, :b]
(ARGS@1-1)
2
nil
nil
nil
0
nil
nil
nil
nil
nil
(OPCALL@2-2) <-- newline
(LVAR@2-2)
:a
:+
(ARRAY@2-2)
(LVAR@2-2)
:b
(FCALL@5-5) = foo <-- newline
(ARRAY@5-5)
(LIT@5-5) = 1
(LIT@5-5) = 2
(CDECL@7-10) <-- newline
:A
(HASH@7-10)
(ARRAY@8-9)
(LIT@8-8) = :a
(LIT@8-8) = 1
(LIT@9-9) = :b
(LIT@9-9) = 2
== disasm: #<ISeq:<compiled>@<compiled>:1 (1,0)-(11,18)> (catch: FALSE)
== catch table
| catch type: break st: 0000 ed: 0013 sp: 0000 cont: 0013
| == disasm: #<ISeq:block in <compiled>@<compiled>:1 (1,22)-(1,39)> (catch: FALSE)
| == catch table
| | catch type: redo st: 0001 ed: 0010 sp: 0000 cont: 0001
| | catch type: next st: 0001 ed: 0010 sp: 0000 cont: 0010
| |------------------------------------------------------------------------
| local table (size: 1, argc: 1 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
| [ 1] t@0<Arg>
| 0000 nop ( 1)[Bc]
| 0001 putself [Li]
| 0002 getlocal_WC_0 t@0
| 0004 opt_send_without_block <callinfo!mid:lineno, argc:0, ARGS_SIMPLE>, <callcache>
| 0007 opt_send_without_block <callinfo!mid:p, argc:1, FCALL|ARGS_SIMPLE>, <callcache>
| 0010 nop
| 0011 leave ( 1)[Br]
|------------------------------------------------------------------------
0000 opt_getinlinecache 7, <is:0> ( 1)[Li]
0003 getconstant :TracePoint
0005 opt_setinlinecache <is:0>
0007 putobject :line
0009 send <callinfo!mid:new, argc:1>, <callcache>, block in <compiled>
0013 nop
0014 opt_send_without_block <callinfo!mid:enable, argc:0, ARGS_SIMPLE>, <callcache>( 1)
0017 pop
0018 putspecialobject 1 ( 2)[Li]
0020 putobject :foo
0022 putiseq foo
0024 opt_send_without_block <callinfo!mid:core#define_method, argc:2, ARGS_SIMPLE>, <callcache>
0027 pop
0028 putself ( 6)[Li]
0029 putobject_INT2FIX_1_
0030 putobject 2
0032 opt_send_without_block <callinfo!mid:foo, argc:2, FCALL|ARGS_SIMPLE>, <callcache>
0035 pop
0036 duphash {:a=>1, :b=>2} ( 9)[Li]
0038 dup ( 8)
0039 putspecialobject 3
0041 setconstant :A
0043 leave
== disasm: #<ISeq:foo@<compiled>:2 (2,0)-(4,3)> (catch: FALSE)
local table (size: 2, argc: 2 [opts: 0, rest: -1, post: 0, block: -1, kw: -1@-1, kwrest: -1])
[ 2] a@0<Arg> [ 1] b@1<Arg>
0000 getlocal_WC_0 a@0 ( 3)[LiCa]
0002 getlocal_WC_0 b@1
0004 opt_plus <callinfo!mid:+, argc:1, ARGS_SIMPLE>, <callcache>
0007 leave ( 4)[Re]
</code></pre>
Ruby master - Bug #16776 (Assigned): Regression in coverage library
https://redmine.ruby-lang.org/issues/16776
2020-04-10T16:39:29Z
deivid (David Rodríguez)
<p>Hi!</p>
<p>I noticed a regression in the coverage library. I tried to write a minimal program to show it, hopefully it gives some clues or where the issue might lie.</p>
<p>In ruby 2.5.8 and earlier, the following program would print <code>{:lines=>[1, 1, nil]}</code>, showing that the body of the "foo" method was run once. However, on newer rubies, it prints <code>{:lines=>[1, 0, nil]}</code>, which is incorrect because the "foo" method body has actually been run once.</p>
<p>This is the repro script:</p>
<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="p">(</span><span class="ss">lines: </span><span class="kp">true</span><span class="p">)</span>
<span class="n">code</span> <span class="o">=</span> <span class="o"><<~</span><span class="no">RUBY</span><span class="sh">
def foo
"LOL"
end
</span><span class="no">RUBY</span>
<span class="no">File</span><span class="p">.</span><span class="nf">open</span><span class="p">(</span><span class="s2">"foo.rb"</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="p">{</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="n">f</span><span class="p">.</span><span class="nf">write</span><span class="p">(</span><span class="n">code</span><span class="p">)</span> <span class="p">}</span>
<span class="nb">require_relative</span> <span class="s2">"foo"</span>
<span class="no">TracePoint</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="ss">:line</span><span class="p">)</span> <span class="k">do</span> <span class="o">|</span><span class="n">_tp</span><span class="o">|</span>
<span class="n">foo</span>
<span class="k">end</span><span class="p">.</span><span class="nf">enable</span> <span class="k">do</span>
<span class="nb">sleep</span> <span class="mi">0</span>
<span class="k">end</span>
<span class="n">res</span> <span class="o">=</span> <span class="no">Coverage</span><span class="p">.</span><span class="nf">result</span>
<span class="nb">puts</span> <span class="n">res</span><span class="p">[</span><span class="no">File</span><span class="p">.</span><span class="nf">expand_path</span><span class="p">(</span><span class="s2">"foo.rb"</span><span class="p">)]</span>
</code></pre>
Ruby master - Bug #16497 (Assigned): StringIO#internal_encoding is broken (more severely in 2.7)
https://redmine.ruby-lang.org/issues/16497
2020-01-10T11:18:31Z
zverok (Victor Shepelev)
zverok.offline@gmail.com
<p>To the best of my understanding from <a href="https://docs.ruby-lang.org/en/master/Encoding.html" class="external">Encoding</a> docs, the following is true:</p>
<ul>
<li>external encoding (explicitly specified or taken from <code>Encoding.default_external</code>) specifies how the IO understands input and stores it internally</li>
<li>internal encoding (explicitly specified or taken from <code>Encoding.default_internal</code>) specifies how the IO converts what it reads.</li>
</ul>
<p>Demonstration with regular files:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="c1"># prepare data</span>
<span class="no">File</span><span class="p">.</span><span class="nf">write</span><span class="p">(</span><span class="s1">'test.txt'</span><span class="p">,</span> <span class="s1">'Україна'</span><span class="p">.</span><span class="nf">encode</span><span class="p">(</span><span class="s1">'KOI8-U'</span><span class="p">),</span> <span class="ss">encoding: </span><span class="s1">'KOI8-U'</span><span class="p">)</span> <span class="c1">#=> 7</span>
<span class="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="n">io</span><span class="p">)</span>
<span class="n">str</span> <span class="o">=</span> <span class="n">io</span><span class="p">.</span><span class="nf">read</span>
<span class="p">[</span><span class="n">io</span><span class="p">.</span><span class="nf">external_encoding</span><span class="p">,</span> <span class="n">io</span><span class="p">.</span><span class="nf">internal_encoding</span><span class="p">,</span> <span class="n">str</span><span class="p">,</span> <span class="n">str</span><span class="p">.</span><span class="nf">encoding</span><span class="p">]</span>
<span class="k">end</span>
<span class="c1"># read it:</span>
<span class="nb">test</span><span class="p">(</span><span class="no">File</span><span class="p">.</span><span class="nf">open</span><span class="p">(</span><span class="s1">'test.txt'</span><span class="p">,</span> <span class="s1">'r:KOI8-U'</span><span class="p">))</span>
<span class="c1"># => [#<Encoding:KOI8-U>, nil, "\xF5\xCB\xD2\xC1\xA7\xCE\xC1", #<Encoding:KOI8-U>]</span>
<span class="c1"># We can specify internal encoding when opening the file:</span>
<span class="nb">test</span><span class="p">(</span><span class="no">File</span><span class="p">.</span><span class="nf">open</span><span class="p">(</span><span class="s1">'test.txt'</span><span class="p">,</span> <span class="s1">'r:KOI8-U:UTF-8'</span><span class="p">))</span>
<span class="c1"># => [#<Encoding:KOI8-U>, #<Encoding:UTF-8>, "Україна", #<Encoding:UTF-8>]</span>
<span class="c1"># ...or when it is already opened</span>
<span class="nb">test</span><span class="p">(</span><span class="no">File</span><span class="p">.</span><span class="nf">open</span><span class="p">(</span><span class="s1">'test.txt'</span><span class="p">).</span><span class="nf">tap</span> <span class="p">{</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="n">f</span><span class="p">.</span><span class="nf">set_encoding</span><span class="p">(</span><span class="s1">'KOI8-U'</span><span class="p">,</span> <span class="s1">'UTF-8'</span><span class="p">)</span> <span class="p">})</span>
<span class="c1"># => [#<Encoding:KOI8-U>, #<Encoding:UTF-8>, "Україна", #<Encoding:UTF-8>]</span>
<span class="c1"># ...or with Encoding.default_internal</span>
<span class="no">Encoding</span><span class="p">.</span><span class="nf">default_internal</span> <span class="o">=</span> <span class="s1">'UTF-8'</span>
<span class="nb">test</span><span class="p">(</span><span class="no">File</span><span class="p">.</span><span class="nf">open</span><span class="p">(</span><span class="s1">'test.txt'</span><span class="p">,</span> <span class="s1">'r:KOI8-U'</span><span class="p">))</span>
<span class="c1"># => [#<Encoding:KOI8-U>, #<Encoding:UTF-8>, "Україна", #<Encoding:UTF-8>]</span>
</code></pre>
<p>But with StringIO, <strong>internal encoding can't be set</strong> in Ruby <strong>2.6</strong>:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s1">'stringio'</span>
<span class="no">Encoding</span><span class="p">.</span><span class="nf">default_internal</span> <span class="o">=</span> <span class="kp">nil</span>
<span class="n">str</span> <span class="o">=</span> <span class="s1">'Україна'</span><span class="p">.</span><span class="nf">encode</span><span class="p">(</span><span class="s1">'KOI8-U'</span><span class="p">)</span>
<span class="c1"># Simplest form:</span>
<span class="nb">test</span><span class="p">(</span><span class="no">StringIO</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">str</span><span class="p">))</span>
<span class="c1"># => [#<Encoding:KOI8-U>, nil, "\xF5\xCB\xD2\xC1\xA7\xCE\xC1", #<Encoding:KOI8-U>]</span>
<span class="c1"># Try to set via mode</span>
<span class="nb">test</span><span class="p">(</span><span class="no">StringIO</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="s1">'r:KOI8-U:UTF-8'</span><span class="p">))</span>
<span class="c1"># => [#<Encoding:KOI8-U>, nil, "\xF5\xCB\xD2\xC1\xA7\xCE\xC1", #<Encoding:KOI8-U>]</span>
<span class="c1"># Try to set via set_encoding:</span>
<span class="nb">test</span><span class="p">(</span><span class="no">StringIO</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="s1">'r:KOI8-U:UTF-8'</span><span class="p">).</span><span class="nf">tap</span> <span class="p">{</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="n">f</span><span class="p">.</span><span class="nf">set_encoding</span><span class="p">(</span><span class="s1">'KOI8-U'</span><span class="p">,</span> <span class="s1">'UTF-8'</span><span class="p">)</span> <span class="p">})</span>
<span class="c1"># => [#<Encoding:KOI8-U>, nil, "\xF5\xCB\xD2\xC1\xA7\xCE\xC1", #<Encoding:KOI8-U>]</span>
<span class="c1"># Try to set via Enoding.default_internal:</span>
<span class="no">Encoding</span><span class="p">.</span><span class="nf">default_internal</span> <span class="o">=</span> <span class="s1">'UTF-8'</span>
<span class="nb">test</span><span class="p">(</span><span class="no">StringIO</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">str</span><span class="p">))</span>
<span class="c1"># => [#<Encoding:KOI8-U>, nil, "\xF5\xCB\xD2\xC1\xA7\xCE\xC1", #<Encoding:KOI8-U>]</span>
</code></pre>
<p>So, in 2.6, any attempt to do something with StringIO's internal encoding are <strong>just ignored</strong>.</p>
<p>In <strong>2.7</strong>, though, matters became much worse:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s1">'stringio'</span>
<span class="no">Encoding</span><span class="p">.</span><span class="nf">default_internal</span> <span class="o">=</span> <span class="kp">nil</span>
<span class="n">str</span> <span class="o">=</span> <span class="s1">'Україна'</span><span class="p">.</span><span class="nf">encode</span><span class="p">(</span><span class="s1">'KOI8-U'</span><span class="p">)</span>
<span class="c1"># Behaves same as 2.6</span>
<span class="nb">test</span><span class="p">(</span><span class="no">StringIO</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">str</span><span class="p">))</span>
<span class="c1"># => [#<Encoding:KOI8-U>, nil, "\xF5\xCB\xD2\xC1\xA7\xCE\xC1", #<Encoding:KOI8-U>]</span>
<span class="c1"># Try to set via mode: WEIRD behavior starts</span>
<span class="nb">test</span><span class="p">(</span><span class="no">StringIO</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="s1">'r:KOI8-U:UTF-8'</span><span class="p">))</span>
<span class="c1"># => [#<Encoding:UTF-8>, nil, "\xF5\xCB\xD2\xC1\xA7\xCE\xC1", #<Encoding:UTF-8>]</span>
<span class="c1"># Try to set via set_encoding: still just ignored</span>
<span class="nb">test</span><span class="p">(</span><span class="no">StringIO</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">str</span><span class="p">,</span> <span class="s1">'r:KOI8-U:UTF-8'</span><span class="p">).</span><span class="nf">tap</span> <span class="p">{</span> <span class="o">|</span><span class="n">f</span><span class="o">|</span> <span class="n">f</span><span class="p">.</span><span class="nf">set_encoding</span><span class="p">(</span><span class="s1">'KOI8-U'</span><span class="p">,</span> <span class="s1">'UTF-8'</span><span class="p">)</span> <span class="p">})</span>
<span class="c1"># => [#<Encoding:KOI8-U>, nil, "\xF5\xCB\xD2\xC1\xA7\xCE\xC1", #<Encoding:KOI8-U>]</span>
<span class="c1"># Try to set via Enoding.default_internal: WEIRD behavior again</span>
<span class="no">Encoding</span><span class="p">.</span><span class="nf">default_internal</span> <span class="o">=</span> <span class="s1">'UTF-8'</span>
<span class="nb">test</span><span class="p">(</span><span class="no">StringIO</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="n">str</span><span class="p">))</span>
<span class="c1"># => [#<Encoding:UTF-8>, nil, "\xF5\xCB\xD2\xC1\xA7\xCE\xC1", #<Encoding:UTF-8>]</span>
</code></pre>
<p>So, <strong>2.7</strong> not just ignores attempts to set <strong>internal</strong> encoding, but erroneously sets it to <strong>external</strong> one, so strings are not recoded, but their encoding is forced to change.</p>
<p>I believe it is severe bug (more severe than 2.6's "just ignoring").</p>
<p><a href="https://www.reddit.com/r/ruby/comments/emd6q4/is_this_a_stringio_bug_in_ruby_270/" class="external">This Reddit thread</a> shows how it breaks existing code:</p>
<ul>
<li>the author uses <code>StringIO</code> to work with <code>ASCII-8BIT</code> strings;</li>
<li>the code is performed in Rails environment (which sets <code>internal_encoding</code> to <code>UTF-8</code> by default);</li>
<li>under <strong>2.7</strong>, <code>StringIO#read</code> returns <code>ASCII-8BIT</code> content in Strings saying their encoding is <code>UTF-8</code>.</li>
</ul>
Ruby master - Bug #15598 (Open): Deadlock on mutual reference of autoloaded constants
https://redmine.ruby-lang.org/issues/15598
2019-02-11T12:39:41Z
akr (Akira Tanaka)
akr@fsij.org
<p>Mutual reference of autoloaded constants can cause deadlock sporadically.</p>
<p>Assume A is defined in a.rb and it uses B at loading time.<br>
Also, B is defined in b.rb and it uses A at loading time.</p>
<pre><code>% cat a.rb
class A
def a1() end
p [__FILE__, __LINE__, B.instance_methods(false)]
def a2() end
end
% cat b.rb
class B
def b1() end
p [__FILE__, __LINE__, A.instance_methods(false)]
def b2() end
end
</code></pre>
<p>If they are loaded via autoload and constants are referenced sequentially,<br>
it works (no error, at least).</p>
<p>However, incomplete A (which a2 is not defined) is appear in b.rb, though.</p>
<pre><code>% cat base_seq.rb
autoload :A, "./a"
autoload :B, "./b"
A
B
% ruby base_seq.rb
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
</code></pre>
<p>However, the constants are referenced in multi threads,<br>
deadlock can occur, or works like sequential version, sporadically.</p>
<pre><code>% cat base_thread_const.rb
autoload :A, "./a"
autoload :B, "./b"
t1 = Thread.new { A }
t2 = Thread.new { B }
t1.join
t2.join
% ruby base_thread_const.rb
Traceback (most recent call last):
1: from base_thread_const.rb:5:in `<main>'
base_thread_const.rb:5:in `join': No live threads left. Deadlock? (fatal)
3 threads, 3 sleeps current:0x000055f9e2fa1b00 main thread:0x000055f9e2ec14b0
* #<Thread:0x000055f9e2eef188 sleep_forever>
rb_thread_t:0x000055f9e2ec14b0 native:0x00007f259bc54b40 int:0
base_thread_const.rb:5:in `join'
base_thread_const.rb:5:in `<main>'
* #<Thread:0x000055f9e31ece30@base_thread_const.rb:3 sleep_forever>
rb_thread_t:0x000055f9e31403c0 native:0x00007f2597e99700 int:0
depended by: tb_thread_id:0x000055f9e2ec14b0
/tmp/h/a.rb:3:in `<class:A>'
/tmp/h/a.rb:1:in `<top (required)>'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
base_thread_const.rb:3:in `block in <main>'
* #<Thread:0x000055f9e31ecbb0@base_thread_const.rb:4 sleep_forever>
rb_thread_t:0x000055f9e2fa1b00 native:0x00007f258ffff700 int:0
/tmp/h/b.rb:3:in `<class:B>'
/tmp/h/b.rb:1:in `<top (required)>'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
base_thread_const.rb:4:in `block in <main>'
% ruby base_thread_const.rb
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
</code></pre>
<p>Also, if "require" is used instead of constant references in the threads,<br>
deadlock can occur (sporadically) too.</p>
<p>Note that incomplete A can appear in b.rb and<br>
incomplete B can appear in a.rb.<br>
The incompleteness vary.</p>
<pre><code>% cat base_thread_require.rb
autoload :A, "./a"
autoload :B, "./b"
t1 = Thread.new { require './a' }
t2 = Thread.new { require './b' }
t1.join
t2.join
% ruby base_thread_require.rb
Traceback (most recent call last):
1: from base_thread_require.rb:5:in `<main>'
base_thread_require.rb:5:in `join': No live threads left. Deadlock? (fatal)
3 threads, 3 sleeps current:0x00005591a27f5190 main thread:0x00005591a24264b0
* #<Thread:0x00005591a24531a0 sleep_forever>
rb_thread_t:0x00005591a24264b0 native:0x00007feced36ab40 int:0
base_thread_require.rb:5:in `join'
base_thread_require.rb:5:in `<main>'
* #<Thread:0x00005591a2754cc8@base_thread_require.rb:3 sleep_forever>
rb_thread_t:0x00005591a27f5190 native:0x00007fece95af700 int:0
depended by: tb_thread_id:0x00005591a24264b0
/tmp/h/a.rb:1:in `<top (required)>'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
base_thread_require.rb:3:in `block in <main>'
* #<Thread:0x00005591a2754a98@base_thread_require.rb:4 sleep_forever>
rb_thread_t:0x00005591a2506b00 native:0x00007fece13ad700 int:0 mutex:0x00005591a27f5190 cond:1
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/tmp/h/b.rb:3:in `<class:B>'
/tmp/h/b.rb:1:in `<top (required)>'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
/home/akr/ruby/o0/lib/ruby/2.7.0/rubygems/core_ext/kernel_require.rb:54:in `require'
base_thread_require.rb:4:in `block in <main>'
% ruby base_thread_require.rb
["/tmp/h/b.rb", 3, []]
["/tmp/h/a.rb", 3, [:b1]]
% repeat 100 (ruby base_thread_require.rb >& /tmp/z && cat /tmp/z)
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/b.rb", 3, []]
["/tmp/h/a.rb", 3, [:b1]]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1]]
["/tmp/h/b.rb", 3, [:a1, :a2]]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, [:b1, :b2]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
["/tmp/h/a.rb", 3, []]
["/tmp/h/b.rb", 3, [:a1]]
</code></pre>
<p>I think there are several ways to solve this issue.</p>
<ul>
<li>Prohibit mutual reference.<br>
I.e. raise an error at autoload constant reference currently loading.<br>
Since mutual reference causes incomplete definition, it is dangerous even with single thread.<br>
However, if real application uses such code, this is incompatible.</li>
<li>More coarse locking.<br>
Since the deadlock is caused because two threads lock the constants in different order:<br>
A to B and B to A.<br>
I think it is possible to fix this issue by locking whole autoloading procedure by<br>
single lock, namely "global autoload lock".<br>
Note that it should also be locked by "require" method if it load a file for autoload.</li>
</ul>
Ruby master - Bug #15550 (Assigned): Windows - gem bin files - can't run from bash shell
https://redmine.ruby-lang.org/issues/15550
2019-01-20T00:45:45Z
MSP-Greg (Greg L)
<p>As I recall, ruby-loco is no longer touching the gem related files located in the bin folder. Previously, there were two files associated with each gem, one with a .cmd/.bat extension, one without.</p>
<p>Currently, there is just one file with a .cmd extension. I have seen this before, and just came across it again, where gems are using *nix scripts run with either the MSYS2 shell or the Git shell in their CI. Hence, there is an expectation for the plain (extensionless) file to exist.</p>
<p>Not sure if this is considered a breaking change or a bug/issue.</p>
<p>Thanks, Greg</p>
Ruby master - Bug #15499 (Assigned): Breaking behavior on ruby 2.6: rb_thread_call_without_gvl do...
https://redmine.ruby-lang.org/issues/15499
2019-01-03T01:37:49Z
apolcyn (alex polcyn)
<p>This issue was noticed when trying to add ruby 2.6 support to the "grpc" ruby gem (this gem is a native C-extension), and was caught by a unit test.</p>
<p>There are several APIs on the grpc ruby gem (<a href="https://github.com/grpc/grpc/tree/master/src/ruby" class="external">https://github.com/grpc/grpc/tree/master/src/ruby</a>) that invoke "rb_thread_call_without_gvl" on the current thread, doing a blocking operation in the "without gvl" callback and cancel that blocking operation in the "unblocking function". These APIs work in ruby versions prior to ruby 2.6 (e.g. ruby 2.5), but have problems when used on ruby 2.6</p>
<p>Minimal repro:</p>
<p>My system:</p>
<pre><code>> lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description: Debian GNU/Linux 9.6 (stretch)
Release: 9.6
Codename: stretch
> ruby -v
ruby 2.6.0p0 (2018-12-25 revision 66547) [x86_64-linux
# I installed ruby 2.6.0 with rvm - https://rvm.io/rvm/install
> GRPC_CONFIG=dbg gem install grpc --platform ruby # build grpc gem from source with debug symbols
</code></pre>
<p>ruby script, "repro.rb" that looks like this:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s1">'grpc'</span>
<span class="n">ch</span> <span class="o">=</span> <span class="no">GRPC</span><span class="o">::</span><span class="no">Core</span><span class="o">::</span><span class="no">Channel</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="s1">'localhost:1234'</span><span class="p">,</span> <span class="p">{},</span> <span class="ss">:this_channel_is_insecure</span><span class="p">)</span>
<span class="n">ch</span><span class="p">.</span><span class="nf">watch_connectivity_state</span><span class="p">(</span><span class="n">ch</span><span class="p">.</span><span class="nf">connectivity_state</span><span class="p">,</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span> <span class="o">+</span> <span class="mi">360</span><span class="p">)</span>
</code></pre>
<p>Run "ruby repro.rb" with an interactive shell, and it will hang there. At this point, ctrl^C the process, and it will not terminate.<br>
What should happen is this unblocking func should be invoked: <a href="https://github.com/grpc/grpc/blob/master/src/ruby/ext/grpc/rb_channel.c#L354" class="external">https://github.com/grpc/grpc/blob/master/src/ruby/ext/grpc/rb_channel.c#L354</a>, but as seen with logging or debuggers, that unblocking func is never ran. Thus the blocking operation never completes and the main thread is stuck.</p>
<p>When the same repro.rb is ran on e.g. ruby 2.5.3 or ruby 2.4.1, the blocking operation is unblocked and the process terminates, as expected, when sending it a SIGINT.</p>
<p>Also note that if the blocking operation is put in a background thread, e.g. with this script:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="nb">require</span> <span class="s1">'grpc'</span>
<span class="n">th</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="n">ch</span> <span class="o">=</span> <span class="no">GRPC</span><span class="o">::</span><span class="no">Core</span><span class="o">::</span><span class="no">Channel</span><span class="p">.</span><span class="nf">new</span><span class="p">(</span><span class="s1">'localhost:1234'</span><span class="p">,</span> <span class="p">{},</span> <span class="ss">:this_channel_is_insecure</span><span class="p">)</span>
<span class="n">ch</span><span class="p">.</span><span class="nf">watch_connectivity_state</span><span class="p">(</span><span class="n">ch</span><span class="p">.</span><span class="nf">connectivity_state</span><span class="p">,</span> <span class="no">Time</span><span class="p">.</span><span class="nf">now</span> <span class="o">+</span> <span class="mi">360</span><span class="p">)</span>
<span class="k">end</span>
<span class="n">th</span><span class="p">.</span><span class="nf">join</span>
</code></pre>
<p>then "unblocking" functions will in fact be invoked upon sending the process a SIGINT, so this looks like a problem specifically with rb_thread_call_without_gvl being used on the main thread.</p>
<p>Please let me know and I can provide more details or alternative repro cases.</p>
<p>Thanks in advance.</p>
Ruby master - Bug #15334 (Open): child_info_fork::abort: address space needed by 'emoji_iso2022_k...
https://redmine.ruby-lang.org/issues/15334
2018-11-23T08:41:53Z
duerst (Martin Dürst)
duerst@it.aoyama.ac.jp
<p>When testing for upgrade to Unicode 11.0.0, I'm running into the following error:</p>
<pre><code>$$ ./ruby test/runner.rb test/ruby/test_m17n.rb
Run options:
# Running tests:
[124/139] TestM17N#test_utf_16_32_inspect(UTF-16BE) 1 [main] ruby 16076 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
3 [main] ruby 9736 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
2 [main] ruby 1108 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
2 [main] ruby 11476 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
2 [main] ruby 12308 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
3 [main] ruby 14096 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
2 [main] ruby 2392 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
3 [main] ruby 13132 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
2 [main] ruby 14772 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
4 [main] ruby 13780 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
4 [main] ruby 10312 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
3 [main] ruby 14936 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
1 [main] ruby 15944 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
2 [main] ruby 14188 child_info_fork::abort: address space needed by 'emoji_iso2022_kddi.so' (0x40000) is already occupied
Finished tests in 43.540324s, 0.0000 tests/s, 0.0000 assertions/s.
0 tests, 0 assertions, 0 failures, 0 errors, 0 skips
Interrupted
</code></pre>
<p>This can go on and on until I interrupt it with Ctrl-C, as done above. The errors happen in the following files:</p>
<pre><code>test/ruby/test_m17n.rb
test/ruby/test_string.rb
test/ruby/test_regexp.rb
</code></pre>
<p>although running just <code>test/ruby/test_string.rb</code> or <code>test/ruby/test_regexp.rb</code> alone works fine, but running <code>test/ruby/test_m17n.rb</code>, even if alone, produces the errors.</p>
<p>The numbers at the start of the error messages are usually very low (as above), but I have seen numbers up to around 27000 also on several occasions but rarely. The file name (<code>emoji_iso2022_kddi.so</code>) and the address (0x40000) are always the same. The numbers after <code>ruby</code> (I guess they are process numbers) vary with each run, as do the numbers at the start.</p>
<p>My current guess is that these errors should not appear if the various <code>.so</code> files are really relocatable, but I'm no expert in linking/loading details.</p>
<p>If there's any other way to run the tests, e.g. with some special option(s) to <code>test/runner.rb</code> or so, I'd appreciate a hint.</p>
Ruby master - Bug #15315 (Open): ec_switch can still lose interrupts
https://redmine.ruby-lang.org/issues/15315
2018-11-18T00:50:29Z
normalperson (Eric Wong)
normalperson@yhbt.net
<p>ec_switch and thread switching may still lose interrupts</p>
<p>trap interrupt is OK because of r64062</p>
<p>Not OK:</p>
<ol>
<li>
<p>postponed job interrupt from MJIT worker<br>
This is trickiest to solve because it also affects thread switching,<br>
not just EC switching</p>
</li>
<li>
<p>pending interrupt is not safe but fixing ec_switch is sufficient because<br>
rb_threadptr_interrupt only targets threads, not EC.</p>
</li>
<li>
<p>timer interrupt is not critical because another interrupt will fire in 100ms</p>
</li>
</ol>
<p>Solutions:</p>
<p>moving interrupt_flag back to rb_thread_t will solve 2 and 3</p>
<ol>
<li>will remain dangerous, we need to add extra checks at thread switching<br>
because MJIT worker may get stuck if target thread stalls or dies.</li>
</ol>
Ruby master - Bug #14727 (Assigned): TestQueue#test_queue_with_trap always timeout on Windows10
https://redmine.ruby-lang.org/issues/14727
2018-05-01T02:27:47Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<p>表題の通りです。ささださんも把握しているそうなので、備忘録として。</p>
<pre><code>[19/35] TestQueue#test_queue_with_trap = 10.13 s
1) Error:
TestQueue#test_queue_with_trap:
Timeout::Error: execution of assert_in_out_err expired timeout (10 sec)
pid 11608 exit 0
|
C:/Users/usa/develop/ruby/core/mytree/test/thread/test_queue.rb:553:in `test_queue_with_trap'
</code></pre>
Ruby master - Bug #14090 (Assigned): `TestGc#test_interrupt_in_finalizer` fails very rarely
https://redmine.ruby-lang.org/issues/14090
2017-11-07T07:35:25Z
mame (Yusuke Endoh)
mame@ruby-lang.org
<p><code>TestGc#test_interrupt_in_finalizer</code> fails very rarely, only once every handred or thousand runs.</p>
<pre><code># Running tests:
[1/1] TestGc#test_interrupt_in_finalizer = 10.13 s
1) Error:
TestGc#test_interrupt_in_finalizer:
Timeout::Error: execution of assert_in_out_err expired
pid 24697 killed by SIGABRT (signal 6) (core dumped)
|
| [BUG] Segmentation fault at 0x000003e800006075
| ruby 2.5.0dev (2017-11-07) [x86_64-linux]
|
| -- Control frame information -----------------------------------------------
|
|
| -- Machine register context ------------------------------------------------
| RIP: 0x00007f80612bb072 RBP: 0x000055c3587e1efc RSP: 0x00007ffc4f8100b0
| RAX: 0xfffffffffffffffc RBX: 0x000055c3587e1ee4 RCX: 0x00007f80612bb072
| RDX: 0x0000000000000000 RDI: 0x000055c3587e1efc RSI: 0x0000000000000080
| R8: 0x00000000000000ca R9: 0x0000000000000000 R10: 0x0000000000000000
| R11: 0x0000000000000246 R12: 0x000055c3587e1ed0 R13: 0x00007ffc4f810110
| R14: 0x000055c3587e1f38 R15: 0x0000000000000003 EFL: 0x0000000000000246
|
| -- C level backtrace information -------------------------------------------
| /home/mame/work/ruby.tmp/ruby(rb_vm_bugreport+0x7d3) [0x55c357e7a333] vm_dump.c:703
| /home/mame/work/ruby.tmp/ruby(rb_bug_context+0xd1) [0x55c357e6de11] error.c:554
| /home/mame/work/ruby.tmp/ruby(sigsegv+0x42) [0x55c357d5e602] signal.c:928
| /lib/x86_64-linux-gnu/libpthread.so.0 [0x7f80612c0150]
| /lib/x86_64-linux-gnu/libpthread.so.0(pthread_cond_wait+0x152) [0x7f80612bb072]
| /home/mame/work/ruby.tmp/ruby(native_sleep.constprop.79+0x1de) [0x55c357d967fe] thread_pthread.c:340
| /home/mame/work/ruby.tmp/ruby(rb_thread_terminate_all+0x1e0) [0x55c357d9aba0] thread.c:507
| /home/mame/work/ruby.tmp/ruby(ruby_cleanup+0x17e) [0x55c357c6078e] eval.c:188
| /home/mame/work/ruby.tmp/ruby(ruby_run_node+0x36) [0x55c357c60aa6] eval.c:302
| /home/mame/work/ruby.tmp/ruby(main+0x5f) [0x55c357c5ca1f] encoding.c:164
|
| -- Other runtime information -----------------------------------------------
|
| * Loaded script: -e
|
| * Loaded features:
|
| 0 enumerator.so
| 1 thread.rb
| 2 rational.so
| 3 complex.so
| 4 /home/mame/work/ruby.tmp/.ext/x86_64-linux/enc/encdb.so
| 5 /home/mame/work/ruby.tmp/.ext/x86_64-linux/enc/trans/transdb.so
| 6 /home/mame/work/ruby.tmp/rbconfig.rb
| 7 /home/mame/work/ruby.tmp/lib/rubygems/compatibility.rb
| 8 /home/mame/work/ruby.tmp/lib/rubygems/defaults.rb
| 9 /home/mame/work/ruby.tmp/lib/rubygems/deprecate.rb
| 10 /home/mame/work/ruby.tmp/lib/rubygems/errors.rb
| 11 /home/mame/work/ruby.tmp/lib/rubygems/version.rb
| 12 /home/mame/work/ruby.tmp/lib/rubygems/requirement.rb
| 13 /home/mame/work/ruby.tmp/lib/rubygems/platform.rb
| 14 /home/mame/work/ruby.tmp/lib/rubygems/basic_specification.rb
| 15 /home/mame/work/ruby.tmp/lib/rubygems/stub_specification.rb
| 16 /home/mame/work/ruby.tmp/lib/rubygems/util/list.rb
| 17 /home/mame/work/ruby.tmp/.ext/x86_64-linux/stringio.so
| 18 /home/mame/work/ruby.tmp/lib/rubygems/specification.rb
| 19 /home/mame/work/ruby.tmp/lib/rubygems/exceptions.rb
| 20 /home/mame/work/ruby.tmp/lib/rubygems/core_ext/kernel_gem.rb
| 21 /home/mame/work/ruby.tmp/lib/monitor.rb
| 22 /home/mame/work/ruby.tmp/lib/rubygems/core_ext/kernel_require.rb
| 23 /home/mame/work/ruby.tmp/lib/rubygems.rb
| 24 /home/mame/work/ruby.tmp/lib/rubygems/dependency.rb
| 25 /home/mame/work/ruby.tmp/lib/rubygems/path_support.rb
|
| * Process memory map:
|
| 55c357c3a000-55c357f55000 r-xp 00000000 fd:01 21892603 /home/mame/work/ruby.tmp/ruby
| 55c358155000-55c35815a000 r--p 0031b000 fd:01 21892603 /home/mame/work/ruby.tmp/ruby
| 55c35815a000-55c35815b000 rw-p 00320000 fd:01 21892603 /home/mame/work/ruby.tmp/ruby
| 55c35815b000-55c35816c000 rw-p 00000000 00:00 0
| 55c3587e1000-55c358b0d000 rw-p 00000000 00:00 0 [heap]
| 7f8058000000-7f8058021000 rw-p 00000000 00:00 0
| 7f8058021000-7f805c000000 ---p 00000000 00:00 0
| 7f805e93f000-7f805eb1e000 r--s 00000000 fd:01 15604574 /lib/x86_64-linux-gnu/libc-2.26.so
| 7f805eb1e000-7f805fb92000 r--s 00000000 fd:01 21892603 /home/mame/work/ruby.tmp/ruby
| 7f805fb92000-7f805fba8000 r-xp 00000000 fd:01 15597591 /lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f805fba8000-7f805fda7000 ---p 00016000 fd:01 15597591 /lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f805fda7000-7f805fda8000 r--p 00015000 fd:01 15597591 /lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f805fda8000-7f805fda9000 rw-p 00016000 fd:01 15597591 /lib/x86_64-linux-gnu/libgcc_s.so.1
| 7f805fda9000-7f805feaa000 rw-p 00000000 00:00 0
| 7f805feaa000-7f805feb3000 r-xp 00000000 fd:01 23333969 /home/mame/work/ruby.tmp/.ext/x86_64-linux/stringio.so
| 7f805feb3000-7f80600b2000 ---p 00009000 fd:01 23333969 /home/mame/work/ruby.tmp/.ext/x86_64-linux/stringio.so
| 7f80600b2000-7f80600b3000 r--p 00008000 fd:01 23333969 /home/mame/work/ruby.tmp/.ext/x86_64-linux/stringio.so
| 7f80600b3000-7f80600b4000 rw-p 00009000 fd:01 23333969 /home/mame/work/ruby.tmp/.ext/x86_64-linux/stringio.so
| 7f80600b4000-7f80600b6000 r-xp 00000000 fd:01 23333689 /home/mame/work/ruby.tmp/.ext/x86_64-linux/enc/trans/transdb.so
| 7f80600b6000-7f80602b6000 ---p 00002000 fd:01 23333689 /home/mame/work/ruby.tmp/.ext/x86_64-linux/enc/trans/transdb.so
| 7f80602b6000-7f80602b7000 r--p 00002000 fd:01 23333689 /home/mame/work/ruby.tmp/.ext/x86_64-linux/enc/trans/transdb.so
| 7f80602b7000-7f80602b8000 rw-p 00003000 fd:01 23333689 /home/mame/work/ruby.tmp/.ext/x86_64-linux/enc/trans/transdb.so
| 7f80602b8000-7f80602ba000 r-xp 00000000 fd:01 23333649 /home/mame/work/ruby.tmp/.ext/x86_64-linux/enc/encdb.so
| 7f80602ba000-7f80604b9000 ---p 00002000 fd:01 23333649 /home/mame/work/ruby.tmp/.ext/x86_64-linux/enc/encdb.so
| 7f80604b9000-7f80604ba000 r--p 00001000 fd:01 23333649 /home/mame/work/ruby.tmp/.ext/x86_64-linux/enc/encdb.so
| 7f80604ba000-7f80604bb000 rw-p 00002000 fd:01 23333649 /home/mame/work/ruby.tmp/.ext/x86_64-linux/enc/encdb.so
| 7f80604bb000-7f8060691000 r-xp 00000000 fd:01 15604574 /lib/x86_64-linux-gnu/libc-2.26.so
| 7f8060691000-7f8060891000 ---p 001d6000 fd:01 15604574 /lib/x86_64-linux-gnu/libc-2.26.so
| 7f8060891000-7f8060895000 r--p 001d6000 fd:01 15604574 /lib/x86_64-linux-gnu/libc-2.26.so
| 7f8060895000-7f8060897000 rw-p 001da000 fd:01 15604574 /lib/x86_64-linux-gnu/libc-2.26.so
| 7f8060897000-7f806089b000 rw-p 00000000 00:00 0
| 7f806089b000-7f80609f0000 r-xp 00000000 fd:01 15604578 /lib/x86_64-linux-gnu/libm-2.26.so
| 7f80609f0000-7f8060bef000 ---p 00155000 fd:01 15604578 /lib/x86_64-linux-gnu/libm-2.26.so
| 7f8060bef000-7f8060bf0000 r--p 00154000 fd:01 15604578 /lib/x86_64-linux-gnu/libm-2.26.so
| 7f8060bf0000-7f8060bf1000 rw-p 00155000 fd:01 15604578 /lib/x86_64-linux-gnu/libm-2.26.so
| 7f8060bf1000-7f8060bfa000 r-xp 00000000 fd:01 15604576 /lib/x86_64-linux-gnu/libcrypt-2.26.so
| 7f8060bfa000-7f8060df9000 ---p 00009000 fd:01 15604576 /lib/x86_64-linux-gnu/libcrypt-2.26.so
| 7f8060df9000-7f8060dfa000 r--p 00008000 fd:01 15604576 /lib/x86_64-linux-gnu/libcrypt-2.26.so
| 7f8060dfa000-7f8060dfb000 rw-p 00009000 fd:01 15604576 /lib/x86_64-linux-gnu/libcrypt-2.26.so
| 7f8060dfb000-7f8060e29000 rw-p 00000000 00:00 0
| 7f8060e29000-7f8060e2c000 r-xp 00000000 fd:01 15604577 /lib/x86_64-linux-gnu/libdl-2.26.so
| 7f8060e2c000-7f806102b000 ---p 00003000 fd:01 15604577 /lib/x86_64-linux-gnu/libdl-2.26.so
| 7f806102b000-7f806102c000 r--p 00002000 fd:01 15604577 /lib/x86_64-linux-gnu/libdl-2.26.so
| 7f806102c000-7f806102d000 rw-p 00003000 fd:01 15604577 /lib/x86_64-linux-gnu/libdl-2.26.so
| 7f806102d000-7f80610ab000 r-xp 00000000 fd:01 12068737 /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
| 7f80610ab000-7f80612ab000 ---p 0007e000 fd:01 12068737 /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
| 7f80612ab000-7f80612ac000 r--p 0007e000 fd:01 12068737 /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
| 7f80612ac000-7f80612ad000 rw-p 0007f000 fd:01 12068737 /usr/lib/x86_64-linux-gnu/libgmp.so.10.3.2
| 7f80612ad000-7f80612c7000 r-xp 00000000 fd:01 15604589 /lib/x86_64-linux-gnu/libpthread-2.26.so
| 7f80612c7000-7f80614c6000 ---p 0001a000 fd:01 15604589 /lib/x86_64-linux-gnu/libpthread-2.26.so
| 7f80614c6000-7f80614c7000 r--p 00019000 fd:01 15604589 /lib/x86_64-linux-gnu/libpthread-2.26.so
| 7f80614c7000-7f80614c8000 rw-p 0001a000 fd:01 15604589 /lib/x86_64-linux-gnu/libpthread-2.26.so
| 7f80614c8000-7f80614cc000 rw-p 00000000 00:00 0
| 7f80614cc000-7f80614f3000 r-xp 00000000 fd:01 15602223 /lib/x86_64-linux-gnu/ld-2.26.so
| 7f8061592000-7f80615b6000 r--s 00000000 fd:01 15604589 /lib/x86_64-linux-gnu/libpthread-2.26.so
| 7f80615b6000-7f80616bc000 rw-p 00000000 00:00 0
| 7f80616cb000-7f80616cc000 ---p 00000000 00:00 0
| 7f80616cc000-7f80616ec000 rw-p 00000000 00:00 0
| 7f80616ec000-7f80616ed000 ---p 00000000 00:00 0
| 7f80616ed000-7f80616f3000 rw-p 00000000 00:00 0
| 7f80616f3000-7f80616f4000 r--p 00027000 fd:01 15602223 /lib/x86_64-linux-gnu/ld-2.26.so
| 7f80616f4000-7f80616f5000 rw-p 00028000 fd:01 15602223 /lib/x86_64-linux-gnu/ld-2.26.so
| 7f80616f5000-7f80616f6000 rw-p 00000000 00:00 0
| 7ffc4f013000-7ffc4f812000 rw-p 00000000 00:00 0 [stack]
| 7ffc4f904000-7ffc4f907000 r--p 00000000 00:00 0 [vvar]
| 7ffc4f907000-7ffc4f909000 r-xp 00000000 00:00 0 [vdso]
| ffffffffff600000-ffffffffff601000 r-xp 00000000 00:00 0 [vsyscall]
|
|
| [NOTE]
| You may have encountered a bug in the Ruby interpreter or extension libraries.
| Bug reports are welcome.
| For details: http://www.ruby-lang.org/bugreport.html
|
/home/mame/work/ruby.tmp/test/ruby/test_gc.rb:354:in `test_interrupt_in_finalizer'
Finished tests in 10.127763s, 0.0987 tests/s, 0.2962 assertions/s.
1 tests, 3 assertions, 0 failures, 1 errors, 0 skips
</code></pre>
<a name="How-to-reproduce"></a>
<h2 >How to reproduce<a href="#How-to-reproduce" class="wiki-anchor">¶</a></h2>
<ol>
<li>Apply this patch. This removes a mitigation of this issue.</li>
</ol>
<pre><code>diff --git a/thread.c b/thread.c
index bfa903c6a4..dfaf75d1ce 100644
--- a/thread.c
+++ b/thread.c
@@ -507,7 +507,7 @@ rb_thread_terminate_all(void)
* me when the last sub-thread exit.
*/
sleeping = 1;
- native_sleep(th, &tv);
+ native_sleep(th, 0);
RUBY_VM_CHECK_INTS_BLOCKING(ec);
sleeping = 0;
}
</code></pre>
<ol start="2">
<li>Run <code>make test-all</code> many times. The following command would be useful.</li>
</ol>
<pre><code>make && while make test-all TESTOPTS="test/ruby/test_gc.rb -n test_interrupt_in_finalizer"; do date; done
</code></pre>
<p>FYI: With execution counter</p>
<pre><code>make && i=0 && while make test-all TESTOPTS="test/ruby/test_gc.rb -n test_interrupt_in_finalizer"; do echo; date; echo "trial:$i"; i=`expr $i + 1`; done
</code></pre>
<a name="Details"></a>
<h2 >Details<a href="#Details" class="wiki-anchor">¶</a></h2>
<p><code>TestGc#test_interrupt_in_finalizer</code> checks if SIGINT can interrupt the GC finalizers. This test itself runs on a child process, and the process should end with SIGINT. If the process does not end in ten seconds, the parent sends SIGSEGV to the child, terminates the test, and reports it as a failure. ("C level backtrace information" has "sigsegv", but don't worry, this SEGV would be the one the parent sent. I guess this bug is not so significant, parhaps.)</p>
<p>When a main thread of Ruby process ends, it terminates all child threads and waits for them. However, for unknown reason (maybe depending upon the timing of SIGINT?), it sometimes fails synchronization: all child threads end, and the main thread meaninglessly waits forever.</p>
<p>Based on Ko1's proposal, I committed a tiny change to mitigate this issue at r60694: instead of waiting forever, the main thread wakes up every one second to monitor all child threads. This is not an essential solution for this issue, but just hides. To debug this issue, we need remove the mitigation by the patch described above.</p>
Ruby master - Bug #13999 (Assigned): Cygwin 環境で ripper_state_lex.rb がコアダンプする
https://redmine.ruby-lang.org/issues/13999
2017-10-11T05:19:02Z
higaki (masaru higaki)
mas.higa@gmail.com
<p>いくつかの gem をインストールした際にコアダンプしました。</p>
<p>--no-ri を付けるとコアダンプしないことから ri の何かが関係していそうです。</p>
<p>$ gem install bitclust-core # コアダンプ<br>
$ gem install --no-ri bitclust-core # コアダンプしない</p>
<p>標準出力、エラー出力を添付します。</p>
Ruby master - Bug #13671 (Assigned): Regexp with lookbehind and case-insensitivity raises RegexpE...
https://redmine.ruby-lang.org/issues/13671
2017-06-22T23:28:58Z
dschweisguth (Dave Schweisguth)
dave@schweisguth.org
<p>Here is a test program:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">test</span><span class="p">(</span><span class="n">description</span><span class="p">)</span>
<span class="k">begin</span>
<span class="k">yield</span>
<span class="nb">puts</span> <span class="s2">"</span><span class="si">#{</span><span class="n">description</span><span class="si">}</span><span class="s2"> is OK"</span>
<span class="k">rescue</span> <span class="no">RegexpError</span>
<span class="nb">puts</span> <span class="s2">"</span><span class="si">#{</span><span class="n">description</span><span class="si">}</span><span class="s2"> raises RegexpError"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="nb">test</span><span class="p">(</span><span class="s2">"ass, case-insensitive, special"</span><span class="p">)</span> <span class="p">{</span> <span class="sr">/(?<!ass)/i</span> <span class="o">=~</span> <span class="s1">'✨'</span> <span class="p">}</span>
<span class="nb">test</span><span class="p">(</span><span class="s2">"bss, case-insensitive, special"</span><span class="p">)</span> <span class="p">{</span> <span class="sr">/(?<!bss)/i</span> <span class="o">=~</span> <span class="s1">'✨'</span> <span class="p">}</span>
<span class="nb">test</span><span class="p">(</span><span class="s2">"as, case-insensitive, special"</span><span class="p">)</span> <span class="p">{</span> <span class="sr">/(?<!as)/i</span> <span class="o">=~</span> <span class="s1">'✨'</span> <span class="p">}</span>
<span class="nb">test</span><span class="p">(</span><span class="s2">"ss, case-insensitive, special"</span><span class="p">)</span> <span class="p">{</span> <span class="sr">/(?<!ss)/i</span> <span class="o">=~</span> <span class="s1">'✨'</span> <span class="p">}</span>
<span class="nb">test</span><span class="p">(</span><span class="s2">"ass, case-sensitive, special"</span><span class="p">)</span> <span class="p">{</span> <span class="sr">/(?<!ass)/</span> <span class="o">=~</span> <span class="s1">'✨'</span> <span class="p">}</span>
<span class="nb">test</span><span class="p">(</span><span class="s2">"ass, case-insensitive, regular"</span><span class="p">)</span> <span class="p">{</span> <span class="sr">/(?<!ass)/i</span> <span class="o">=~</span> <span class="s1">'x'</span> <span class="p">}</span>
</code></pre>
<p>Running the test program with Ruby 2.4.1 (macOS) gives</p>
<pre><code>ass, case-insensitive, special raises RegexpError
bss, case-insensitive, special raises RegexpError
as, case-insensitive, special is OK
ss, case-insensitive, special is OK
ass, case-sensitive, special is OK
ass, case-insensitive, regular is OK
</code></pre>
<p>The RegexpError is "invalid pattern in look-behind: /(?<!ass)/i (RegexpError)"</p>
<p>Side note: in the real code in which I found this error I was able to work around the error by using (?i) after the lookbehind instead of //i.</p>
<p>Running the test program with Ruby 2.3.4 does not report any RegexpErrors.</p>
<p>I think this is a regression, although I might be wrong and it might be saving me from an incorrect result with certain strings.</p>
Ruby master - Bug #13164 (Open): A second `SystemStackError` exception results in `Segmentation ...
https://redmine.ruby-lang.org/issues/13164
2017-01-27T13:41:42Z
myst (Boaz Segev)
<p>This issue is was exposed by leveraging the fact that <code>Object#hash</code> is implemented recursively for core Ruby datatypes (i.e., Hash and Array). See the discussion here: <a href="https://github.com/boazsegev/combine_pdf/pull/91#issuecomment-275552131" class="external">https://github.com/boazsegev/combine_pdf/pull/91#issuecomment-275552131</a>.</p>
<p>TO reproduce the issue, explode the stack <strong>twice</strong>.</p>
<p>Expected results:</p>
<p>SystemStackError will be raised both times.</p>
<p>Actual results:</p>
<p>SystemStackError is raised once. The second time will cause a core dump.</p>
<p>Code to cause core dump:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">def</span> <span class="nf">compute_nest_depth</span>
<span class="n">h</span> <span class="o">=</span> <span class="p">{</span><span class="ss">nest: </span><span class="p">{}}</span>
<span class="n">nest</span> <span class="o">=</span> <span class="n">h</span><span class="p">[</span><span class="ss">:nest</span><span class="p">]</span>
<span class="n">i</span> <span class="o">=</span> <span class="mi">0</span>
<span class="k">while</span> <span class="kp">true</span>
<span class="n">i</span> <span class="o">+=</span> <span class="mi">1</span>
<span class="nb">puts</span> <span class="s2">"nested </span><span class="si">#{</span><span class="n">i</span><span class="si">}</span><span class="s2">"</span> <span class="k">if</span> <span class="p">((</span><span class="n">i</span> <span class="o">&</span> <span class="mi">511</span><span class="p">)</span> <span class="o">==</span> <span class="mi">0</span><span class="p">)</span>
<span class="n">next_nest</span> <span class="o">=</span> <span class="p">{</span> <span class="ss">nest: </span><span class="p">{}</span> <span class="p">}</span>
<span class="n">nest</span><span class="p">[</span><span class="ss">:nest</span><span class="p">]</span> <span class="o">=</span> <span class="n">next_nest</span>
<span class="n">nest</span> <span class="o">=</span> <span class="n">next_nest</span><span class="p">[</span><span class="ss">:nest</span><span class="p">]</span>
<span class="n">h</span><span class="p">.</span><span class="nf">hash</span>
<span class="k">end</span>
<span class="k">rescue</span> <span class="no">SystemStackError</span>
<span class="nb">puts</span> <span class="s2">"Stack exploded at nesting </span><span class="si">#{</span><span class="n">i</span><span class="si">}</span><span class="s2">"</span>
<span class="k">end</span>
<span class="n">counter</span> <span class="o">=</span> <span class="mi">0</span><span class="p">;</span>
<span class="k">while</span><span class="p">(</span><span class="kp">true</span><span class="p">)</span>
<span class="k">begin</span>
<span class="n">counter</span> <span class="o">+=</span><span class="mi">1</span>
<span class="nb">puts</span> <span class="s2">"starting test </span><span class="si">#{</span><span class="n">counter</span><span class="si">}</span><span class="s2">"</span>
<span class="n">compute_nest_depth</span>
<span class="k">rescue</span> <span class="no">SystemStackError</span> <span class="o">=></span> <span class="n">e</span>
<span class="kp">nil</span>
<span class="k">ensure</span>
<span class="nb">puts</span> <span class="s2">"test </span><span class="si">#{</span><span class="n">counter</span><span class="si">}</span><span class="s2"> complete"</span>
<span class="k">end</span>
<span class="k">end</span>
</code></pre>
<p>results:</p>
<pre><code>starting test 1
nested 512
nested 1024
nested 1536
nested 2048
nested 2560
Stack exploded at nesting 2783
test 1 complete
starting test 2
nested 512
nested 1024
nested 1536
nested 2048
nested 2560
Segmentation fault (core dumped)
</code></pre>
Ruby master - Bug #12725 (Assigned): Trying to use ./miniruby before it exists
https://redmine.ruby-lang.org/issues/12725
2016-09-05T05:04:23Z
duerst (Martin Dürst)
duerst@it.aoyama.ac.jp
Ruby master - Bug #12582 (Assigned): OpenSSL Authenticated Encryption should check for tag length
https://redmine.ruby-lang.org/issues/12582
2016-07-11T07:35:30Z
patrick.oscity (Patrick Oscity)
<p>The current API for using ciphers with Authenticated Encryption (currently only AES-GCM) is rather misleading and quickly leads to subtle bugs related to the length of <code>auth_tag</code>.</p>
<p>In particular, the current implementation will <em>not</em> check for the length of the <code>auth_tag</code>. Because GCM mode allows arbitrary sizes of the <code>auth_tag</code> up to 128 bytes, only a single byte needs to be supplied to make the authentication pass. This means that an attacker needs at most 256 attempts in order to forge a valid <code>auth_tag</code>.</p>
<pre><code>data = 'secret'
cipher = OpenSSL::Cipher.new('aes-128-gcm')
cipher.encrypt
key = cipher.random_key
iv = cipher.random_iv
cipher.auth_data = 'auth_data'
ciphertext = cipher.update(data) + cipher.final
auth_tag = cipher.auth_tag
auth_tag = auth_tag[0] # single byte is sufficient
cipher = OpenSSL::Cipher.new('aes-128-gcm')
cipher.decrypt
cipher.key = key
cipher.iv = iv
cipher.auth_tag = auth_tag
cipher.auth_data = 'auth_data'
data = cipher.update(ciphertext) + cipher.final
# NO error raised
</code></pre>
<p>Currently, the only way to prevent such attacks is to manually assert the correct <code>auth_tag</code> length when decrypting/authenticating.</p>
<pre><code>raise 'incorrect auth_tag length' unless auth_tag.length == 16
</code></pre>
<p>I suggest the following improvements:</p>
<a name="Documentation-should-mention-the-importance-of-manually-checking-auth_tag-length"></a>
<h3 >Documentation should mention the importance of manually checking <code>auth_tag</code> length<a href="#Documentation-should-mention-the-importance-of-manually-checking-auth_tag-length" class="wiki-anchor">¶</a></h3>
<p>This can/should be done immediately even if the API should not change.</p>
<a name="Authentication-tag-length-should-be-an-input-parameter-to-the-cipher"></a>
<h3 >Authentication tag length should be an input parameter to the cipher<a href="#Authentication-tag-length-should-be-an-input-parameter-to-the-cipher" class="wiki-anchor">¶</a></h3>
<p>To improve the usability of the API and unburden users from performing additional manual checks without compromising security, I suggest to add an <code>auth_tag_len</code> accessor. This can be used to determine the size of the <code>auth_tag</code> both when generating and when authenticating the <code>auth_tag</code>. The default value should be 16 bytes (see below).</p>
<h3>
<code>#auth_tag</code> should use <code>auth_tag_len</code> to determine the output length</h3>
<p>During encryption:</p>
<p>If no parameter is given, <code>#auth_tag</code> should return an authentication tag according to the length configured in <code>auth_tag_len</code>.</p>
<p>If a length parameter is given, <code>#auth_tag</code> should use the supplied parameter to determine the length of the authentication tag. Although this parameter is not as useful any more it should be kept for backwards compatibility. Maybe it should be deprecated.</p>
<p>Currently the API supports different tag lengths by passing the length parameter to <code>#auth_tag</code>. This currently defaults to 16 bytes, which should be the default value for <code>auth_tag_len</code> in order to keep backwards compatibility.</p>
<h3>
<code>#final</code> should use <code>auth_tag_len</code> to assert the correct length of the <code>auth_tag</code>
</h3>
<p>During decryption:</p>
<p><code>auth_tag_len</code> should be used to assert that the supplied <code>auth_tag</code> has the correct length. The big difference to the existing API lies here, because users need to actively change the value of <code>auth_tag_len</code> in order to allow shorter tags.</p>
<p>When the check fails, an <code>OpenSSL::Cipher::CipherError</code> should be raised. The same type of error is already raised when authentication fails, so existing users should be fine without having to touch their error handling. A descriptive error message should be helpful. In order to distinguish between such errors and "actual" verification errors, we could also add a descriptive message for the latter.</p>
<p>I'd be happy to implement these changes, but I wanted to discuss them first.</p>
Ruby master - Bug #12506 (Assigned): On cygwin, Feature #5994 does not work
https://redmine.ruby-lang.org/issues/12506
2016-06-19T08:18:47Z
duerst (Martin Dürst)
duerst@it.aoyama.ac.jp
<p>On cygwin, Feature <a class="issue tracker-2 status-5 priority-4 priority-default closed" title="Feature: Dir.glob without wildcards returns pattern, not filename (Closed)" href="https://redmine.ruby-lang.org/issues/5994">#5994</a> doesn't seem to have been implemented. This can be confirmed with test/ruby/test_dir.rb (see the very end of this report), or even simpler, as follows:</p>
<pre><code>duerst@Arnisee /cygdrive/c/Data/testCygwin
$ ruby -e 'Dir.mkdir("Matsumoto")'
duerst@Arnisee /cygdrive/c/Data/testCygwin
$ ruby -e 'puts Dir.glob("Ma*to")'
Matsumoto
duerst@Arnisee /cygdrive/c/Data/testCygwin
$ ruby -e 'puts Dir.glob("ma*to")'
duerst@Arnisee /cygdrive/c/Data/testCygwin
$ ruby -e 'puts Dir.glob("matsumoto")'
matsumoto
</code></pre>
<p>The 4th execution shows the problem. Please note that the third execution is also strange.</p>
<pre><code>$ bin/ruby test/runner.rb test/ruby/test_dir.rb
Run options:
# Running tests:
[10/23] TestDir#test_glob_cases = 0.11 s
1) Failure:
TestDir#test_glob_cases [/cygdrive/c/Data/ruby/test/ruby/test_dir.rb:255]:
<a href="/issues/5994">[ruby-core:42469]</a> [Feature #5994]
Dir.glob should return the filename with actual cases on the filesystem.
<["FileWithCases"]> expected but was
<["filewithcases"]>.
Finished tests in 3.294094s, 6.9822 tests/s, 77.7148 assertions/s.
23 tests, 256 assertions, 1 failures, 0 errors, 0 skips
ruby -v: ruby 2.4.0dev (2016-06-19 trunk 55452) [x86_64-cygwin]
</code></pre>
Ruby master - Bug #12445 (Assigned): Testing TestIO#test_open_fifo_does_not_block_other_threads r...
https://redmine.ruby-lang.org/issues/12445
2016-05-31T10:15:12Z
duerst (Martin Dürst)
duerst@it.aoyama.ac.jp
<p>When I run <code>bin/ruby test/runner.rb test/ruby/test_*</code>, testing stops at <code>TestIO#test_open_fifo_does_not_block_other_threads</code>. Checking the task manager shows that this is a deadlock (there are two ruby interpreters running, but they don't use any CPU at all).</p>
<p>This is what I see for ages:</p>
<pre><code>[1589/4545] TestIO#test_open_fifo_does_not_block_other_threads
</code></pre>
Ruby master - Bug #12444 (Assigned): Segmentation fault when running TestException#test_machine_s...
https://redmine.ruby-lang.org/issues/12444
2016-05-31T10:10:48Z
duerst (Martin Dürst)
duerst@it.aoyama.ac.jp
<p>When I try to run <code>bin/ruby test/runner.rb test/ruby/test_*</code>, I get the error below. This is immediately followed by a very similar error for TestException#test_machine_stackoverflow_by_define_method.</p>
<pre><code>[ 942/4545] TestException#test_machine_stackoverflow = 1.27 s
19) Failure:
TestException#test_machine_stackoverflow [/cygdrive/c/Data/ruby/test/ruby/test_exception.rb:577]:
pid 16416 killed by SIGABRT (signal 6) (core dumped)
| -:7: [BUG] Segmentation fault at 0x000000ffe03fc0
| ruby 2.4.0dev (2016-05-31 trunk 55228) [x86_64-cygwin]
|
| -- Control frame information -----------------------------------------------
| c:0690 p:0014 s:1387 e:001386 LAMBDA -:7 [FINISH]
| c:0689 p:0014 s:1385 e:001384 LAMBDA -:7 [FINISH]
| c:0688 p:0014 s:1383 e:001382 LAMBDA -:7 [FINISH]
| c:0687 p:0014 s:1381 e:001380 LAMBDA -:7 [FINISH]
| c:0686 p:0014 s:1379 e:001378 LAMBDA -:7 [FINISH]
| c:0685 p:0014 s:1377 e:001376 LAMBDA -:7 [FINISH]
| c:0684 p:0014 s:1375 e:001374 LAMBDA -:7 [FINISH]
| c:0683 p:0014 s:1373 e:001372 LAMBDA -:7 [FINISH]
| c:0682 p:0014 s:1371 e:001370 LAMBDA -:7 [FINISH]
| c:0681 p:0014 s:1369 e:001368 LAMBDA -:7 [FINISH]
</code></pre>
<p>[very long list, ending in]</p>
<pre><code>| c:0009 p:0014 s:0025 e:000024 LAMBDA -:7 [FINISH]
| c:0008 p:0014 s:0023 e:000022 LAMBDA -:7 [FINISH]
| c:0007 p:0014 s:0021 e:000020 LAMBDA -:7 [FINISH]
| c:0006 p:0014 s:0019 e:000018 LAMBDA -:7 [FINISH]
| c:0005 p:0014 s:0017 e:000016 LAMBDA -:7 [FINISH]
| c:0004 p:0028 s:0015 E:001588 BLOCK -:8
| c:0003 p:0052 s:0012 e:000011 METHOD /cygdrive/c/Data/ruby/test/lib/test/unit/assertions.rb:74
| c:0002 p:0047 s:0004 E:000610 EVAL -:6 [FINISH]
| c:0001 p:0000 s:0002 E:001930 (none) [FINISH]
|
| -- Ruby level backtrace information ----------------------------------------
| -:6:in `<main>'
| /cygdrive/c/Data/ruby/test/lib/test/unit/assertions.rb:74:in `assert_raise'
| -:8:in `block in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
</code></pre>
<p>[again very long list, probably about same length, ending with]</p>
<pre><code>| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
| -:7:in `block (2 levels) in <main>'
|
| -- Other runtime information -----------------------------------------------
|
| * Loaded script: -
|
| * Loaded features:
|
| 0 enumerator.so
| 1 thread.rb
| 2 rational.so
| 3 complex.so
| 4 /cygdrive/c/Data/ruby/lib/ruby/2.4.0/x86_64-cygwin/enc/encdb.so
| 5 /cygdrive/c/Data/ruby/lib/ruby/2.4.0/x86_64-cygwin/enc/trans/transdb.so
| 6 /cygdrive/c/Data/ruby/lib/ruby/2.4.0/x86_64-cygwin/enc/windows_31j.so
| 7 /cygdrive/c/Data/ruby/lib/ruby/vendor_ruby/unicode_normalize.rb
| 8 /cygdrive/c/Data/ruby/lib/ruby/vendor_ruby/optparse.rb
| 9 /cygdrive/c/Data/ruby/lib/ruby/2.4.0/x86_64-cygwin/rbconfig.rb
| 10 /cygdrive/c/Data/ruby/test/lib/leakchecker.rb
| 11 /cygdrive/c/Data/ruby/test/lib/minitest/unit.rb
| 12 /cygdrive/c/Data/ruby/lib/ruby/vendor_ruby/prettyprint.rb
| 13 /cygdrive/c/Data/ruby/lib/ruby/vendor_ruby/pp.rb
| 14 /cygdrive/c/Data/ruby/test/lib/test/unit/assertions.rb
| 15 /cygdrive/c/Data/ruby/lib/ruby/vendor_ruby/open3.rb
| 16 /cygdrive/c/Data/ruby/lib/ruby/vendor_ruby/timeout.rb
| 17 /cygdrive/c/Data/ruby/test/lib/find_executable.rb
| 18 /cygdrive/c/Data/ruby/lib/ruby/2.4.0/x86_64-cygwin/rbconfig/sizeof.so
| 19 /cygdrive/c/Data/ruby/test/lib/envutil.rb
| 20 /cygdrive/c/Data/ruby/test/lib/test/unit/testcase.rb
| 21 /cygdrive/c/Data/ruby/test/lib/test/unit.rb
|
| [NOTE]
| You may have encountered a bug in the Ruby interpreter or extension libraries.
| Bug reports are welcome.
| For details: http://www.ruby-lang.org/bugreport.html
|
</code></pre>
Ruby master - Bug #12442 (Assigned): TestArgf#test_textmode fails on cygwin
https://redmine.ruby-lang.org/issues/12442
2016-05-31T10:01:19Z
duerst (Martin Dürst)
duerst@it.aoyama.ac.jp
<p>When I try to run <code>bin/ruby test/runner.rb test/ruby/test_*</code> (because <code>make test-all</code> doesn't work), the first failure that I get is as below.</p>
<pre><code>$ bin/ruby test/runner.rb test/ruby/test_*
Run options:
# Running tests:
[ 156/4545] TestArgf#test_textmode = 1.60 s
1) Failure:
TestArgf#test_textmode [/cygdrive/c/Data/ruby/test/ruby/test_argf.rb:685]:
<a href="/issues/5268">[ruby-core:39234]</a>.
<"1\n2\n3\n4\n5\n6\n"> expected but was
<"1\n2\n3\n4\n5\r\n6\r\n">.
</code></pre>
Ruby master - Bug #12179 (Open): Build failure due to VPATH expansion
https://redmine.ruby-lang.org/issues/12179
2016-03-15T17:19:40Z
rhenium (Kazuki Yamaguchi)
k@rhe.jp
<p>On my environment (GNU Make 4.1), I can reproduce in this way:</p>
<pre><code class="sh syntaxhl" data-language="sh"><span class="nb">cd</span> /tmp
svn co http://svn.ruby-lang.org/repos/ruby/trunk ruby-src
<span class="nb">cd </span>ruby-src
autoconf <span class="o">&&</span> ./configure
<span class="nb">mkdir</span> <span class="nt">-p</span> /tmp/.ext/.timestamp/
<span class="nb">touch</span> /tmp/.ext/.timestamp/.RUBYARCHDIR.-.-test-.-.fatal.time
make <span class="nv">V</span><span class="o">=</span>1
</code></pre>
<p>results in:</p>
<pre><code>...
make[2]: Entering directory '/tmp/ruby-src/ext/-test-/fatal'
rm -f ../../../.ext/x86_64-linux/-test-/fatal/rb_fatal.so
gcc -shared -o ../../../.ext/x86_64-linux/-test-/fatal/rb_fatal.so rb_fatal.o -L. -L../../.. -L. -fstack-protector -rdynamic -Wl,-export-dynamic -lpthread -lgmp -ldl -lcrypt -lm -lc
/usr/bin/ld: cannot open output file ../../../.ext/x86_64-linux/-test-/fatal/rb_fatal.so: No such file or directory
collect2: error: ld returned 1 exit status
Makefile:260: recipe for target '../../../.ext/x86_64-linux/-test-/fatal/rb_fatal.so' failed
make[2]: *** [../../../.ext/x86_64-linux/-test-/fatal/rb_fatal.so] Error 1
make[2]: Leaving directory '/tmp/ruby-src/ext/-test-/fatal'
exts.mk:88: recipe for target 'ext/-test-/fatal/all' failed
...
</code></pre>
<p>This error happens because <code>/tmp/ruby-src/.ext/x86_64-linux/-test-/fatal</code> is not properly created.</p>
<p>This is because of the VPATH set in <code>ext/-test-/fatal/Makefile</code>:</p>
<pre><code>srcdir = $(top_srcdir)/ext/-test-/fatal
topdir = ../../..
hdrdir = $(top_srcdir)/include
arch_hdrdir = $(extout)/include/$(arch)
VPATH = $(srcdir):$(arch_hdrdir)/ruby:$(hdrdir)/ruby
extout = $(topdir)/.ext
TIMESTAMP_DIR = $(extout)/.timestamp
$(TIMESTAMP_DIR)/.RUBYARCHDIR.-.-test-.-.fatal.time:
$(Q) $(MAKEDIRS) $(@D) $(RUBYARCHDIR)
$(Q) $(TOUCH) $@
$(RUBYARCHDIR)/$(DLLIB): $(OBJS) Makefile $(TIMESTAMP_DIR)/.RUBYARCHDIR.-.-test-.-.fatal.time
$(ECHO) linking shared-object -test-/fatal/$(DLLIB)
...
</code></pre>
<p><code>$(TIMESTAMP_DIR)/.RUBYARCHDIR.-.-test-.-.fatal.time</code> target should create the directory prior to linking, but it doesn't work.<br>
Since the Makefile has VPATH, make wrongly finds <code>$(TIMESTAMP_DIR)/.RUBYARCHDIR.-.-test-.-.fatal.time</code> at <code>$(hdrdir)/ruby</code>, that is <code>/tmp/.ext/.timestamp/.RUBYARCHDIR.-.-test-.-.fatal.time</code>.</p>
Ruby master - Bug #12040 (Assigned): [Win32] File.stat fails on a mounted volume
https://redmine.ruby-lang.org/issues/12040
2016-02-01T08:13:24Z
nobu (Nobuyoshi Nakada)
nobu@ruby-lang.org
<p>On Windows, <code>File.stat</code> fails on the volume mount point directory whose name contains <code>"..."</code>.</p>
<p>Where <code>%vol%</code> is the volume ID of a new VHD volume,</p>
<pre><code>C:> set vol
\\?\Volume{3C458AE9-C8B1-11E5-A233-0800271D089F}\
C:> mkdir x...y
C:> mountvol x...y %vol%
C:> .\miniruby -e "p Dir.chdir('x...y'){File.stat('.')}" -e "p File.stat('x...y')"
#<File::Stat dev=0x2, ino=1407374883553285, mode=040755, nlink=1, uid=0, gid=0, rdev=0x2, size=4096, blksize=nil, blocks=nil, atime=2016-02-01 16:35:45 +0900, mtime=2016-02-01 16:35:45 +0900, ctime=2016-02-01 16:35:45 +0900>
-e:2:in `stat': No such file or directory @ rb_file_s_stat - x...y (Errno::ENOENT)
from -e:2:in `<main>'
</code></pre>
<p>Note that <code>Dir.chdir</code> and <code>File.stat</code> there succeed.<br>
This failures depends on the mount point name, because of <code>check_valid_dir()</code>.</p>
Ruby master - Bug #11808 (Open): Different behavior between Enumerable#grep and Array#grep
https://redmine.ruby-lang.org/issues/11808
2015-12-11T23:53:02Z
BenOlive (Ben Olive)
ben.olive@gatech.edu
<p>Regex special global variables are available within the block for <code>Array#grep</code>, but are nil within the block for <code>Enumerable#grep</code>.</p>
<p>Here is an example that explains it better:</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="k">class</span> <span class="nc">Test</span>
<span class="kp">include</span> <span class="no">Enumerable</span>
<span class="k">def</span> <span class="nf">each</span>
<span class="k">return</span> <span class="n">enum_for</span><span class="p">(</span><span class="ss">:each</span><span class="p">)</span> <span class="k">unless</span> <span class="nb">block_given?</span>
<span class="k">yield</span> <span class="s2">"Hello"</span>
<span class="k">yield</span> <span class="s2">"World"</span>
<span class="k">end</span>
<span class="k">end</span>
<span class="n">enum</span> <span class="o">=</span> <span class="no">Test</span><span class="p">.</span><span class="nf">new</span>
<span class="n">array</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"Hello"</span><span class="p">,</span> <span class="s2">"World"</span><span class="p">]</span>
<span class="n">enum</span><span class="p">.</span><span class="nf">grep</span><span class="p">(</span><span class="sr">/^(.)/</span><span class="p">)</span> <span class="p">{</span><span class="vg">$1</span><span class="p">}</span> <span class="c1"># => [nil, nil]</span>
<span class="n">array</span><span class="p">.</span><span class="nf">grep</span><span class="p">(</span><span class="sr">/^(.)/</span><span class="p">)</span> <span class="p">{</span><span class="vg">$1</span><span class="p">}</span> <span class="c1"># => ["H", "W"]</span>
</code></pre>
<p>Tested on 2.0.0, 2.1.5, & 2.2.2</p>
Ruby master - Bug #11142 (Open): Command line argument parser on windows handles double quotes in...
https://redmine.ruby-lang.org/issues/11142
2015-05-12T16:09:28Z
ksubrama (Kartik Cating-Subramanian)
ksubramanian@chef.io
<p>I believe the issue is with <a href="https://github.com/ruby/ruby/blob/trunk/win32/win32.c#L1671" class="external">https://github.com/ruby/ruby/blob/trunk/win32/win32.c#L1671</a> through 1673.</p>
<p>C:\Users\ksubrama>ruby -e "puts ARGV" "foo""bar"<br>
foo"bar</p>
<p>C:\Users\ksubrama>ruby -e "puts ARGV" "foo"" bar"<br>
foo"<br>
bar</p>
<p>I believe the intent is that if ruby encounters "" inside a " quoted string, then it interprets it as a literal " and doesn't close out the string. If that's the case, then the code should read:</p>
<pre><code> if (quote == L'"' && quote == ptr[1])
ptr++;
else
quote = L'\0';
</code></pre>
<p>Otherwise, the string gets closed out anyway and the ptr++ here combined with the ptr++ at the bottom of the switch at line 1685 simply skip over both "" characters while considering the string closed.</p>
<p>As a further test case consider:</p>
<p>C:\Users\ksubrama>ruby -e "puts ARGV" "foo""bar""baz"<br>
foo"barbaz</p>
<p>The parser is now very confused because the first "" closed out the string and the next "" is not interpreted as a literal " but as "open and close and empty string element" and the trailing " just gets dropped.</p>
Ruby master - Bug #10416 (Open): Create mechanism for updating of Unicode data files downstreams ...
https://redmine.ruby-lang.org/issues/10416
2014-10-22T11:27:03Z
duerst (Martin Dürst)
duerst@it.aoyama.ac.jp
<p>The current mechanism for updating Unicode data files will create the following problem:<br>
Downstream compilers/packagers will download Unicode data files ONE time (they may already have done so).</p>
<p>However, if they don't activate ALWAYS_UPDATE_UNICODE = yes, these files will never get updated, and they will stay on Unicode version 7.0 even if in five years Unicode is e.g. on version 12.0.<br>
On the other hand, if they activate ALWAYS_UPDATE_UNICODE = yes (and assuming issue <a class="issue tracker-1 status-5 priority-4 priority-default closed" title="Bug: Unicode data files (in enc/unicode/data) don't get updated even if ALWAYS_UPDATE_UNICODE = yes is... (Closed)" href="https://redmine.ruby-lang.org/issues/10415">#10415</a> gets fixed), they constantly update to the latest version of Unicode. That's good for those who actually want this, but now what our current policy is.<br>
What's missing is that we (Ruby core) can make sure downstream checkouts update to a new Unicode version when we want then to do so (as we e.g. can do for other parts that are based on Unicode data, see e.g. <a href="https://bugs.ruby-lang.org/issues/9092" class="external">https://bugs.ruby-lang.org/issues/9092</a>), without sending an email to everybody and hoping they read and follow it.</p>
<p>[Currently, the only solution I know will work is the one pointed out by Yui Naruse in https://bugs.ruby-lang.org/issues/10084#note-17, but I'm okay with any other solution.]</p>
Ruby master - Bug #9409 (Open): Cygwin で "filesystem" の encoding が正しくないケース
https://redmine.ruby-lang.org/issues/9409
2014-01-14T08:43:25Z
ganaware (Nayuta Taga)
<p>Cygwin で環境変数 LANG に設定されているエンコーディングと<br>
システムのコードページが異なる場合<br>
"filesystem" の encoding が正しく設定されないようです。</p>
<p>例えば、</p>
<ul>
<li>Windows 7 (日本語)</li>
<li>Cygwin 環境 (CYGWIN_NT-6.1-WOW64 ****** 1.7.27(0.271/5/3) 2013-12-09 11:57 i686 Cygwin)</li>
<li>環境変数 LANG は ja_JP.UTF-8</li>
<li>カレントディレクトリに「<code>日本語.txt</code>」という名前のファイルが存在</li>
</ul>
<p>という状態で以下のコードを実行すると</p>
<pre><code>print "LANG=#{ENV['LANG']}\n"
print "\n"
Dir.open('.').each{|item|
p item.encoding
p item
}
print "\n"
Dir.open('.',encoding: 'locale').each{|item|
p item.encoding
p item
}
print "\n"
</code></pre>
<p>例えば以下のような出力が得られます。</p>
<pre><code>LANG=ja_JP.UTF-8
#<Encoding:Windows-31J>
"."
#<Encoding:Windows-31J>
".."
#<Encoding:Windows-31J>
"test.rb"
#<Encoding:Windows-31J>
"\x{E697}\xA5\x{E69C}\xAC\x{E8AA}\x9E.txt"
#<Encoding:UTF-8>
"."
#<Encoding:UTF-8>
".."
#<Encoding:UTF-8>
"test.rb"
#<Encoding:UTF-8>
"日本語.txt"
</code></pre>
<p>本来ならば全ての Encoding が UTF-8 であるべきだと思います。</p>
<p><code>Init_enc_set_filesystem_encoding()</code> を以下のように修正すれば修正可能です。</p>
<pre><code>Index: localeinit.c
===================================================================
--- localeinit.c (revision 44594)
+++ localeinit.c (working copy)
@@ -53,7 +53,7 @@
int idx;
#if defined NO_LOCALE_CHARMAP
# error NO_LOCALE_CHARMAP defined
-#elif defined _WIN32 || defined __CYGWIN__
+#elif defined _WIN32 && !defined __CYGWIN__
char cp[sizeof(int) * 8 / 3 + 4];
snprintf(cp, sizeof cp, "CP%d", AreFileApisANSI() ? GetACP() : GetOEMCP());
idx = rb_enc_find_index(cp);
</code></pre>
Ruby master - Bug #9189 (Assigned): Build failure on Windows in case of nonascii TEMP environment.
https://redmine.ruby-lang.org/issues/9189
2013-12-01T18:06:20Z
phasis68 (Heesob Park)
phasis@gmail.com
<p>I experienced a build failure during build extension library with trunk on Windows.</p>
<pre><code>make[2]: Entering directory `/c/work/ruby-2.1.0-r43936/ext/bigdecimal'
generating bigdecimal-i386-mingw32.def
compiling bigdecimal.c
In file included from bigdecimal.c:20:0:
bigdecimal.h:62:1: error: static declaration of 'labs' follows non-static declar
ation
make[2]: *** [bigdecimal.o] Error 1
make[2]: Leaving directory `/c/work/ruby-2.1.0-r43936/ext/bigdecimal'
make[1]: *** [ext/bigdecimal/all] Error 2
make[1]: Leaving directory `/c/work/ruby-2.1.0-r43936'
make: *** [build-ext] Error 2
</code></pre>
<p>I found the cause of this error is mkmk failure.<br>
Here is a part of mkmf.log</p>
<pre><code>have_func: checking for labs() in stdlib.h... -------------------- no
"i686-w64-mingw32-gcc -o conftest.exe -I../../.ext/include/i386-mingw32 -I../.././include -I../.././ext/bigdecimal -D_WIN32_WINNT=0x0501 -D_FILE_OFFSET_BITS=64 -O3 -fno-omit-frame-pointer -fno-fast-math -ggdb3 -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Wpointer-arith -Wwrite-strings -Wdeclaration-after-statement -Wimplicit-function-declaration conftest.c -L. -L../.. -L. -lmsvcrt-ruby210-static -lshell32 -lws2_32 -liphlpapi -limagehlp -lshlwapi "
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
Cannot create temporary file in C:\Users\??苑?AppData\Local\Temp\: Invalid argument
</code></pre>
<p>The TEMP environment varable is</p>
<pre><code>C:\work\ruby-2.1.0-r43936>set TEMP
TEMP=C:\Users\희섭\AppData\Local\Temp
</code></pre>
<p>It seems that miniruby cannot handle encoding properly.</p>
<pre><code>C:\work\ruby-2.1.0-r43936>miniruby -ve "p ENV['TEMP']"
ruby 2.1.0dev (2013-11-30 trunk 43936) [i386-mingw32]
"C:\\Users\\\xED\x9D\xAC\xEC\x84\xAD\\AppData\\Local\\Temp"
C:\work\ruby-2.1.0-r43936>miniruby.exe -ve "p ENV['TEMP'].encoding"
ruby 2.1.0dev (2013-11-30 trunk 43936) [i386-mingw32]
#<Encoding:ASCII-8BIT>
</code></pre>
<p>Whereas, the final ruby can handle encoding properly.</p>
<pre><code>C:\work>ruby -ve "p ENV['TEMP']"
ruby 2.1.0dev (2013-11-30 trunk 43923) [i386-mingw32]
"C:\\Users\\희섭\\AppData\\Local\\Temp"
C:\work>ruby -ve "p ENV['TEMP'].encoding"
ruby 2.1.0dev (2013-11-30 trunk 43923) [i386-mingw32]
#<Encoding:CP949>
</code></pre>
Ruby master - Bug #9115 (Assigned): Logger traps all exceptions; breaks Timeout
https://redmine.ruby-lang.org/issues/9115
2013-11-16T12:30:25Z
cphoenix (Chris Phoenix)
cphoenix@gmail.com
<p>Line 577-579 of logger.rb</p>
<pre><code> rescue Exception => ignored
warn("log writing failed. #{ignored}")
end
</code></pre>
<p>Thus, when the system times out in the middle of writing a log message, it warns "log writing failed. execution expired" and just keeps right on running.</p>
<p>This is true in 1.9.3 as well. I haven't looked at older versions.</p>
<p>Pardon me while I go grep "rescue Exception" in the entire Ruby codebase, and see whether I can reliably use Timeout at all...</p>
<p>OK, you might check out C:\Ruby200\lib\ruby\gems\2.0.0\gems\activerecord-3.2.13\lib\active_record\railties\databases.rake</p>
<p>All the other "rescue Exception" seem to re-raise it, except maybe C:\Ruby200\lib\ruby\2.0.0\xmlrpc\server.rb and C:\Ruby200\lib\ruby\gems\2.0.0\gems\activesupport-3.2.13\lib\active_support\callbacks.rb</p>
Ruby master - Bug #9010 (Assigned): ./configure --prefix= cannot handle directories with spaces
https://redmine.ruby-lang.org/issues/9010
2013-10-10T07:50:41Z
postmodern (Hal Brodigan)
postmodern.mod3@gmail.com
<p>It appears that the linking task fails when the --prefix value contains spaces.</p>
<p>Steps to Reproduce:</p>
<ol>
<li>./configure --prefix="$HOME/foo bar"</li>
<li>make</li>
</ol>
<p>Expected Result: success<br>
Actual Result:</p>
<p>make[2]: Entering directory <code>/home/hal/src/ruby-2.0.0-p247' linking ruby gcc: error: bar/lib: No such file or directory gcc: error: bar/lib: No such file or directory make[2]: *** [ruby] Error 1 make[2]: Leaving directory </code>/home/hal/src/ruby-2.0.0-p247'<br>
make[1]: *** [all] Error 2<br>
make[1]: Leaving directory `/home/hal/src/ruby-2.0.0-p247'<br>
make: *** [build-ext] Error 2</p>
Ruby master - Bug #8445 (Assigned): IO.open and IO#set_enconding does not support :fallback option
https://redmine.ruby-lang.org/issues/8445
2013-05-24T22:03:00Z
pjmtdw (Haruhiro Yoshimoto)
pjmtdw@gmail.com
<p>RubyDoc says that <code>IO.open</code> and <code>IO#set_encoding</code> supports optional argument defined in <code>String#encode</code>.<br>
<a href="http://ruby-doc.org/core-2.0/IO.html#method-c-new-label-Options" class="external">http://ruby-doc.org/core-2.0/IO.html#method-c-new-label-Options</a><br>
In fact, <code>:invalid, :undef and :replace</code> works as expected.</p>
<p>However, <code>:fallback</code> option does not work neither for <code>IO.open</code> and <code>IO#set_encoding</code>.<br>
Following is the example code which does not work.<br>
<code>f(x)</code> is never called even if hoge.txt contains non convertible character.</p>
<pre><code class="ruby syntaxhl" data-language="ruby"><span class="no">File</span><span class="p">.</span><span class="nf">open</span><span class="p">(</span><span class="s2">"./hoge.txt"</span><span class="p">,</span><span class="s2">"r:Shift_JIS:utf-8"</span><span class="p">,</span> <span class="ss">:fallback</span> <span class="o">=></span> <span class="nb">lambda</span><span class="p">{</span><span class="o">|</span><span class="n">x</span><span class="o">|</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">)}){</span><span class="o">|</span><span class="n">f</span><span class="o">|</span>
<span class="o">...</span>
<span class="p">}</span>
<span class="no">File</span><span class="p">.</span><span class="nf">open</span><span class="p">(</span><span class="s2">"./hoge.txt"</span><span class="p">){</span><span class="o">|</span><span class="n">f</span><span class="o">|</span>
<span class="n">f</span><span class="p">.</span><span class="nf">set_encoding</span><span class="p">(</span><span class="s2">"Shift_JIS"</span><span class="p">,</span><span class="s2">"utf-8"</span><span class="p">,</span><span class="ss">:fallback</span> <span class="o">=></span> <span class="nb">lambda</span><span class="p">{</span><span class="o">|</span><span class="n">x</span><span class="o">|</span><span class="n">f</span><span class="p">(</span><span class="n">x</span><span class="p">)})</span>
<span class="o">...</span>
<span class="p">}</span>
</code></pre>
<p>I Think this is because <code>fill_cbuf()</code> in <code>io.c</code> calls <code>rb_econv_convert()</code> from <code>transcode.c</code> directly.<br>
On the other hand, <code>fallback_func</code> is called in <code>transcode_loop()</code>, which is called by <code>str_encode()</code>.</p>
<p>Since <code>transcode_loop()</code> also calls <code>rb_econv_convert()</code>, I wrote a small patch which moves some codes from<br>
<code>transcode_loop()</code> to <code>rb_econv_convert()</code> to fix the problem.</p>
<p>The attached file is the patch. Hope this helps.</p>
Ruby master - Bug #7968 (Assigned): Poor UDPSocket#send performance in ruby 2.0.0 on windows
https://redmine.ruby-lang.org/issues/7968
2013-02-26T20:55:25Z
cs96and (Alan Davies)
alan.n.davies@gmail.com
<p>I have noticed that the performance of UDPSocket#send on ruby 2.0.0 on windows is much poorer than that of 1.9.3 or 1.8.7. Running the attahced script on 2.0.0 gives the following...</p>
<p>d:\scripts>bash -c "ruby --version"<br>
ruby 2.0.0p0 (2013-02-24) [x64-mingw32]</p>
<p>d:\scripts>bash -c "time ruby socketsendtest.rb"</p>
<p>real 0m2.572s<br>
user 0m0.000s<br>
sys 0m0.016s</p>
<p>However, running the same test with 1.9.3 is much faster...</p>
<p>d:\scripts>pik 193</p>
<p>d:\scripts>bash -c "ruby --version"<br>
ruby 1.9.3p374 (2013-01-15) [i386-mingw32]</p>
<p>d:\scripts>bash -c "time ruby socketsendtest.rb"</p>
<p>real 0m0.993s<br>
user 0m0.015s<br>
sys 0m0.016s</p>
<p>Additionally, if I change the send call to a print (commented out in the script), then the performance is fine on 2.0.0....</p>
<p>d:\scripts>pik 200</p>
<p>d:\scripts>bash -c "ruby --version"<br>
ruby 2.0.0p0 (2013-02-24) [x64-mingw32]</p>
<p>d:\scripts>bash -c "time ruby socketsendtest.rb"</p>
<p>real 0m0.907s<br>
user 0m0.000s<br>
sys 0m0.015s</p>
<p>What is send() doing that print() doesn't do that is causing the massive performance drop?</p>
<p>Thanks<br>
Alan.</p>
Ruby master - Bug #7964 (Assigned): Writing an ASCII-8BIT String to a StringIO created from a UTF...
https://redmine.ruby-lang.org/issues/7964
2013-02-26T16:32:50Z
brixen (Brian Shirai)
brixen@gmail.com
<p>=begin<br>
In the following script, an ASCII-8BIT String is written to a StringIO created with a UTF-8 String without error. However, a << b or a + b will raise an exception, as will writing an ASCII-8BIT String to a File with UTF-8 external encoding.</p>
<ul>
<li>
<p>$ cat file_enc.rb</p>
<a name="encoding-utf-8"></a>
<h1 >encoding: utf-8<a href="#encoding-utf-8" class="wiki-anchor">¶</a></h1>
<p>require 'stringio'</p>
<p>a = "On a very cold morning, it was -8°F."<br>
b = a.dup.force_encoding "ascii-8bit"</p>
<p>io = StringIO.new a<br>
io.write(b)<br>
p io.string.encoding</p>
<p>File.open "data.txt", "w:utf-8" do |f|<br>
f.write a<br>
f.write b<br>
end</p>
</li>
<li>
<p>$ ruby2.0 -v file_enc.rb<br>
ruby 2.0.0p0 (2013-02-24 revision 39474) [x86_64-darwin10.8.0]<br>
#<a href="Encoding:UTF-8" class="external">Encoding:UTF-8</a><br>
file_enc.rb:13:in <code>write': "\xC2" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError) from file_enc.rb:13:in </code>block in '<br>
from file_enc.rb:11:in <code>open' from file_enc.rb:11:in </code>'</p>
</li>
<li>
<p>$ ruby1.9.3 -v file_enc.rb<br>
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin10.8.0]<br>
#<a href="Encoding:UTF-8" class="external">Encoding:UTF-8</a><br>
file_enc.rb:13:in <code>write': "\xC2" from ASCII-8BIT to UTF-8 (Encoding::UndefinedConversionError) from file_enc.rb:13:in </code>block in '<br>
from file_enc.rb:11:in <code>open' from file_enc.rb:11:in </code>'<br>
=end</p>
</li>
</ul>
Ruby master - Bug #6360 (Assigned): Debug information build even without requesting it
https://redmine.ruby-lang.org/issues/6360
2012-04-26T08:46:44Z
luislavena (Luis Lavena)
luislavena@gmail.com
<p>Hello,</p>
<p>While working on latest RubyInstaller release for 1.9.3-p194 our team detected a bigger shared library and import library being generated.</p>
<p>After further inspection, we found this commit:<br>
<a href="https://github.com/ruby/ruby/commit/ffdaca1d748804f2b5ca2de612f17cf6c78d351b" class="external">https://github.com/ruby/ruby/commit/ffdaca1d748804f2b5ca2de612f17cf6c78d351b</a></p>
<p>Backported r34840 into ruby_1_9_3 branch</p>
<p>The above change added -ggdb to CFLAGS even when was not provided by debugflags configure option.</p>
<p>The following is the comparison of "make" summary with and without the change:</p>
<p>Current trunk:</p>
<pre>
C:\Users\Luis\Projects\oss\ruby\build32>make
CC = gcc
LD = ld
LDSHARED = gcc -shared
CFLAGS = -O3 -fno-omit-frame-pointer -ggdb -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=implicit-function-declaration
XCFLAGS = -include ruby/config.h -include ruby/missing.h -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT
CPPFLAGS = -DFD_SETSIZE=32767 -D_WIN32_WINNT=0x0501 -I. -I.ext/include/i386-mingw32 -I../include -I..
DLDFLAGS = -Wl,--enable-auto-image-base,--enable-auto-import -Wl,--out-implib=libmsvcrt-ruby200.dll.a msvcrt-ruby200.def -Wl,--stack,0x00200000,--enable-auto-import
SOLIBS = msvcrt-ruby200.res.o -lshell32 -lws2_32 -limagehlp
</pre>
<p>Reverting r34840:</p>
<pre>
C:\Users\Luis\Projects\oss\ruby\build32>make
CC = gcc
LD = ld
LDSHARED = gcc -shared -s
CFLAGS = -O3 -fno-omit-frame-pointer -g -Wall -Wextra -Wno-unused-parameter -Wno-parentheses -Wno-long-long -Wno-missing-field-initializers -Wunused-variable -Werror=pointer-arith -Werror=write-strings -Werror=declaration-after-statement -Werror=implicit-function-declaration
XCFLAGS = -include ruby/config.h -include ruby/missing.h -D_FORTIFY_SOURCE=2 -fno-strict-overflow -fvisibility=hidden -DRUBY_EXPORT
CPPFLAGS = -DFD_SETSIZE=32767 -D_WIN32_WINNT=0x0501 -I. -I.ext/include/i386-mingw32 -I../include -I..
DLDFLAGS = -Wl,--enable-auto-image-base,--enable-auto-import -Wl,--out-implib=libmsvcrt-ruby200.dll.a msvcrt-ruby200.def -Wl,--stack,0x00200000,--enable-auto-import
SOLIBS = msvcrt-ruby200.res.o -lshell32 -lws2_32 -limagehlp
</pre>
<p>Notice that -g changed into -ggdb instead.</p>
<p>I think debug symbols shouldn't be compiled unless requested and this is a regression.</p>
Ruby master - Bug #6351 (Assigned): transcode table generator does not support multi characters o...
https://redmine.ruby-lang.org/issues/6351
2012-04-24T20:41:39Z
usa (Usaku NAKAMURA)
usa@garbagecollect.jp
<p>改めてチケット起こします。<a href="/issues/6349">[ruby-dev:45576]</a> より。</p>
<p>On 2012/04/24 17:11, "Martin J. Dürst" wrote:</p>
<blockquote>
<p>On 2012/04/24 17:02, U.Nakamura wrote:</p>
<blockquote>
<p>データは例によってNetBSDのものが利用できそうです。<br>
なのですが、transcodeってUnicodeの第0面(BMP)以外はサポートし<br>
てましたっけ?</p>
</blockquote>
<p>もちろんです :-)</p>
</blockquote>
<p>もうちょっと調べました。BMP 以外は transcode の最初から全く問題ないです<br>
が、現時点で引っかかるのは次のものです<br>
(<a href="http://x0213.org/codetable/euc-jis-2004-std.txt" class="external">http://x0213.org/codetable/euc-jis-2004-std.txt</a> から抜粋):</p>
<p>0xA4F7 U+304B+309A # [2000]<br>
0xA4F8 U+304D+309A # [2000]<br>
0xA4F9 U+304F+309A # [2000]<br>
0xA4FA U+3051+309A # [2000]<br>
0xA4FB U+3053+309A # [2000]</p>
<p>0xA5F7 U+30AB+309A # [2000]<br>
0xA5F8 U+30AD+309A # [2000]<br>
0xA5F9 U+30AF+309A # [2000]<br>
0xA5FA U+30B1+309A # [2000]<br>
0xA5FB U+30B3+309A # [2000]<br>
0xA5FC U+30BB+309A # [2000]<br>
0xA5FD U+30C4+309A # [2000]<br>
0xA5FE U+30C8+309A # [2000]</p>
<p>0xA6F8 U+31F7+309A # [2000]</p>
<p>0xABC4 U+00E6+0300 # [2000]</p>
<p>0xABC8 U+0254+0300 # [2000]<br>
0xABC9 U+0254+0301 # [2000]<br>
0xABCA U+028C+0300 # [2000]<br>
0xABCB U+028C+0301 # [2000]<br>
0xABCC U+0259+0300 # [2000]<br>
0xABCD U+0259+0301 # [2000]<br>
0xABCE U+025A+0300 # [2000]<br>
0xABCF U+025A+0301 # [2000]</p>
<p>0xABE5 U+02E9+02E5 # [2000]<br>
0xABE6 U+02E5+02E9 # [2000]</p>
<p>ようするに、JIS X 0213 で一文字になっているが、Unicode で二文字になって<br>
いるものです。EUC-JISX0213 から UTF-8 は問題ないですが、逆は現在引っかか<br>
ります。windows-1258 も (逆ですが) 同じ問題がありますので、いずれはなく<br>
さないといけないと思いましたが、今回はいいきっかけのではないかと思います。</p>
<p>よろしくお願いします。 Martin.</p>