[#27380] [Bug #2553] Fix pthreads slowness by eliminating unnecessary sigprocmask calls — Dan Peterson <redmine@...>

Bug #2553: Fix pthreads slowness by eliminating unnecessary sigprocmask calls

21 messages 2010/01/03

[#27437] [Feature #2561] 1.8.7 Patch reduces time cost of Rational operations by 50%. — Kurt Stephens <redmine@...>

Feature #2561: 1.8.7 Patch reduces time cost of Rational operations by 50%.

9 messages 2010/01/06

[#27447] [Bug #2564] [patch] re-initialize timer_thread_{lock,cond} after fork — Aliaksey Kandratsenka <redmine@...>

Bug #2564: [patch] re-initialize timer_thread_{lock,cond} after fork

18 messages 2010/01/06

[#27545] [Feature #2594] 1.8.7 Patch: Reduce time spent in gc.c is_pointer_to_heap(). — Kurt Stephens <redmine@...>

Feature #2594: 1.8.7 Patch: Reduce time spent in gc.c is_pointer_to_heap().

8 messages 2010/01/11

[#27635] [Bug #2619] Proposed method: Process.fork_supported? — Hongli Lai <redmine@...>

Bug #2619: Proposed method: Process.fork_supported?

45 messages 2010/01/20
[#27643] [Feature #2619] Proposed method: Process.fork_supported? — Luis Lavena <redmine@...> 2010/01/21

Issue #2619 has been updated by Luis Lavena.

[#27678] Re: [Feature #2619] Proposed method: Process.fork_supported? — Yukihiro Matsumoto <matz@...> 2010/01/22

Hi,

[#27684] Re: [Feature #2619] Proposed method: Process.fork_supported? — Charles Oliver Nutter <headius@...> 2010/01/22

On Thu, Jan 21, 2010 at 11:27 PM, Yukihiro Matsumoto <matz@ruby-lang.org> wrote:

[#27708] Re: [Feature #2619] Proposed method: Process.fork_supported? — Yukihiro Matsumoto <matz@...> 2010/01/22

Hi,

[#27646] Re: [Bug #2619] Proposed method: Process.fork_supported? — Tanaka Akira <akr@...> 2010/01/21

2010/1/21 Hongli Lai <redmine@ruby-lang.org>:

[#27652] Re: [Bug #2619] Proposed method: Process.fork_supported? — Hongli Lai <hongli@...99.net> 2010/01/21

On 1/21/10 5:20 AM, Tanaka Akira wrote:

[#27653] Re: [Bug #2619] Proposed method: Process.fork_supported? — Tanaka Akira <akr@...> 2010/01/21

2010/1/21 Hongli Lai <hongli@plan99.net>:

[#27662] Re: [Bug #2619] Proposed method: Process.fork_supported? — Vladimir Sizikov <vsizikov@...> 2010/01/21

On Thu, Jan 21, 2010 at 10:53 AM, Tanaka Akira <akr@fsij.org> wrote:

[#27698] [Bug #2629] ConditionVariable#wait(mutex, timeout) should return whether the condition was signalled, not the waited time — Hongli Lai <redmine@...>

Bug #2629: ConditionVariable#wait(mutex, timeout) should return whether the condition was signalled, not the waited time

8 messages 2010/01/22

[#27722] [Feature #2635] Unbundle rdoc — Yui NARUSE <redmine@...>

Feature #2635: Unbundle rdoc

14 messages 2010/01/23

[#27757] [Bug #2638] ruby-1.9.1-p37[68] build on aix5.3 with gcc-4.2 failed to run for me because it ignores where libgcc is located. — Joel Soete <redmine@...>

Bug #2638: ruby-1.9.1-p37[68] build on aix5.3 with gcc-4.2 failed to run for me because it ignores where libgcc is located.

10 messages 2010/01/24

[#27778] [Bug #2641] Seg fault running miniruby during ruby build on Haiku — Alexander von Gluck <redmine@...>

Bug #2641: Seg fault running miniruby during ruby build on Haiku

10 messages 2010/01/25

[#27791] [Bug #2644] memory over-allocation with regexp — Greg Hazel <redmine@...>

Bug #2644: memory over-allocation with regexp

12 messages 2010/01/25

[#27794] [Bug #2647] Lack of testing for String#split — Hugh Sasse <redmine@...>

Bug #2647: Lack of testing for String#split

14 messages 2010/01/25

[#27912] [Bug #2669] mkmf find_executable doesn't find .bat files — Roger Pack <redmine@...>

Bug #2669: mkmf find_executable doesn't find .bat files

11 messages 2010/01/27

[#27930] [Bug:trunk] some behavior changes of lib/csv.rb between 1.8 and 1.9 — Yusuke ENDOH <mame@...>

Hi jeg2, or anyone who knows the implementation of FasterCSV,

15 messages 2010/01/28
[#27931] Re: [Bug:trunk] some behavior changes of lib/csv.rb between 1.8 and 1.9 — James Edward Gray II <james@...> 2010/01/28

On Jan 28, 2010, at 10:51 AM, Yusuke ENDOH wrote:

[ruby-core:27761] Re: [Feature #2619] Proposed method: Process.fork_supported?

From: Tanaka Akira <akr@...>
Date: 2010-01-24 16:11:56 UTC
List: ruby-core #27761
2010/1/23 Charles Oliver Nutter <headius@headius.com>:
> I'm also curious how this affects Windows behavior, since currently
> MRI stubs out many methods to return nil on Windows (like all of 'etc'
> library, for example). Should they raise NotImplementedError? Should
> they return false for respond_to?.

It may be good chance to change etc library.

Index: etc.c
===================================================================
--- etc.c	(revision 26395)
+++ etc.c	(working copy)
@@ -106,6 +106,7 @@ setup_passwd(struct passwd *pwd)
 }
 #endif

+#if defined(HAVE_GETPWENT)
 /* Returns the /etc/passwd information for the user with specified integer
  * user id (uid).
  *
@@ -118,7 +119,6 @@ setup_passwd(struct passwd *pwd)
 static VALUE
 etc_getpwuid(int argc, VALUE *argv, VALUE obj)
 {
-#if defined(HAVE_GETPWENT)
     VALUE id;
     rb_uid_t uid;
     struct passwd *pwd;
@@ -133,11 +133,12 @@ etc_getpwuid(int argc, VALUE *argv, VALU
     pwd = getpwuid(uid);
     if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %d", (int)uid);
     return setup_passwd(pwd);
+}
 #else
-    return Qnil;
+#define etc_getpwuid rb_f_notimplement
 #endif
-}

+#ifdef HAVE_GETPWENT
 /* Returns the /etc/passwd information for the user with specified login name.
  *
  * The information is returned as a Struct::Passwd; see getpwent above for
@@ -149,17 +150,16 @@ etc_getpwuid(int argc, VALUE *argv, VALU
 static VALUE
 etc_getpwnam(VALUE obj, VALUE nam)
 {
-#ifdef HAVE_GETPWENT
     struct passwd *pwd;

     SafeStringValue(nam);
     pwd = getpwnam(RSTRING_PTR(nam));
     if (pwd == 0) rb_raise(rb_eArgError, "can't find user for %s",
RSTRING_PTR(nam));
     return setup_passwd(pwd);
+}
 #else
-    return Qnil;
+#define etc_getpwnam rb_f_notimplement
 #endif
-}

 #ifdef HAVE_GETPWENT
 static int passwd_blocking = 0;
@@ -194,6 +194,7 @@ each_passwd(void)
 }
 #endif

+#ifdef HAVE_GETPWENT
 /* Provides a convenient Ruby iterator which executes a block for each entry
  * in the /etc/passwd file.
  *
@@ -212,7 +213,6 @@ each_passwd(void)
 static VALUE
 etc_passwd(VALUE obj)
 {
-#ifdef HAVE_GETPWENT
     struct passwd *pw;

     rb_secure(4);
@@ -222,10 +222,13 @@ etc_passwd(VALUE obj)
     else if (pw = getpwent()) {
 	return setup_passwd(pw);
     }
-#endif
     return Qnil;
 }
+#else
+#define etc_passwd rb_f_notimplement
+#endif

+#ifdef HAVE_GETPWENT
 /* Iterates for each entry in the /etc/passwd file if a block is given.
  * If no block is given, returns the enumerator.
  *
@@ -247,37 +250,43 @@ etc_passwd(VALUE obj)
 static VALUE
 etc_each_passwd(VALUE obj)
 {
-#ifdef HAVE_GETPWENT
     RETURN_ENUMERATOR(obj, 0, 0);
     each_passwd();
-#endif
     return obj;
 }
+#else
+#define etc_each_passwd rb_f_notimplement
+#endif

+#ifdef HAVE_GETPWENT
 /* Resets the process of reading the /etc/passwd file, so that the next call
  * to getpwent will return the first entry again.
  */
 static VALUE
 etc_setpwent(VALUE obj)
 {
-#ifdef HAVE_GETPWENT
     setpwent();
-#endif
     return Qnil;
 }
+#else
+#define etc_setpwent rb_f_notimplement
+#endif

+#ifdef HAVE_GETPWENT
 /* Ends the process of scanning through the /etc/passwd file begun with
  * getpwent, and closes the file.
  */
 static VALUE
 etc_endpwent(VALUE obj)
 {
-#ifdef HAVE_GETPWENT
     endpwent();
-#endif
     return Qnil;
 }
+#else
+#define etc_endpwent rb_f_notimplement
+#endif

+#ifdef HAVE_GETPWENT
 /* Returns an entry from the /etc/passwd file. The first time it is called it
  * opens the file and returns the first entry; each successive call returns
  * the next entry, or nil if the end of the file has been reached.
@@ -307,15 +316,16 @@ etc_endpwent(VALUE obj)
 static VALUE
 etc_getpwent(VALUE obj)
 {
-#ifdef HAVE_GETPWENT
     struct passwd *pw;

     if (pw = getpwent()) {
 	return setup_passwd(pw);
     }
-#endif
     return Qnil;
 }
+#else
+#define etc_getpwent rb_f_notimplement
+#endif

 #ifdef HAVE_GETGRENT
 static VALUE
@@ -340,6 +350,7 @@ setup_group(struct group *grp)
 }
 #endif

+#ifdef HAVE_GETGRENT
 /* Returns information about the group with specified integer group id (gid),
  * as found in /etc/group.
  *
@@ -353,7 +364,6 @@ setup_group(struct group *grp)
 static VALUE
 etc_getgrgid(int argc, VALUE *argv, VALUE obj)
 {
-#ifdef HAVE_GETGRENT
     VALUE id;
     gid_t gid;
     struct group *grp;
@@ -368,11 +378,12 @@ etc_getgrgid(int argc, VALUE *argv, VALU
     grp = getgrgid(gid);
     if (grp == 0) rb_raise(rb_eArgError, "can't find group for %d", (int)gid);
     return setup_group(grp);
+}
 #else
-    return Qnil;
+#define etc_getgrgid rb_f_notimplement
 #endif
-}

+#ifdef HAVE_GETGRENT
 /* Returns information about the group with specified String name, as found
  * in /etc/group.
  *
@@ -386,7 +397,6 @@ etc_getgrgid(int argc, VALUE *argv, VALU
 static VALUE
 etc_getgrnam(VALUE obj, VALUE nam)
 {
-#ifdef HAVE_GETGRENT
     struct group *grp;

     rb_secure(4);
@@ -394,10 +404,10 @@ etc_getgrnam(VALUE obj, VALUE nam)
     grp = getgrnam(RSTRING_PTR(nam));
     if (grp == 0) rb_raise(rb_eArgError, "can't find group for %s",
RSTRING_PTR(nam));
     return setup_group(grp);
+}
 #else
-    return Qnil;
+#define etc_getgrnam rb_f_notimplement
 #endif
-}

 #ifdef HAVE_GETGRENT
 static int group_blocking = 0;
@@ -432,6 +442,7 @@ each_group(void)
 }
 #endif

+#ifdef HAVE_GETGRENT
 /* Provides a convenient Ruby iterator which executes a block for each entry
  * in the /etc/group file.
  *
@@ -450,7 +461,6 @@ each_group(void)
 static VALUE
 etc_group(VALUE obj)
 {
-#ifdef HAVE_GETGRENT
     struct group *grp;

     rb_secure(4);
@@ -460,9 +470,11 @@ etc_group(VALUE obj)
     else if (grp = getgrent()) {
 	return setup_group(grp);
     }
-#endif
     return Qnil;
 }
+#else
+#define etc_group rb_f_notimplement
+#endif

 #ifdef HAVE_GETGRENT
 /* Iterates for each entry in the /etc/group file if a block is given.
@@ -490,32 +502,39 @@ etc_each_group(VALUE obj)
     each_group();
     return obj;
 }
+#else
+#define etc_each_group rb_f_notimplement
 #endif

+#ifdef HAVE_GETGRENT
 /* Resets the process of reading the /etc/group file, so that the next call
  * to getgrent will return the first entry again.
  */
 static VALUE
 etc_setgrent(VALUE obj)
 {
-#ifdef HAVE_GETGRENT
     setgrent();
-#endif
     return Qnil;
 }
+#else
+#define etc_setgrent rb_f_notimplement
+#endif

+#ifdef HAVE_GETGRENT
 /* Ends the process of scanning through the /etc/group file begun by
  * getgrent, and closes the file.
  */
 static VALUE
 etc_endgrent(VALUE obj)
 {
-#ifdef HAVE_GETGRENT
     endgrent();
-#endif
     return Qnil;
 }
+#else
+#define etc_endgrent rb_f_notimplement
+#endif

+#ifdef HAVE_GETGRENT
 /* Returns an entry from the /etc/group file. The first time it is called it
  * opens the file and returns the first entry; each successive call returns
  * the next entry, or nil if the end of the file has been reached.
@@ -539,15 +558,16 @@ etc_endgrent(VALUE obj)
 static VALUE
 etc_getgrent(VALUE obj)
 {
-#ifdef HAVE_GETGRENT
     struct group *gr;

     if (gr = getgrent()) {
 	return setup_group(gr);
     }
-#endif
     return Qnil;
 }
+#else
+#define etc_getgrent rb_f_notimplement
+#endif

 /* The etc module provides access to information from the /etc/passwd and
  * /etc/group files on Linux and Unix systems.
@@ -614,6 +634,6 @@ Init_etc(void)

     rb_define_const(mEtc, "Group", sGroup);
     rb_extend_object(sGroup, rb_mEnumerable);
-    rb_define_singleton_method(sGroup, "each", etc_each_group, 0);
 #endif
+    rb_define_singleton_method(sGroup, "each", etc_each_group, 0);
 }
-- 
Tanaka Akira

In This Thread