Archived
This forum has been archived. Please start a new discussion on GitHub.
Ice 3.1.1 core dump while invoke on replica
I am trying Ice-3.1.1 for another project on my own laptop running Ubuntu 6.10
A simple testing application works fine with 3.0.1 but core dump with 3.1.1
I am using g++ 4.1
This only happened when requests a replica group, but works fine with ordinary adapter.
A simple testing application works fine with 3.0.1 but core dump with 3.1.1
I am using g++ 4.1
*** glibc detected *** /opt/Ice-3.1/bin/icegridregistry: malloc(): memory corruption: 0x082f13c1 *** ======= Backtrace: ========= /lib/tls/i686/cmov/libc.so.6[0xb74661cd] /lib/tls/i686/cmov/libc.so.6(malloc+0x7f)[0xb746783f] /usr/lib/libstdc++.so.6(_Znwj+0x27)[0xb76174b7] /opt/Ice-3.1/bin/icegridregistry[0x8172b0a] /opt/Ice-3.1/bin/icegridregistry[0x8172d55] /opt/Ice-3.1/bin/icegridregistry[0x8173163] /opt/Ice-3.1/lib/libIce.so.31(_ZNK3Ice7Locator18___findAdapterByIdERN11IceInternal8IncomingERKNS_7CurrentE+0xb6)[0xb783e210] /opt/Ice-3.1/lib/libIce.so.31(_ZN3Ice7Locator10__dispatchERN11IceInternal8IncomingERKNS_7CurrentE+0xab)[0xb783e7bd] /opt/Ice-3.1/lib/libIce.so.31(_ZN11IceInternal8Incoming6invokeERKNS_6HandleINS_14ServantManagerEEE+0x76f)[0xb780df33] /opt/Ice-3.1/lib/libIce.so.31(_ZN3Ice11ConnectionI9invokeAllERN11IceInternal11BasicStreamEiihRKNS1_6HandleINS1_14ServantManagerEEERKNS4_INS_13ObjectAdapterEEE+0x1be)[0xb77dd5fa] /opt/Ice-3.1/lib/libIce.so.31(_ZN3Ice11ConnectionI7messageERN11IceInternal11BasicStreamERKNS1_6HandleINS1_10ThreadPoolEEE+0x1d2)[0xb77e3f44] /opt/Ice-3.1/lib/libIce.so.31(_ZN11IceInternal10ThreadPool3runEv+0x1415)[0xb78ba221] /opt/Ice-3.1/lib/libIce.so.31(_ZN11IceInternal10ThreadPool18EventHandlerThread3runEv+0x96)[0xb78baa9c] /opt/Ice-3.1/lib/libIceUtil.so.31[0xb768df6d] /lib/tls/i686/cmov/libpthread.so.0[0xb7649504] /lib/tls/i686/cmov/libc.so.6(__clone+0x5e)[0xb74cc51e] ======= Memory map: ======== 08048000-08248000 r-xp 00000000 03:02 889890 /opt/Ice-3.1.1/bin/icegridregistry 08248000-08253000 rw-p 00200000 03:02 889890 /opt/Ice-3.1.1/bin/icegridregistry 08253000-082ff000 rw-p 08253000 00:00 0 [heap]
This only happened when requests a replica group, but works fine with ordinary adapter.
0
Comments
-
What hardware are you using, and which processor?0
-
Could you also describe a bit more the circumstances under which the crash happens? What type of load balancing do you use for the replica group (None, Random, Round-robin, etc)? How do your clients invoke on the indirect proxy (often or rarely, using or not per-request load balancing)?
If you can easily reproduce the crash, it would be great if you can send us a small test case. Seeing the strack trace with a debug build would also help to identify where the crash comes from.
Cheers,
Benoit.0 -
My processor is centrino 1.4G
This crash happened both on Celeon 2.8G and Pentium4 2.8G with HT.
These machines all run Ubuntu 6.10.
I am using indirect proxy. Both round-robin and none type replica group crash. I have not tries random type.
Here is my code:
Slice:module MyTest { class MyObj { string name; string time; }; interface MyServer { MyObj getResult(); }; };
Server side:
MyServer.h#ifndef MYSERVER_H_ #define MYSERVER_H_ #include <Ice/Ice.h> #include <IceBox/IceBox.h> #include "MyTest.h" #if defined(_WIN32) # define MY_API __declspec(dllexport) #else # define MY_API /**/ #endif extern "C" { MY_API IceBox::Service* create(Ice::CommunicatorPtr communicator); } namespace MyTest { class MY_API MyService : virtual public IceBox::Service { public: virtual void start(const std::string& name, const Ice::CommunicatorPtr& ic, const Ice::StringSeq& args); virtual void stop(); private: Ice::ObjectAdapterPtr _adapter; }; class MyServerI : virtual public MyServer { public: MyServerI(const std::string&); virtual MyObjPtr getResult(const Ice::Current& = Ice::Current()); private: std::string _name; }; } #endif /*MYSERVER_H_*/
MyServer.cpp#include "MyServer.h" #include <Ice/Ice.h> using namespace MyTest; using namespace std; extern "C" { MY_API IceBox::Service* create(Ice::CommunicatorPtr communicator) { return new MyService; } } MyServerI::MyServerI(const std::string& name) : _name(name) { }; MyTest::MyObjPtr MyServerI::getResult(const Ice::Current&) { MyObjPtr obj = new MyObj; obj->name = _name; obj->time = ""; return obj; } void MyService::start( const ::std::string& name, const ::Ice::CommunicatorPtr& ic, const ::Ice::StringSeq& args) { _adapter = ic->createObjectAdapter(name); Ice::ObjectPtr object = new MyServerI(name); _adapter->add( object, ic->stringToIdentity("Manager") ); _adapter->activate(); } void MyService::stop() { _adapter->deactivate(); }
MyClient.cpp#include <Ice/Ice.h> #include "MyTest.h" #include <iostream> using namespace MyTest; using namespace std; int main(int argc, char* argv[]) { cout << "init." << endl; Ice::PropertiesPtr props = Ice::createProperties(); props->setProperty("Ice.Default.Locator", "bbc/Locator:tcp -h 127.0.0.1 -p 10000"); Ice::InitializationData init; init.properties=props; Ice::CommunicatorPtr ic = Ice::initialize(init); cout << "create proxy" << endl; Ice::ObjectPrx proxy = ic->stringToProxy("Manager@ReplicatedServer"); cout << "cast" << endl; MyServerPrx obj = MyServerPrx::checkedCast(proxy); cout << "get" << endl; int i = 5; while(i-- > 0) { MyObjPtr aaa = obj->getResult(); std::cout << aaa->name << " " << std::endl; sleep(1); } // cout << proxy->ice_getAdapterId(); return 0; }
app.xml<icegrid> <application name="app"> <server-template id="MyServer"> <parameter name="Index" /> <icebox id="MyServer${Index}" exe="/opt/Ice-3.1/bin/icebox" activation="on-demand"> <service name="MyServer${Index}" entry="MyServer:create"> <adapter name="MyServer${Index}" endpoints="tcp" replica-group="ReplicatedServer"/> </service> </icebox> </server-template> <replica-group id="ReplicatedServer"> <load-balancing type="round-robin" n-replicas="3"/> </replica-group> <node name="node1"> <server-instance template="MyServer" Index="1" /> </node> <node name="node2"> <server-instance template="MyServer" Index="2" /> </node> <node name="node3"> <server-instance template="MyServer" Index="3" /> </node> </application> </icegrid>
I run this client program like this:for i in 1 2 3 4 5; do for m in 1 2 3 4 5; do LD_LIBRARY_PATH=/opt/Ice-3.1/lib ./MyClient & done; done
If I use Manager@MyAdapter1.MyAdapter1.MyAdapter it works fine. But the code shows above crash every time.0 -
Thanks, I'll try to reproduce it with your code.
Btw, did you build Ice yourself or did you use a Linux binary package (the RPM or tar.gz?)? Did you try with a debug build to see if it also abort?
Cheers,
Benoit.0 -
I build ice 3.1.1 from source. I have tried to rebuild with gcc 3.3 but crash again.
How to build a debug version? Does it mean build without optimize=yes?0 -
You must use OPTIMIZE=no (or not set it at all) for a debug build. In any case, I think Benoit was already able to reproduce the problem, and is currently investigating.0
-
Hi,
I've posted a patch that should fix this problem [thread=2745]here[/thread]. Thanks for the sample code and instructions on how to reproduce this problem!
Cheers,
Benoit.0 -
It works!!
Thank you!!0