[muscle] Re: Muscle on Solaris

  • From: Lior Okman <lior.okman@xxxxxxxxxxxxxxxxxxxxxxxx>
  • To: muscle@xxxxxxxxxxxxx
  • Date: Mon, 10 Jul 2006 19:26:05 +0300

Hi Jeremy,

Jeremy Friesner wrote:
>> Line 8 in the PulseNode.cpp file is the constructor, and the only thing
>> that happens there is the member initializations.
> Indeed ... I can't imagine how a crash could occur in that area, unless the 
> "this" pointer is invalid.  (Does this=0xf840c sound valid to you?  It seems 
> suspiciously small to me...).  Given that, I can think of a few things to try:
This does seem suspicious.
> 1) Put fprintf's at line 30 of StorageReflectSession.cpp and in the 
> PulseNode() constructor, just to make sure the stack crawl is accurate -- if 
> the crash is indeed happening where it says it is, you should see one printed 
> but not the other.  (since the stack crawl is a bit muddled, it's good to 
> double check)
I will try this.
> 2) Add -DMUSCLE_AVOID_NEWNOTHROW to the Makefile to see if the bug is related 
> to new (nothrow)... this flag will change it so the code always uses the 
> regular new operator instead.
I did this, and it doesn't make any difference
> 3) Upgrade your compiler to a newer version (4.x?) and see if the crash goes 
> away then.
I'm afraid that isn't possible.

However I recompiled MUSCLE as a 64bit binary (added -m64 to the CC
options) and all my problems went away. Something in the 32bit
optimizations make MUSCLE fail on 32bit SPARC Solaris.

My other lead is to not specify -O at all, and start adding the -f
options that the various -O switches actually aggregate and see which
optimization is causing the problem. I'll report back on this later (I'm
a bit swamped at the moment).

> -Jeremy

Other related posts: