| Age | Commit message (Collapse) | Author |
|
|
|
Fix up c2d9967f78d2e6f93f8d9876c2b3ab25aa6b86e7.
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/4576
|
|
|
|
|
|
|
|
|
|
https://github.com/ruby/ostruct/commit/8534f69e4e
|
|
This change fixes the bug described in https://bugs.ruby-lang.org/issues/17880.
Checking `ractor_shareable_p` will cause the method to call back into
Ruby. Anything calling this method can't be a leaf instruction,
otherwise it could crash. By adding `attr bool leaf = false` we no
longer crash because it marks the function as not a leaf.
Here's a simplified reproduction script:
```ruby
require "set"
class Id
attr_reader :db_id
def initialize(db_id)
@db_id = db_id
end
def ==(other)
other.class == self.class && other.db_id == db_id
end
alias_method :eql?, :==
def hash
10
end
def <=>(other)
db_id <=> other.db_id if other.is_a?(self.class)
end
end
class Namespace
IDS = Set[
Id.new(1).freeze,
Id.new(2).freeze,
Id.new(3).freeze,
Id.new(4).freeze,
].freeze
class << self
def test?(id)
IDS.include?(id)
end
end
end
p Namespace.test?(Id.new(1))
p Namespace.test?(Id.new(5))
```
Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
Co-authored-by: Aaron Patterson <tenderlove@ruby-lang.org>
Notes:
Merged-By: k0kubun <takashikkbn@gmail.com>
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/4572
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/4572
|
|
|
|
|
|
|
|
https://github.com/ruby/ostruct/commit/bb253be3e9
|
|
|
|
Notes:
Merged-By: marcandre <github@marc-andre.ca>
|
|
requested by tankf33der at https://bugs.ruby-lang.org/issues/17949#change-92430
Notes:
Merged: https://github.com/ruby/ruby/pull/4567
|
|
These methods are not !-suffixed, and the messages were very
confusing.
|
|
Notes:
Merged: https://github.com/ruby/ruby/pull/4571
|
|
This reverts commit f0f9e77b65990001bd2acb42e1c6b673f6324425.
Notes:
Merged: https://github.com/ruby/ruby/pull/4570
|
|
* Wake up join list within thread EC context.
* Consume items from join list so that they are not re-executed.
If `rb_fiber_scheduler_unblock` raises an exception, it can result in a
segfault if `rb_threadptr_join_list_wakeup` is not within a valid EC. This
change moves `rb_threadptr_join_list_wakeup` into the thread's top level EC
which initially caused an infinite loop because on exception will retry. We
explicitly remove items from the thread's join list to avoid this situation.
* Verify the required scheduler interface.
* Test several scheduler hooks methods with broken `unblock` implementation.
Notes:
Merged-By: ioquatix <samuel@codeotaku.com>
|
|
|
|
|
|
|
|
Co-authored-by: Bruno Sutic <code@brunosutic.com>
Notes:
Merged-By: ioquatix <samuel@codeotaku.com>
|
|
Fixes [Bug #17947]
|
|
|
|
```
p RubyVM::AbstractSyntaxTree.parse("::Foo += 1").children
#=> before: [[], nil, (OP_CDECL@1:0-1:10 (COLON3@1:0-1:10 :Foo) :+ (LIT@1:9-1:10 1))]
#=> after: [[], nil, (OP_CDECL@1:0-1:10 (COLON3@1:0-1:5 :Foo) :+ (LIT@1:9-1:10 1))]
```
|
|
|
|
As well as 2366c681166a1dab95de6b9ca8ffcaae18aadd39.
|
|
|
|
jemalloc (5.2.1 at least) cannot compile in C++ on macOS SDK, due
to conflicts on exception specification.
|
|
|
|
rb_block_call and rb_block_call_kw have similar code.
So, using rb_block_kw function in rb_block_call function for refactoring.
Notes:
Merged: https://github.com/ruby/ruby/pull/4566
Merged-By: nobu <nobu@ruby-lang.org>
|
|
|
|
|
|
|
|
If we crash but the VM isn't fully alive, we can get an infinite loop.
|
|
If we are during incremental sweeping when calling gc_set_initial_pages
there is an assertion error. The following patch will artificially
produce the bug:
```
diff --git a/gc.c b/gc.c
index c3157dbe2c..d7282cf8f0 100644
--- a/gc.c
+++ b/gc.c
@@ -404,7 +404,7 @@ int ruby_rgengc_debug;
* 5: show all references
*/
#ifndef RGENGC_CHECK_MODE
-#define RGENGC_CHECK_MODE 0
+#define RGENGC_CHECK_MODE 1
#endif
// Note: using RUBY_ASSERT_WHEN() extend a macro in expr (info by nobu).
@@ -10821,6 +10821,10 @@ gc_set_initial_pages(void)
void
ruby_gc_set_params(void)
{
+ for (int i = 0; i < 10000; i++) {
+ rb_ary_new();
+ }
+
/* RUBY_GC_HEAP_FREE_SLOTS */
if (get_envparam_size("RUBY_GC_HEAP_FREE_SLOTS", &gc_params.heap_free_slots, 0)) {
/* ok */
```
The crash looks like:
```
Assertion Failed: ../gc.c:2038:heap_add_page:!(heap == heap_eden && heap->sweeping_page)
```
Notes:
Merged: https://github.com/ruby/ruby/pull/4562
|
|
https://github.com/ruby/ruby/runs/2791163586?check_suite_focus=true
|
|
https://ci.appveyor.com/project/ruby/ruby/builds/39542385/job/8b7aq951f9t01x4x
|
|
by a race condition by multiple Ractors.
Atmically incrementing body->total_calls may have its own cost, so for
now we intentionally leave the unreliable total_calls. So we allow an
ISeq to be never pushed when you use multiple Ractors. However, if you
enqueue a single ccan node twice, get_from_list loops infinitely. Thus
this patch takes care of such a situation.
|
|
|
|
Move the non-heap related configurations to gc_marks_start.
Notes:
Merged: https://github.com/ruby/ruby/pull/4560
|
|
|
|
Align the Travis enabling timing with GitHub Actions.
For the syntax, see <https://docs.travis-ci.com/user/conditions-v1>.
We use `repo` syntax rather than `fork = true/false` syntax to show a general usage in any repositories on GitHub.
The non-forked repo is not always a primary repo in any GitHub repositories.
[Bug #17936]
Notes:
Merged: https://github.com/ruby/ruby/pull/4556
|
|
Reordered iseq_inline_constant_cache_entry members not to exceed
the size of RValue.
|
|
Use MACHINE for x86 CPU family, ARCH is CPU model name (i386) and
cannot be x86.
|
|
|