I tracked down the bug.  It's in the poamediator.cc line 677
Replace that line...
if (inf.pstate != Active && inf.pstate != Stopped &&
 
with this
--------------------------
if (inf.pstate == Active) {
  CORBA::Address *addr = (CORBA::Address*) inf.ior.addr();
 

--- On Tue, 7/21/09, Karel Gardas <kgar...@objectsecurity.com> wrote:


From: Karel Gardas <kgar...@objectsecurity.com>
Subject: Re: [mico-devel] imr issue
To: "Mark Richardson" <markm...@yahoo.com>
Cc: mico-devel@mico.org
Date: Tuesday, July 21, 2009, 12:25 PM


Mark Richardson wrote:
> Hi all,
> I've been playing with the imr (again for all that have seen my posts 
> before), and I found an interesting bug. The REALLY interesting part is that 
> mico 2.3.7 doesn't have this problem while 2.3.11, 2.3.12, and 2.3.13 do 
> (currently using 2.3.13)!
>  
> I have a simple client & server that I use and they work just fine.  When 
> creating the imr entry I use the following command...
> imr create ImrTestInterfaceServer poa "/mylocation/ImrTestServer" 
> IDL:ImrTestInterface:1.0#ImrTestInterfaceServer -ORBImpRepoAddr 
> inet:myMachine:2345
>  
> Then, I create multiple instances on the imr...
> imr create ImrTestInterfaceServer0 poa "/mylocation/ImrTestServer 0" 
> IDL:ImrTestInterface:1.0#ImrTestInterfaceServer0 -ORBImpRepoAddr 
> inet:myMachine:2345
> imr create ImrTestInterfaceServer1 poa "/mylocation/ImrTestServer 1" 
> IDL:ImrTestInterface:1.0#ImrTestInterfaceServer1 -ORBImpRepoAddr 
> inet:myMachine:2345
>  
> If I use the client to communicate with just one of them everything is fine.  
> But if I do this...
> 1. new client connects to the original (ImrTestServer)
> 2. disconnect & exit client (ImrTestServer still running)
> 3. new client connects to ImrTestServer0
> 4. disconnect & exit client (ImrTestServer0 still running)
> 5. new client connects to ImrTestServer1
> 6. disconnect & exit client (ImrTestServer1 still running)
> ------ everything up till now is good -----
> 7. new client connect to the original (ImrTestServer)
>  
> Then sometimes it works fine (if I restarted micod just before this), but 
> most of the time ImrTestServer0 crashes.  Sometimes I even get ImrTestServer1 
> to crash.
>  
> The error that I get from the micod is...
> ImrTestServer: mt_dispatcher.cc:124: virtual void 
> MICO:MTDispatcher::process(MICO::seg_type*): Assertion '_msg->conn->state() 
> == MICOMT:StateRefCnt::Terminated' failed
>  
> I always will get this if I repeat steps 1-6 enough (I've never gotten all 
> the way through 2 times).  80% of the time the other 2 servers that are not 
> being accessed by the client crash.
>  
> I've just started debugging, but it's gonna take me a while because I'm not 
> that familar with the MTdispatcher.  Anyone out there got any ideas?

It would be nice to see all threads stack dump of the crashed process
and also of the micod. Without it, it's hard to make any hint for
further debugging.

Cheers,
Karel
-- 
Karel Gardas                  kgar...@objectsecurity.com
ObjectSecurity Ltd.           http://www.objectsecurity.com



      
_______________________________________________
Mico-devel mailing list
Mico-devel@mico.org
http://www.mico.org/mailman/listinfo/mico-devel

Reply via email to