[#38563] [Bug #1556] irb does not save history from 1.8.7-p83 and later — Nobuhiro IMAI <redmine@...>
Bug #1556: irb does not save history from 1.8.7-p83 and later
けいじゅ@いしつかです.
まつもと ゆきひろです
いまいです。
けいじゅ@いしつかです.
[#38571] [Bug #1582] IO.new Raises Other Errors between 1.8 and 1.9 — "ujihisa ." <redmine@...>
Bug #1582: IO.new Raises Other Errors between 1.8 and 1.9
チケット #1582 が更新されました。 (by Motohiro KOSAKI)
なかだです。
2010年2月27日9:43 Nobuyoshi Nakada <nobu@ruby-lang.org>:
[#38602] [Feature: trunk] rb_objspace_each_objects — SASADA Koichi <ko1@...>
ささだです.
まつもと ゆきひろです
ささだです.
ささだです.
まつもと ゆきひろです
[#38607] [Feature: trunk] GC.stat — SASADA Koichi <ko1@...>
ささだです.
In article <4A349F64.5000702@atdot.net>,
ささだです.
In article <4A3612EF.1080008@atdot.net>,
ささだです。
まつもと ゆきひろです
ささだです。
2010年10月15日16:32 SASADA Koichi <ko1@atdot.net>:
[#38608] Fixnum#fdiv — Tadayoshi Funaba <tadf@...>
Bignum#fdiv には大きな数である場合の配慮があるようですが、Fixnum ではな
fdiv では2つの異る解釈が混在しているように見えます。
まつもと ゆきひろです
> えーと、設計者は「fdivは結果がfloatになるdiv」くらいしか考え
まつもと ゆきひろです
> ふむ。「中途半端」というのはfixnumとbignumで食い違うと言う意
> > ふむ。「中途半端」というのはfixnumとbignumで食い違うと言う意
まつもと ゆきひろです
> 私が気にしているのは「挙動の理解しやすさ」ですね。
まつもと ゆきひろです
> 繰り返しになりますが、「より正確な除算」とかだと独立した実装
まつもと ゆきひろです
この件を修正しようとしていますが、
[#38609] [Feature: trunk] *_memsize() — SASADA Koichi <ko1@...>
ささだです.
[#38613] [BUG: trunk] called on terminated object — SASADA Koichi <ko1@...>
ささだです.
[#38695] [feature:trunk] let irb use pretty_inspect if possible — Yusuke ENDOH <mame@...>
遠藤です。
けいじゅ@いしつかです.
遠藤です。
けいじゅ@いしつかです.
[#38698] [Bug #1674] set_trace_func with 1line block — _ wanabe <redmine@...>
Bug #1674: set_trace_func with 1line block
[#38701] [Bug #1676] only last "return" is traced by set_trace_func — _ wanabe <redmine@...>
Bug #1676: only last "return" is traced by set_trace_func
[ruby-dev:38562] Re: [Bug #595] Fiber ignores ensure clause
ワナベと申します。
かなり前のチケットですが、題名の件についてパッチを書きました。
もしまだどなたもパッチを書かれていないようならご検討ください。
Index: thread.c
===================================================================
--- thread.c (リビジョン 23617)
+++ thread.c (作業コピー)
@@ -293,6 +293,8 @@
static void rb_mutex_unlock_all(mutex_t *mutex, rb_thread_t *th);
+void rb_fiber_terminate_all(rb_thread_t *th);
+
void
rb_thread_terminate_all(void)
{
@@ -310,6 +312,7 @@
thread_debug("rb_thread_terminate_all (main thread: %p)\n", (void *)th);
st_foreach(vm->living_threads, terminate_i, (st_data_t)th);
+ rb_fiber_terminate_all(th);
while (!rb_thread_alone()) {
PUSH_TAG();
@@ -1210,6 +1213,7 @@
thread_debug("rb_thread_execute_interrupts: %ld\n", err);
if (err == eKillSignal || err == eTerminateSignal) {
+ rb_fiber_terminate_all(th);
th->errinfo = INT2FIX(TAG_FATAL);
TH_JUMP_TAG(th, TAG_FATAL);
}
Index: cont.c
===================================================================
--- cont.c (リビジョン 23617)
+++ cont.c (作業コピー)
@@ -534,6 +534,7 @@
case 0:
return Qnil;
case 1:
+ case -1:
return argv[0];
default:
return rb_ary_new4(argc, argv);
@@ -946,6 +947,36 @@
return fib->status != TERMINATED ? Qtrue : Qfalse;
}
+static VALUE
+terminate_all_i(VALUE fibval)
+{
+ if (rb_fiber_alive_p(fibval)) {
+ VALUE value = rb_exc_new2(rb_eSystemExit, "terminate");
+ return fiber_switch(fibval, -1, &value, 0);
+ }
+}
+
+void
+rb_fiber_terminate_all(rb_thread_t *th)
+{
+ VALUE fibval;
+ rb_fiber_t *fib, *root_fib;
+ rb_thread_t *_th = GET_THREAD();
+
+ rb_thread_set_current(th);
+ fibval = th->root_fiber;
+ if (!RTEST(fibval)) return;
+ GetFiberPtr(fibval, root_fib);
+
+ fib = root_fib->prev_fiber;
+ while (fib != root_fib) {
+ rb_rescue2(terminate_all_i, fib->cont.self,
+ 0, 0, rb_eSystemExit);
+ fib = fib->prev_fiber;
+ }
+ rb_thread_set_current(_th);
+}
+
/*
* call-seq:
* fiber.resume(args, ...) -> obj
--
ワナベ