CARVIEW |
Select Language
HTTP/2 200
x-amz-id-2: S0D5dzzp+mv6NT8YMfXlkyomzKHJrfdaQhrLrx+RKjklYf6tk1PsrbwM9VReIJw964bbiFYT1Oo=
x-amz-request-id: MP5RF4D0E3P0K3BK
last-modified: Thu, 15 May 2025 16:51:00 GMT
etag: "40c7cf878f00fb26a185ba471a4bf735"
x-amz-server-side-encryption: AES256
server: AmazonS3
content-encoding: gzip
via: 1.1 varnish, 1.1 varnish
content-type: text/plain; charset=utf-8
accept-ranges: bytes
age: 0
date: Wed, 23 Jul 2025 16:32:27 GMT
x-served-by: cache-tyo11925-TYO, cache-bom-vanm7210046-BOM
x-cache: MISS, MISS
x-cache-hits: 0, 0
x-timer: S1753288347.867662,VS0,VE759
vary: Accept-Encoding
content-length: 1114
From: "maciej.mensfeld (Maciej Mensfeld) via ruby-core"
Date: 2025-05-15T16:44:17+00:00
Subject: [ruby-core:122121] [Ruby Bug#21342] Segfault: invalid keeping_mutexes when using Mutex in Thread then Fiber after GC
Issue #21342 has been reported by maciej.mensfeld (Maciej Mensfeld).
----------------------------------------
Bug #21342: Segfault: invalid keeping_mutexes when using Mutex in Thread then Fiber after GC
https://bugs.ruby-lang.org/issues/21342
* Author: maciej.mensfeld (Maciej Mensfeld)
* Status: Open
* ruby -v: 3.4.3 (2025-04-14 revision d0b7e5b6a0) +PRISM [x86_64-linux]
* Backport: 3.2: UNKNOWN, 3.3: UNKNOWN, 3.4: UNKNOWN
----------------------------------------
Ruby crashes with a `[BUG] invalid keeping_mutexes error` when attempting to GC locked mutex that was used in a Thread within a Fiber context after garbage collection. The error indicates an attempt to unlock a mutex that is not locked, suggesting a state management issue with mutexes across Thread and Fiber boundaries.
## Ruby Version
`ruby 3.4.3 (2025-04-14 revision d0b7e5b6a0) +PRISM [x86_64-linux]`
## Reproduce Process
``` ruby
# segv.rb
5.times do
m = Mutex.new
Thread.new do
m.synchronize do
end
end.join
Fiber.new do
GC.start
m.lock
end.resume
end
```
1. Save the above code to a file (e.g., `segv.rb`)
2. Run with `ruby segv.rb`
3. The crash occurs intermittently - sometimes it crashes immediately, sometimes it hangs, once in a while it works
## Actual Result
The program crashes with the following error:
```
segv.rb: [BUG] invalid keeping_mutexes: Attempt to unlock a mutex which is not locked
ruby 3.4.3 (2025-04-14 revision d0b7e5b6a0) +PRISM [x86_64-linux]
```
whole segfault in the attached txt file.
Full crash backtrace shows the error originates from:
- `rb_threadptr_unlock_all_locking_mutexes` in thread.c:450
- `rb_thread_terminate_all` in thread.c:467
The crash suggests an issue in mutex state management during thread termination.
## Expected Result
The script should complete successfully without crashing. The mutex should be properly managed across Thread and Fiber contexts, and garbage collection should not interfere with mutex state.
---Files--------------------------------
crash.txt (23.4 KB)
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/