42 Commits
Author SHA1 Message Date
Hiroshi SHIBATAandClaude Opus 5.5 f6ff9e7d02 Etc.uname: Report the actual Windows version
GetVersionEx reports 6.2.9200 on Windows 8.1 and later unless the manifest of the executable declares them as supported, and ruby.manifest does not. RtlGetVersion is not affected by the manifest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 14:30:49 +09:00
Hiroshi SHIBATAandClaude Fable 5.1 41349bb1e8 Require NUMBER_OF_PROCESSORS in test_nprocessors
A missing variable turned the lower bound into 0, which the existing assertion already covers.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-27 13:03:36 +09:00
Hiroshi SHIBATAandClaude Fable 5.1 fa3cbf9e76 Count processors across all processor groups in Etc.nprocessors
GetSystemInfo() reports the logical processors of the current processor group only, so Etc.nprocessors returned at most 64 on Windows machines with more than 64 logical processors. GetActiveProcessorCount(ALL_PROCESSOR_GROUPS) counts every group. It is looked up at runtime because mingw-w64 declares it only for _WIN32_WINNT >= 0x0601 while the mingw build targets 0x0600.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-09-27 13:03:36 +09:00
Nobuyoshi Nakada 100c04307f [ruby/etc] Prefer dedicated assertions
https://github.com/ruby/etc/commit/9caddede76
2025-07-08 10:00:21 +00:00
Hiroshi SHIBATA 50400f3bb2 [ruby/etc] Removed workaround for assert_ractor
https://github.com/ruby/etc/commit/fd61177b71
2025-06-04 05:03:18 +00:00
Hiroshi SHIBATA 17401792fa [ruby/etc] Alias value or join to take in old Ruby
https://github.com/ruby/etc/commit/3dbe760bed
2025-06-03 06:59:51 +00:00
Koichi Sasada ef2bb61018 Ractor::Port
* Added `Ractor::Port`
  * `Ractor::Port#receive` (support multi-threads)
  * `Rcator::Port#close`
  * `Ractor::Port#closed?`
* Added some methods
  * `Ractor#join`
  * `Ractor#value`
  * `Ractor#monitor`
  * `Ractor#unmonitor`
* Removed some methods
  * `Ractor#take`
  * `Ractor.yield`
* Change the spec
  * `Racotr.select`

You can wait for multiple sequences of messages with `Ractor::Port`.

```ruby
ports = 3.times.map{ Ractor::Port.new }
ports.map.with_index do |port, ri|
  Ractor.new port,ri do |port, ri|
    3.times{|i| port << "r#{ri}-#{i}"}
  end
end

p ports.each{|port| pp 3.times.map{port.receive}}

```

In this example, we use 3 ports, and 3 Ractors send messages to them respectively.
We can receive a series of messages from each port.

You can use `Ractor#value` to get the last value of a Ractor's block:

```ruby
result = Ractor.new do
  heavy_task()
end.value
```

You can wait for the termination of a Ractor with `Ractor#join` like this:

```ruby
Ractor.new do
  some_task()
end.join
```

`#value` and `#join` are similar to `Thread#value` and `Thread#join`.

To implement `#join`, `Ractor#monitor` (and `Ractor#unmonitor`) is introduced.

This commit changes `Ractor.select()` method.
It now only accepts ports or Ractors, and returns when a port receives a message or a Ractor terminates.

We removes `Ractor.yield` and `Ractor#take` because:
* `Ractor::Port` supports most of similar use cases in a simpler manner.
* Removing them significantly simplifies the code.

We also change the internal thread scheduler code (thread_pthread.c):
* During barrier synchronization, we keep the `ractor_sched` lock to avoid deadlocks.
  This lock is released by `rb_ractor_sched_barrier_end()`
  which is called at the end of operations that require the barrier.
* fix potential deadlock issues by checking interrupts just before setting UBF.

https://bugs.ruby-lang.org/issues/21262
2025-05-31 04:01:33 +09:00
Naoto Ono 8582d93194 [ruby/etc] Skip TestEtc#test_ractor_parallel on ModGC workflow
(https://github.com/ruby/etc/pull/55)

https://bugs.ruby-lang.org/issues/21204

TestEtc#test_ractor_parallel is only failing intermittently on ModGC workflow after 87fb0c4. So, we'll skip this test on ModGC workflow.

https://github.com/ruby/etc/commit/fb037c5162
2025-03-28 03:58:14 +00:00
Benoit Daloze 72cb68972c [ruby/etc] Attempt to re-enable TestEtc#test_ractor_parallel
* If this fails, please revert this commit in ruby/etc
  to keep the repos sync'ed.

https://github.com/ruby/etc/commit/87fb0c4a83
2025-03-27 20:39:38 +00:00
Benoit Daloze 0581947af5 [ruby/etc] Speedup TestEtc#test_ractor_parallel
https://github.com/ruby/etc/commit/18c12c084c
2025-03-27 20:39:38 +00:00
Benoit Daloze 2f1ac3fea3 [ruby/etc] Increase timeout for test_ractor_parallel
* It seems much slower on macOS (locally on Linux it's always < 1 second).

https://github.com/ruby/etc/commit/9e46857011
2025-03-27 20:21:21 +00:00
Yusuke Endoh 1b8e6568e4 Pend a test for ractor in etc
... because it is flaky
2025-03-27 12:28:28 +09:00
Benoit Daloze bfc5b8305d [ruby/etc] Etc.sysconfdir does not work in a Ractor
* Because it uses RbConfig::CONFIG.
* See https://github.com/ruby/ruby/actions/runs/14069312270/job/39399502142#step:12:947

https://github.com/ruby/etc/commit/12dbe03b6a
2025-03-25 21:27:16 +00:00
Benoit Daloze b9e9a1034a [ruby/etc] Most Etc methods are not Ractor-safe currently
* See https://bugs.ruby-lang.org/issues/21115

https://github.com/ruby/etc/commit/ae62b7619c
2025-03-25 20:17:01 +00:00
Nobuyoshi Nakada 9da60a14bf [ruby/etc] Fix sysconfdir when load-relative
When relative load paths option is enabled, the prefix is determined
at the runtime.  The only way to get it outside libruby is to use
rbconfig.rb.

https://github.com/ruby/etc/commit/e5b498fad9
2024-10-17 07:32:38 +00:00
Peter Zhu 850448abd5 Fix leaked file descriptor in passwd test 2021-03-24 13:02:54 +09:00
Marc-Andre Lafortune cd63f0358f [ruby/etc] Make Ractor safe 2020-12-22 19:46:07 -05:00
Yusuke Endoh 2090011dbd test/etc/test_etc.rb: skip some tests on Android
Android user management seems different from normal Unix system.
2020-02-12 17:28:29 +09:00
sonots b5b2bd86f1 test_etc.rb: fix test_getgrnam for duplicated group names
* test/etc/test_etc.rb: Etc.getgrnam would not return the first entry in the order of Etc.group for duplicated group names.

follow-up: [Bug #6935]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@60063 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-09-29 17:19:37 +00:00
kazu b9d8758e26 {ext,test}/etc: Specify frozen_string_literal: true.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57451 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2017-01-29 01:35:23 +00:00
naruse 3e92b635fb Add frozen_string_literal: false for all files
When you change this to true, you may need to add more tests.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@53141 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-12-16 05:07:31 +00:00
nobu 8ed8e0ba41 test_etc.rb: relax comparisons
* test/etc/test_etc.rb (test_getgrgid, test_getgrnam): relax
  comparisons.  getgrent() does not return mem properly in some
  circumstances (possibly, involved in Open Directory on OSX).

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@49204 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2015-01-10 07:15:12 +00:00
nobu 6ccf3d68c2 win32.c: login name encoding
* ext/etc/etc.c (etc_getlogin): set login name encoding properly.
  [ruby-core:66163] [Bug #10493]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@48360 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-11-10 08:24:36 +00:00
akr 7b25bd8ba2 * ext/etc/etc.c (etc_nprocessors): New method.
Accepted by matz at RubyKaigi 2014.
  [ruby-core:65142] [Feature #10267]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@47761 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-10-02 03:23:26 +00:00
nobu 6ff56256c3 test_etc.rb: omit unrunnable tests
* test/etc/test_etc.rb (test_sysconf, test_confstr, test_pathconf):
  define test cases only if corresponding constants are available.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@46009 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-18 23:35:04 +00:00
akr 4f3432f9cb [DOC]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45985 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-18 02:06:15 +00:00
akr ea1a4f2929 * ext/etc/etc.c: Etc.sysconf, Etc.confstr and IO#pathconf implemented.
* ext/etc/extconf.rb: Check sysconf(), confstr() and fpathconf().

* ext/etc/mkconstants.rb: New file.

 [ruby-core:62600] [Feature #9842]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45984 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-18 01:48:47 +00:00
akr 63a23dc678 * ext/etc/etc.c: Etc.uname method implemented.
* ext/etc/extconf.rb: Check uname() function.

  [ruby-core:62139] [Feature #9770]



git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@45983 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2014-05-18 00:58:34 +00:00
shirosaki a5849245c6 test_etc.rb: fix for non unique GID
* test/etc/test_etc.rb (TestEtc#test_getgrgid): fix for non unique GID.
  No unixen systems guarantee that GID is unique. Etc.getgrgid would
  not return the first entry in the order of Etc.group for shared GID.
  [ruby-core:47312] [Bug #6935]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36833 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-27 11:57:43 +00:00
usa 7c5336b8f9 * test/etc/test_etc.rb (TestEtc#test_getpwuid): `s' is never set to nil.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36636 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-06 02:20:47 +00:00
nobu 800d9a7ac1 test_etc.rb: remove implicit assumption
* test/etc/test_etc.rb (TestEtc#test_getpwuid): remove implicit
  assumption, that getpwuid() would return the first entry in the
  order of getpw(), for shared UID.  apparently it is not true on
  MacOS X 10.8.  [ruby-core:46975][Bug #6831]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@36625 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2012-08-05 05:14:35 +00:00
nobu 61a34d625e * test/etc/test_etc.rb (TestEtc#test_get{pw,gr}nam): skip entries
start with + sign, which means NIS.  these are returned in the
  case that passwd and group entries in /etc/nsswitch.conf are set
  to use "nis" explicitly on Debian.  fixed #3683

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@32242 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2011-06-26 16:34:20 +00:00
nobu a6e33fd71c * test/etc/test_etc.rb: assert only when any value is given.
[Bug #1575] [ruby-core:23722]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@27625 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2010-05-05 06:11:04 +00:00
nobu d89dbc4d3b * test/etc/test_etc.rb: trivial.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22100 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-06 15:26:36 +00:00
mame c07b4ef145 * test/etc/test_etc.rb(test_getpwnam, test_getgrgid, test_getgrnam):
support an envirionment that has duplicative entries.  a patch from
  Tomoyuki Chikanaga <chikanag at nippon-control-system.co.jp> in
  [ruby-dev:37882].


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@22021 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2009-02-03 15:39:44 +00:00
mame c309cda903 * test/etc/test_etc.rb (test_getpwuid, test_getgrgid): use
Process.euid and egid instead of Etc.getlogin to identify current
  user which may be different from a login one (e.g., su command).


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19100 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-03 15:02:22 +00:00
mame 65b1544649 * test/etc/test_etc.rb: check only typical use of
setpwent/getpwent/endpwent and setgrent/getgrent/endgrent.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@19098 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-09-03 14:54:14 +00:00
mame 8da30b8928 * test/etc/test_etc.rb (test_passwd): age field may be string under
some environments.


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18258 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-07-29 12:36:28 +00:00
naruse f783b8d204 * test/etc/test_etc.rb (test_getpwuid): fix for users whose uid is
shared.

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@18255 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-07-29 04:21:32 +00:00
mame 33e5cfee7b * test/etc/test_etc.rb: avoid infinite loop. [ruby-dev:35158]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@17420 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-06-18 15:34:46 +00:00
akr 205e542a89 avoid infinite loop on FreeBSD 6.3.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16801 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-06-04 06:04:38 +00:00
mame 87050da59f * test/etc/test_etc.rb: new tests for etc.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@16796 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2008-06-03 13:26:38 +00:00