summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-12-29 02:47:07 +0000
committermatz <matz@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2000-12-29 02:47:07 +0000
commit4c1441870edd4279699a672024332ee309a6c87e (patch)
treefb6e749450b8bbbe33031daa2bdcfb0c7b61d626
parent2cafd39ed2bd164ece3468393300684f2da19902 (diff)
* gc.c (mem_error): prohibit recursive mem_error().
(ruby-bugs-ja:PR#36) git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@1086 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog21
-rw-r--r--gc.c9
2 files changed, 28 insertions, 2 deletions
diff --git a/ChangeLog b/ChangeLog
index 647ddd2..4408653 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,22 @@
+Fri Dec 29 11:41:55 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * gc.c (mem_error): prohibit recursive mem_error().
+ (ruby-bugs-ja:PR#36)
+
+Fri Dec 29 11:05:41 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_fd_writable): should not switch context if
+ rb_thread_critical is set.
+
+ * eval.c (rb_thread_wait_fd): ditto.
+
+ * eval.c (rb_thread_wait_for): ditto.
+
+ * eval.c (rb_thread_select): ditto.
+
+ * eval.c (rb_thread_join): join during critical section causes
+ deadlock.
+
Tue Dec 26 18:46:41 2000 NAKAMURA Hiroshi <nakahiro@sarion.co.jp>
* lib/debug.rb: Avoid thread deadlock in debugging stopped thread.
@@ -116,7 +135,7 @@ Tue Dec 19 13:44:50 2000 K.Kosako <kosako@sofnec.co.jp>
Tue Dec 19 00:57:10 2000 Yukihiro Matsumoto <matz@ruby-lang.org>
- * time.c (time_minus): usec might overflow (ruby-bugs-ja:#PR#35).
+ * time.c (time_minus): usec might overflow. (ruby-bugs-ja:PR#35)
* eval.c (rb_obj_extend): Object#extend should take at least one
argument.
diff --git a/gc.c b/gc.c
index 0460cf5..589813f 100644
--- a/gc.c
+++ b/gc.c
@@ -53,10 +53,17 @@ static void
mem_error(mesg)
char *mesg;
{
+ static int recurse = 0;
+
if (rb_safe_level() >= 4) {
rb_raise(rb_eNoMemError, mesg);
}
- rb_fatal(mesg);
+ if (recurse == 0) {
+ recurse++;
+ rb_fatal(mesg);
+ }
+ fprintf(stderr, "[FATAL] failed to allocate memory\n");
+ exit(1);
}
void *