mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* gc.c (gc_sweep): loosen page free condition to avoid add_heap()
race condition. [ruby-dev:21633] * gc.c (gc_sweep): do not update malloc_limit when malloc_increase is smaller than malloc_limit. * ext/socket/socket.c (make_hostent): h_aliases may be NULL. (ruby-bugs PR#1195) * ext/socket/socket.c (sock_s_gethostbyaddr): ditto. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4808 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
0014687097
commit
e75c34c2e9
4 changed files with 42 additions and 21 deletions
17
ChangeLog
17
ChangeLog
|
@ -1,3 +1,11 @@
|
||||||
|
Mon Oct 20 11:00:46 2003 Yukihiro Matsumoto <matz@ruby-lang.org>
|
||||||
|
|
||||||
|
* gc.c (gc_sweep): loosen page free condition to avoid add_heap()
|
||||||
|
race condition. [ruby-dev:21633]
|
||||||
|
|
||||||
|
* gc.c (gc_sweep): do not update malloc_limit when malloc_increase
|
||||||
|
is smaller than malloc_limit.
|
||||||
|
|
||||||
Mon Oct 20 09:45:12 2003 NAKAMURA Usaku <usa@ruby-lang.org>
|
Mon Oct 20 09:45:12 2003 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
* lib/debug.rb (debug_command): remove debug print.
|
* lib/debug.rb (debug_command): remove debug print.
|
||||||
|
@ -53,10 +61,17 @@ Fri Oct 17 11:15:22 2003 NAKAMURA Usaku <usa@ruby-lang.org>
|
||||||
|
|
||||||
* MANIFEST: add test/ruby/test_range.rb.
|
* MANIFEST: add test/ruby/test_range.rb.
|
||||||
|
|
||||||
|
Fri Oct 17 03:21:23 2003 William Sobel <will.sobel@barra.com>
|
||||||
|
|
||||||
|
* ext/socket/socket.c (make_hostent): h_aliases may be NULL.
|
||||||
|
(ruby-bugs PR#1195)
|
||||||
|
|
||||||
|
* ext/socket/socket.c (sock_s_gethostbyaddr): ditto.
|
||||||
|
|
||||||
Fri Oct 17 00:12:41 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
Fri Oct 17 00:12:41 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
||||||
|
|
||||||
* ext/tk/lib/tk.rb: (bug fix) instance variable @frame was used
|
* ext/tk/lib/tk.rb: (bug fix) instance variable @frame was used
|
||||||
without initializing on TkComposite module
|
without initializing on TkComposite module.
|
||||||
|
|
||||||
Thu Oct 16 23:51:04 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
Thu Oct 16 23:51:04 2003 Hidetoshi NAGAI <nagai@ai.kyutech.ac.jp>
|
||||||
|
|
||||||
|
|
|
@ -1046,8 +1046,10 @@ make_hostent(addr, ipaddr)
|
||||||
#else
|
#else
|
||||||
h = gethostbyname(addr->ai_canonname);
|
h = gethostbyname(addr->ai_canonname);
|
||||||
#endif
|
#endif
|
||||||
for (pch = h->h_aliases; *pch; pch++) {
|
if (h->h_aliases != NULL) {
|
||||||
rb_ary_push(names, rb_str_new2(*pch));
|
for (pch = h->h_aliases; *pch; pch++) {
|
||||||
|
rb_ary_push(names, rb_str_new2(*pch));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#if defined(HAVE_GETIPNODEBYNAME)
|
#if defined(HAVE_GETIPNODEBYNAME)
|
||||||
freehostent(h);
|
freehostent(h);
|
||||||
|
@ -2022,8 +2024,10 @@ sock_s_gethostbyaddr(argc, argv)
|
||||||
rb_ary_push(ary, rb_str_new2(h->h_name));
|
rb_ary_push(ary, rb_str_new2(h->h_name));
|
||||||
names = rb_ary_new();
|
names = rb_ary_new();
|
||||||
rb_ary_push(ary, names);
|
rb_ary_push(ary, names);
|
||||||
for (pch = h->h_aliases; *pch; pch++) {
|
if (h->h_aliases != NULL) {
|
||||||
rb_ary_push(names, rb_str_new2(*pch));
|
for (pch = h->h_aliases; *pch; pch++) {
|
||||||
|
rb_ary_push(names, rb_str_new2(*pch));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
rb_ary_push(ary, INT2NUM(h->h_addrtype));
|
rb_ary_push(ary, INT2NUM(h->h_addrtype));
|
||||||
#ifdef h_addr
|
#ifdef h_addr
|
||||||
|
|
8
gc.c
8
gc.c
|
@ -969,7 +969,7 @@ gc_sweep()
|
||||||
}
|
}
|
||||||
p++;
|
p++;
|
||||||
}
|
}
|
||||||
if (n == heaps[i].limit && freed + n > FREE_MIN) {
|
if (n == heaps[i].limit && freed > FREE_MIN) {
|
||||||
RVALUE *pp;
|
RVALUE *pp;
|
||||||
|
|
||||||
heaps[i].limit = 0;
|
heaps[i].limit = 0;
|
||||||
|
@ -982,8 +982,10 @@ gc_sweep()
|
||||||
freed += n;
|
freed += n;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
malloc_limit += (malloc_increase - malloc_limit) * (double)live / (live + freed);
|
if (malloc_increase > malloc_limit) {
|
||||||
if (malloc_limit < GC_MALLOC_LIMIT) malloc_limit = GC_MALLOC_LIMIT;
|
malloc_limit += (malloc_increase - malloc_limit) * (double)live / (live + freed);
|
||||||
|
if (malloc_limit < GC_MALLOC_LIMIT) malloc_limit = GC_MALLOC_LIMIT;
|
||||||
|
}
|
||||||
malloc_increase = 0;
|
malloc_increase = 0;
|
||||||
if (freed < FREE_MIN) {
|
if (freed < FREE_MIN) {
|
||||||
add_heap();
|
add_heap();
|
||||||
|
|
26
marshal.c
26
marshal.c
|
@ -952,11 +952,11 @@ path2module(path)
|
||||||
}
|
}
|
||||||
|
|
||||||
static VALUE
|
static VALUE
|
||||||
r_object0(arg, proc, ivp, extended)
|
r_object0(arg, proc, ivp, extmod)
|
||||||
struct load_arg *arg;
|
struct load_arg *arg;
|
||||||
VALUE proc;
|
VALUE proc;
|
||||||
int *ivp;
|
int *ivp;
|
||||||
VALUE extended;
|
VALUE extmod;
|
||||||
{
|
{
|
||||||
VALUE v = Qnil;
|
VALUE v = Qnil;
|
||||||
int type = r_byte(arg);
|
int type = r_byte(arg);
|
||||||
|
@ -975,7 +975,7 @@ r_object0(arg, proc, ivp, extended)
|
||||||
{
|
{
|
||||||
int ivar = Qtrue;
|
int ivar = Qtrue;
|
||||||
|
|
||||||
v = r_object0(arg, 0, &ivar, extended);
|
v = r_object0(arg, 0, &ivar, extmod);
|
||||||
if (ivar) r_ivar(v, arg);
|
if (ivar) r_ivar(v, arg);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -984,12 +984,12 @@ r_object0(arg, proc, ivp, extended)
|
||||||
{
|
{
|
||||||
VALUE m = path2module(r_unique(arg));
|
VALUE m = path2module(r_unique(arg));
|
||||||
|
|
||||||
if (NIL_P(extended)) extended = rb_ary_new2(0);
|
if (NIL_P(extmod)) extmod = rb_ary_new2(0);
|
||||||
rb_ary_push(extended, m);
|
rb_ary_push(extmod, m);
|
||||||
|
|
||||||
v = r_object0(arg, 0, 0, extended);
|
v = r_object0(arg, 0, 0, extmod);
|
||||||
while (RARRAY(extended)->len > 0) {
|
while (RARRAY(extmod)->len > 0) {
|
||||||
m = rb_ary_pop(extended);
|
m = rb_ary_pop(extmod);
|
||||||
rb_extend_object(v, m);
|
rb_extend_object(v, m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1002,7 +1002,7 @@ r_object0(arg, proc, ivp, extended)
|
||||||
if (FL_TEST(c, FL_SINGLETON)) {
|
if (FL_TEST(c, FL_SINGLETON)) {
|
||||||
rb_raise(rb_eTypeError, "singleton can't be loaded");
|
rb_raise(rb_eTypeError, "singleton can't be loaded");
|
||||||
}
|
}
|
||||||
v = r_object0(arg, 0, 0, extended);
|
v = r_object0(arg, 0, 0, extmod);
|
||||||
if (rb_special_const_p(v) || TYPE(v) == T_OBJECT || TYPE(v) == T_CLASS) {
|
if (rb_special_const_p(v) || TYPE(v) == T_OBJECT || TYPE(v) == T_CLASS) {
|
||||||
format_error:
|
format_error:
|
||||||
rb_raise(rb_eArgError, "dump format error (user class)");
|
rb_raise(rb_eArgError, "dump format error (user class)");
|
||||||
|
@ -1206,9 +1206,9 @@ r_object0(arg, proc, ivp, extended)
|
||||||
VALUE data;
|
VALUE data;
|
||||||
|
|
||||||
v = rb_obj_alloc(klass);
|
v = rb_obj_alloc(klass);
|
||||||
if (! NIL_P(extended)) {
|
if (! NIL_P(extmod)) {
|
||||||
while (RARRAY(extended)->len > 0) {
|
while (RARRAY(extmod)->len > 0) {
|
||||||
VALUE m = rb_ary_pop(extended);
|
VALUE m = rb_ary_pop(extmod);
|
||||||
rb_extend_object(v, m);
|
rb_extend_object(v, m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1258,7 +1258,7 @@ r_object0(arg, proc, ivp, extended)
|
||||||
"class %s needs to have instance method `_load_data'",
|
"class %s needs to have instance method `_load_data'",
|
||||||
rb_class2name(klass));
|
rb_class2name(klass));
|
||||||
}
|
}
|
||||||
rb_funcall(v, s_load_data, 1, r_object0(arg, 0, 0, extended));
|
rb_funcall(v, s_load_data, 1, r_object0(arg, 0, 0, extmod));
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue