Hello!
I'm trying to send large amount of data in one chunk with ami call (data callback object). When chunk is too large, i'm getting Ice::MemoryLimitException in callback object and from this object make ami call (SendItemError), reporting this error. After this, data callback object is never been deleted. Data callback object is created for each request.
Here is some log records:Code:struct AgentTaskEvent: public ::agent::AMI_IAgentTaskEvent_OnItemComplete { AgentTaskEvent() { LOG_ERROR() << "AgentTaskEvent ctor" << this; } ~AgentTaskEvent() { LOG_ERROR() << "AgentTaskEvent dtor" << this; } virtual void ice_response() { } virtual void ice_exception(const ::Ice::Exception& ex) { LOG_A(llERR) << "Exception while item completion: " << ice_helpers::RootExPrint(ex); try { ex.ice_throw(); } catch(const Ice::MemoryLimitException &) { SendItemError(E_OUTOFMEMORY, ex.what()); } catch(...) { } LOG_A(llERR) << "Exception exit"; } };
As you can see, all event objects before exception were allocated at the same address (0041FD48), but after exception we get a new one (0041FCA8), so 0041FD48 just living dead - it's destructor will never been calledCode:10 Feb 2009 14:02:24.403 [Error] AgentTaskEvent ctor0041FD48 10 Feb 2009 14:02:24.403 [Error] AgentTaskEvent dtor0041FD48 10 Feb 2009 14:22:25.184 [Error] AgentTaskEvent ctor0041FD48 10 Feb 2009 14:22:26.543 [Error] Exception while item completion: ..\..\include\Ice/BasicStream.h:112: Ice::MemoryLimitException: 10 Feb 2009 14:22:26.572 [Error] Exception exit 10 Feb 2009 14:24:43.996 [Error] AgentTaskEvent ctor0041FCA8 10 Feb 2009 14:24:43.996 [Error] AgentTaskEvent dtor0041FCA8 10 Feb 2009 14:24:44.199 [Error] AgentTaskEvent ctor0041FCA8 10 Feb 2009 14:24:44.199 [Error] AgentTaskEvent dtor0041FCA8 10 Feb 2009 14:24:44.324 [Error] AgentTaskEvent ctor0041FCA8 10 Feb 2009 14:24:44.324 [Error] AgentTaskEvent dtor0041FCA8 10 Feb 2009 14:24:44.621 [Error] AgentTaskEvent ctor0041FCA8 10 Feb 2009 14:24:44.621 [Error] AgentTaskEvent dtor0041FCA8 10 Feb 2009 14:24:45.090 [Error] AgentTaskEvent ctor0041FCA8 10 Feb 2009 14:24:45.106 [Error] AgentTaskEvent dtor0041FCA8
When there is no MemoryLimitException, all callback objects allocated at the same address (callbacks are not rare).
Environment:
Ice 3.3, windows xp, VC 9.0.
<IceProperties>
<Item>--Ice.ThreadPool.Server.Size=4</Item>
<Item>--Ice.ThreadPool.Client.Size=4</Item>
<Item>--Ice.ACM.Client=0</Item>
</IceProperties>
Thanks!


Reply With Quote
