summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog12
-rw-r--r--eval.c1
-rw-r--r--ext/socket/socket.c19
-rw-r--r--gc.c4
-rw-r--r--object.c2
5 files changed, 32 insertions, 6 deletions
diff --git a/ChangeLog b/ChangeLog
index 0be7b07ebe..8c852d0511 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -20,6 +20,18 @@ Wed Jun 23 22:23:37 2004 Dave Thomas <dave@pragprog.com>
with OS X not returning 'from' parameter to recvfrom for
connection-oriented sockets.
+Thu Jun 24 01:07:15 2004 Yukihiro Matsumoto <matz@ruby-lang.org>
+
+ * eval.c (rb_thread_atfork): remove "fork terminates thread"
+ warning. [ruby-dev:
+
+ * object.c (rb_obj_clone): backport FL_FINALIZE patch from 1.9.
+ [ruby-core:02786][ruby-core:03067]
+
+ * ext/socket/socket.c (sock_sockaddr): Socket#gethostbyname()
+ should give us packed address, not struct sockaddr.
+ [ruby-core:03053]
+
Wed Jun 23 01:45:27 2004 Dave Thomas <dave@pragprog.com>
* lib/rdoc/parsers/parse_rb.rb (RubyLex::identify_quotation):
diff --git a/eval.c b/eval.c
index de149c0bd0..ecc1599e16 100644
--- a/eval.c
+++ b/eval.c
@@ -11990,7 +11990,6 @@ rb_thread_atfork()
if (rb_thread_alone()) return;
FOREACH_THREAD(th) {
if (th != curr_thread) {
- rb_warn("fork terminates thread at %s:%d", th->node->nd_file, nd_line(th->node));
rb_thread_die(th);
}
}
diff --git a/ext/socket/socket.c b/ext/socket/socket.c
index 2cf100cac8..574bb3963a 100644
--- a/ext/socket/socket.c
+++ b/ext/socket/socket.c
@@ -2044,7 +2044,24 @@ sock_sockaddr(addr, len)
struct sockaddr *addr;
size_t len;
{
- return rb_str_new((char*)addr, len);
+ char *ptr;
+
+ switch (addr->sa_family) {
+ case AF_INET:
+ ptr = (char*)&((struct sockaddr_in*)addr)->sin_addr.s_addr;
+ len = sizeof(((struct sockaddr_in*)addr)->sin_addr.s_addr);
+ break;
+#ifdef INET6
+ case AF_INET6:
+ ptr = (char*)&((struct sockaddr_in6*)addr)->sin6_addr.s6_addr;
+ len = sizeof(((struct sockaddr_in6*)addr)->sin6_addr.s6_addr);
+ break;
+#endif
+ default:
+ rb_raise(rb_eSocket, "unknown socket family:%d", addr->sa_family);
+ break;
+ }
+ return rb_str_new(ptr, len);
}
static VALUE
diff --git a/gc.c b/gc.c
index ce3d72645f..063e5ba4b8 100644
--- a/gc.c
+++ b/gc.c
@@ -1722,12 +1722,10 @@ rb_gc_copy_finalizer(dest, obj)
if (!finalizer_table) return;
if (!FL_TEST(obj, FL_FINALIZE)) return;
- if (FL_TEST(dest, FL_FINALIZE)) {
- rb_warn("copy_finalizer: discarding old finalizers");
- }
if (st_lookup(finalizer_table, obj, &table)) {
st_insert(finalizer_table, dest, table);
}
+ RBASIC(dest)->flags |= FL_FINALIZE;
}
static VALUE
diff --git a/object.c b/object.c
index b65259609c..36872381a6 100644
--- a/object.c
+++ b/object.c
@@ -263,7 +263,7 @@ rb_obj_clone(obj)
}
clone = rb_obj_alloc(rb_obj_class(obj));
RBASIC(clone)->klass = rb_singleton_class_clone(obj);
- RBASIC(clone)->flags = (RBASIC(obj)->flags | FL_TEST(clone, FL_TAINT)) & ~FL_FREEZE;
+ RBASIC(clone)->flags = (RBASIC(obj)->flags | FL_TEST(clone, FL_TAINT)) & ~(FL_FREEZE|FL_FINALIZE);
init_copy(clone, obj);
RBASIC(clone)->flags |= RBASIC(obj)->flags & FL_FREEZE;