Please report new issues athttps://github.com/DOCGroup
Asynchronous request handler AMH_<some interface>::<some method>_skel use TAO_Server_Request.incoming_ field to get a data of the request. But if client and server are collocated this field have a NULL value that cause crash. I suppose it may be a bug of TAO_IDL\be\be_visitor_operation/amh_ss.cpp.
can you provide a test program to reproduce this bug?
Created attachment 464 [details] AMH_Crash.tar.gz test source code
1) Decompress the attachment info $(TAO_ROOT)/tests directory 2) run 'make' command 3) run 'server' binary This test is modified AMH_Oneway test in $(TAO_ROOT)/tests drirectory.
thanks for the test, I will integrate in cvs after x.4.9 is out, no idea when someone gets time to fix this, if you need a fix soon, contact commercial support
accept, test program crashes
Callstack in the crash: 0047208F ACE_Message_Block::base(this=NULL) 004720D7 ACE_Message_Block::rd_ptr(this=NULL) 0043F073 ACE_InputCDR::rd_ptr(this=NULL) 0043F094 ACE_InputCDR::adjust(this=NULL, size=8, align=8, buf=:0149F76C) 0043F0F8 ACE_InputCDR::adjust(this=NULL, size=8, buf=:0149F76C) 00441A4E ACE_InputCDR::read_8(this=NULL, x=:0149F7CC) 0043EBBE ACE_InputCDR::read_ulonglong(this=NULL, x=:0149F7CC) 0043F45E operator >>(is=NULL, x=:0149F7CC) 005771B2 operator >>(is=NULL, x=:0149F7CC) 004052E5 POA_Test::AMH_Roundtrip::test_method_skel(_tao_server_request=:0149FAAC, =:0149F910, _tao_servant=:0012FE88) 00785264 TAO_ServantBase::asynchronous_upcall_dispatch(this=:0012FE74, req=:0149FAAC, servant_upcall=:0149F910, derived_this=:0012FE88) 004068B0 POA_Test::AMH_Roundtrip::_dispatch(this=:0012FE88, req=:0149FAAC, context=:0149F910) 00759910 TAO_Object_Adapter::do_dispatch(this=:00DAECB4, req=:0149FAAC, upcall=:0149F910) 00757673 TAO_Object_Adapter::dispatch_servant(this=:00DAECB4, key=:0149FB34, req=:0149FAAC, forward_to={ :0149FC1C }) 0075874A TAO_Object_Adapter::dispatch(this=:00DAECB4, key=:0149FB34, request=:0149FAAC, forward_to={ :0149FC1C }) 0057410F TAO_Adapter_Registry::dispatch(this=:00D8B66C, key=:0149FB34, request=:0149FAAC, forward_to={ }) 005EA20F TAO_Request_Dispatcher::dispatch(this=:00D915CC, orb_core=:00D8B454, request=:0149FAAC, forward_to={ }) 0057AAFE TAO::Collocated_Invocation::invoke(this=:0149FC08, cpb=:0000DEAD, strat=1 /* tao::tao_cs_thru_poa_strategy */) 005BCF5F TAO::Invocation_Adapter::invoke_collocated_i(this=:0149FD94, stub=:00DADAF0, details=:0149FCF4, effective_target=:0149FCA8, strat=1 /* tao::tao_cs_thru_poa_strategy */) 005BCD6A TAO::Invocation_Adapter::invoke_i(this=:0149FD94, stub=:00DADAF0, details=:0149FCF4) 005BCBE1 TAO::Invocation_Adapter::invoke(this=:0149FD94, ex_data=NULL, ex_count=0) 00403102 Test::Roundtrip::test_method(this=:00DBFE10, send_time=10) 00401200 start_client(_arg=:00DBFE10)
for amh it seems we should use TAO::Upcall_Wrapper::upcall more, in the POA_Test::AMH_Roundtrip::test_method_skel method things crash because we don't check for the collocated case. What we can use is: if (_tao_server_request.incoming ()) { this means we have a input cdr so can unmarshal things. If this is zero, we have a collocated call we need an upcall command that takes the arguments from the operation details of the tao-server-request and then invokes things. Seems a change to the IDL compiler to generate an special upcall command and some changes to the current generated AMH_ method.
regression is in cvs
updated version
still valid for 1.5.2
Changed component to AMH
updated version, still valid
needs work in the idl compiler and core libraries, several days of work to get this fixed
still failing with x.5.10