[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Autoload problem in 1.8.5

Han Holl

11/9/2006 10:37:00 AM

Hi,

I encountered a problem in 1.8.5, or at least in ruby-1.8.5-4.fc6 from
Fedora Core 6.
Do this:
irb
irb(main):001:0> autoload :Syslog, 'syslog'
=> nil
irb(main):002:0> require 'syslog'

and get a lot of error messages about already initialized constants.
Also, syslog.so appears twice in $".

It can get even worse if you have a couple of autoloads for the same class.
With 1.8.4 this problem didn't exist.

Cheers,

Han Holl

4 Answers

David Vallner

11/9/2006 12:43:00 PM

0

Han Holl wrote:
> Hi,
>
> I encountered a problem in 1.8.5, or at least in ruby-1.8.5-4.fc6 from
> Fedora Core 6.
> Do this:
> irb
> irb(main):001:0> autoload :Syslog, 'syslog'
> => nil
> irb(main):002:0> require 'syslog'
>
> and get a lot of error messages about already initialized constants.
> Also, syslog.so appears twice in $".
>

Could this be related to the recurrent FXRuby load bug? If so, it's
probably being Worked On.

Already initialized constant messages are *warnings* - you can safely
ignore those if you know they're not your fault. Basically, just ignore
this until it goes away, Someone Broke (tm) DLL/SO loading.

I wonder if that means we'll get the Christmas release after all :P

David Vallner

Han Holl

11/9/2006 1:21:00 PM

0

On 11/9/06, David Vallner <david@vallner.net> wrote:
> Han Holl wrote:
> > Hi,
> >
> > I encountered a problem in 1.8.5, or at least in ruby-1.8.5-4.fc6 from
> > Fedora Core 6.
> > Do this:
> > irb
> > irb(main):001:0> autoload :Syslog, 'syslog'
> > => nil
> > irb(main):002:0> require 'syslog'
> >
> > and get a lot of error messages about already initialized constants.
> > Also, syslog.so appears twice in $".
> >
>
> Could this be related to the recurrent FXRuby load bug? If so, it's
> probably being Worked On.
>
It has nothing to do with FXRuby.

> Already initialized constant messages are *warnings* - you can safely
> ignore those if you know they're not your fault. Basically, just ignore
> this until it goes away, Someone Broke (tm) DLL/SO loading.
>
Yes, I know I can ignore them, but sixty lines of them are kind of
hard to ignore, and in the meantime you have to try to find the
output.

Cheers,

Han Holl

Lyle Johnson

11/9/2006 1:27:00 PM

0

On 11/9/06, Han Holl <han.holl@gmail.com> wrote:

> It has nothing to do with FXRuby.

What David was trying to say (I think) is that a change was introduced
in Ruby 1.8.5 that caused Ruby to start spewing "Already initialized
constant" messages whenever you try to load FXRuby. You may be seeing
another symptom of the same problem, just in a different context.

For more information, see this bug report:

http://rubyforge.org/tracker/?func=detail&aid=5701&group_id=426&...

Hope this helps,

Lyle

Han Holl

11/9/2006 2:09:00 PM

0

On 11/9/06, Lyle Johnson <lyle.johnson@gmail.com> wrote:
> On 11/9/06, Han Holl <han.holl@gmail.com> wrote:
>
> > It has nothing to do with FXRuby.
>
> What David was trying to say (I think) is that a change was introduced
> in Ruby 1.8.5 that caused Ruby to start spewing "Already initialized
> constant" messages whenever you try to load FXRuby. You may be seeing
> another symptom of the same problem, just in a different context.
>
> For more information, see this bug report:
>
> http://rubyforge.org/tracker/?func=detail&aid=5701&group_id=426&...
>
> Hope this helps,
>

If you do a diff of eval.c from 1.8.4 to 1.8.5, this is part of it:

@@ -7017,12 +7145,11 @@
ruby_safe_level = safe;
found = search_required(fname, &feature, &path);
if (found) {
- if (!path || load_wait(RSTRING(path)->ptr)) {
+ if (!path || load_wait(RSTRING(feature)->ptr)) {
result = Qfalse;
}
else {
ruby_safe_level = 0;
- rb_provide_feature(feature);
switch (found) {
case 'r':
/* loading ruby library should be serialized. */
@@ -7045,6 +7172,7 @@
rb_ary_push(ruby_dln_librefs, LONG2NUM(handle));
break;
}
+ rb_provide_feature(feature);
result = Qtrue;
}
}

I reverted the last patch (put rb_provide_feature(feature); at the top
again) and everything seems fine.
And yes, it's possible that FXRuby is bitten by this as well.
Of course, someone, probably Nobuyoshi Nakada, didn't push this line
to the bottom for nothing, so I probably broke something else with my
reversion.
I guess this has to do with it (from Changelog):
Sat Jul 15 23:50:12 2006 Nobuyoshi Nakada <nobu@ruby-lang.org>

* eval.c (rb_require_safe): wait for another thread requiring the same
feature. fixed: [ruby-core:08229]
but I could be totally wrong here.

Cheers,

Han Holl