From: "Aleksi Niemelä" Date: 2000-09-25T05:36:54+09:00 Subject: [ruby-talk:5092] RE: Hanging require > ruby -v a.rb > ruby 1.6.0 (2000-09-19) [i686-linux] > << and hangs >> Here's a patch for my earlier hanging. I can't say for sure this works, as I'm not so familiar with Ruby internals, especially feature loading. If it does it's due to Yashi's help. If it doesn't all the blame is on me. (Actually the version in next example is 1.6.1, but I had to tweak version.h because rbconfig.rb didn't run nicely when building.) ~/src/ruby/ruby -v a.rb ruby 1.6.0 (2000-09-24) [i686-linux] ./b.rb:1: undefined local variable or method `foo' for # (NameError) from ./b_ext.rb:1:in `require' from ./b_ext.rb:1 from a.rb:1:in `require' from a.rb:1 - Aleksi Index: eval.c =================================================================== RCS file: /home/cvs/ruby/eval.c,v retrieving revision 1.109 diff -u -r1.109 eval.c --- eval.c 2000/09/22 18:15:41 1.109 +++ eval.c 2000/09/24 20:32:14 @@ -5031,7 +5031,7 @@ { VALUE *p, *pend; char *f; - int len; + int len_f, len_feature; p = RARRAY(rb_features)->ptr; pend = p + RARRAY(rb_features)->len; @@ -5040,12 +5040,13 @@ if (strcmp(f, feature) == 0) { goto load_wait; } - len = strlen(feature); - if (strncmp(f, feature, len) == 0) { - if (strcmp(f+len, ".so") == 0) { + len_f = strlen(f); + len_feature = strlen(feature); + if (len_f == len_feature && strncmp(f, feature, len_f) == 0) { + if (strcmp(f+len_f, ".so") == 0) { return Qtrue; } - if (strcmp(f+len, ".rb") == 0) { + if (strcmp(f+len_f, ".rb") == 0) { if (wait) goto load_wait; return Qtrue; }