Hi Piers,
first of all thanks a million for the SAPNWRFC binding you wrote for Ruby. I really appreciate your efforts there. Here in Component Validation we use Ruby for an internal backup tool that helps us archiving and quickly cross-restoring SAP systems (ABAP and JAVA stacks) within our heterogeneous Unix/Linux server environment. Being able to do RFC connects (Unicode!) would really be an additional driving argument pro Ruby.
The gem is working fine so far on Linux, Solaris and HPUX, all 64bit. On AIX however it makes the interpreter crash. While compiling with xlc runs ok with all the NWRFCSDK libs properly linked etc. the Ruby interpreter instantly aborts with an IOT trap (core dumped) when creating an RFC connection handle:
This is what the core file says:
dbx AIX-1.9.3-p194/bin/ruby core
Type 'help' for help.
[using memory image in core]
reading symbolic information ...warning: no source compiled with -g
IOT/Abort trap in pthread_kill at 0x9000000007ecd30 ($t1)
0x9000000007ecd30 (pthread_kill+0xb0) e8410028 ld r2,0x28(r1)
IOT/Abort trap in pthread_kill at 0x9000000007ecd30 ($t1)
0x9000000007ecd30 (pthread_kill+0xb0) e8410028 ld r2,0x28(r1)
(dbx) where
pthread_kill(??, ??) at 0x9000000007ecd30
_p_raise(??) at 0x9000000007ec5e4
- raise.raise(??) at 0x9000000000384e8
abort() at 0x9000000000536e4
rb_bug(0x1001f203c, 0x110020b18, 0x8ffffffffffffac1, 0xf00000002ff48000, 0x1000b2ae0, 0xa00000000000d032, 0xf1000a02003cbc00, 0xf000000030018f20) at 0x10005514c
sigsegv(0xb0000000b, 0x1101c7e50, 0x1101c7ba0) at 0x1000b2b80
_STL::_Rb_tree<int,_STL::pair<const int,RfcConverter*>,_STL::_Select1st<_STL::pair<const int,RfcConverter*> >,_STL::less<int>,_STL::allocator<_STL::pair<const int,RfcConverter*> > >::_M_insert(_STL::_Rb_tree_node_base*,_STL::_Rb_tree_node_base*,const _STL::pair<const int,RfcConverter*>&,_STL::_Rb_tree_node_base*)(??, ??, ??, ??, ??, ??) at 0x90000000255ba24
_STL::_Rb_tree<int,_STL::pair<const int,RfcConverter*>,_STL::_Select1st<_STL::pair<const int,RfcConverter*> >,_STL::less<int>,_STL::allocator<_STL::pair<const int,RfcConverter*> > >::insert_unique(const _STL::pair<const int,RfcConverter*>&)(??, ??, ??) at 0x90000000255b7ac
_STL::_Rb_tree<int,_STL::pair<const int,RfcConverter*>,_STL::_Select1st<_STL::pair<const int,RfcConverter*> >,_STL::less<int>,_STL::allocator<_STL::pair<const int,RfcConverter*> > >::insert_unique(_STL::_Rb_tree_iterator<_STL::pair<int,RfcConverter*>,_STL::_Nonconst_traits<_STL::pair<int,RfcConverter*> > >,const _STL::pair<const int,RfcConverter*>&)(??, ??, ??, ??) at 0x900000002559ec8
RfcConverter::getConverter(const unsigned short*,const unsigned short*,short,unsigned int)(??, ??, ??, ??) at 0x9000000025570c0
RfcConverter::utf8Tosapuc(const unsigned short*,const unsigned char*,unsigned int,unsigned short*,unsigned int*,unsigned int*)(??, ??, ??, ??, ??, ??) at 0x9000000025571ac
- nrfc.RfcUTF8ToSAPUC(??, ??, ??, ??, ??, ??) at 0x900000002401570
u8to16(0x1103ea1a0) at 0x900000000cfaa00
SAPNW_RFC_HANDLE_new(0x1105aae90, 0x1103d8dd8) at 0x900000000cfde50
call_cfunc(0x9001000a0437378, 0x1105aae90, 0x100000001, 0x100000001, 0x110065830) at 0x10006d1fc
vm_call_cfunc(0x110060c30, 0x110164bc8, 0x100000001, 0x1105aae90, 0x0, 0x11072f510) at 0x10006ff30
vm_call_method(0x110060c30, 0x110164bc8, 0x100000001, 0x0, 0x0, 0x3e8, 0x11072f510, 0x1105aae90) at 0x1000700e0
vm_exec_core(0x110060c30, 0x0) at 0x1000747c0
vm_exec(0x110060c30) at 0x10007806c
vm_call0(0x110060c30, 0x1103d8dd8, 0x1c8, 0x100000001, 0x1100657e0, 0x1105612f0) at 0x10006dc78
rb_call0(0x1103d8dd8, 0x1c8, 0x100000001, 0x1100657e0, 0x100000001, 0x6) at 0x10006e344
rb_call(0x1103d8dd8, 0x1c8, 0x100000001, 0x1100657e0, 0x100000001) at 0x10006e3c8
rb_funcall2(0x1103d8dd8, 0x1c8, 0x100000001, 0x1100657e0) at 0x10006c778
rb_obj_call_init(0x1103d8dd8, 0x100000001, 0x1100657e0) at 0x1000c0728
rb_class_new_instance(0x100000001, 0x1100657e0, 0x110588098) at 0x100064714
call_cfunc(0x1100246b0, 0x110588098, 0xffffffffffffffff, 0x100000001, 0x1100657e0) at 0x10006d1a4
vm_call_cfunc(0x110060c30, 0x110164cd0, 0x100000001, 0x110588098, 0x0, 0x1101d6310) at 0x10006ff30
vm_call_method(0x110060c30, 0x110164cd0, 0x100000001, 0x0, 0x0, 0x3e8, 0x1101d6310, 0x110588098) at 0x1000700e0
vm_exec_core(0x110060c30, 0x0) at 0x1000747c0
vm_exec(0x110060c30) at 0x10007806c
eval_string_with_cref(0x110197290, 0x110337370, 0x1101969f8, 0x0, 0x1101961c0, 0x100000001) at 0x100078eb0
eval_string(0x110197290, 0x110337370, 0x1101969f8, 0x1101961c0, 0x100000001) at 0x1000792e0
rb_f_eval(0x400000004, 0x110065750, 0x110197290) at 0x1000801b0
call_cfunc(0x11002c0c0, 0x110197290, 0xffffffffffffffff, 0x400000004, 0x110065750) at 0x10006d1a4
vm_call_cfunc(0x110060c30, 0x110164e30, 0x400000004, 0x110197290, 0x0, 0x1101f2590) at 0x10006ff30
vm_call_method(0x110060c30, 0x110164e30, 0x400000004, 0x0, 0x8, 0xb20, 0x1101f2590, 0x110197290) at 0x1000700e0
vm_exec_core(0x110060c30, 0x0) at 0x1000747c0
vm_exec(0x110060c30) at 0x10007806c
invoke_block_from_c(0x110060c30, 0x110165118, 0x110199ef0, 0x0, 0x0, 0x0, 0x0) at 0x10006c424
vm_yield(0x110060c30, 0x0, 0x0) at 0x100079c08
rb_yield_0(0x0, 0x0) at 0x100079c6c
loop_i() at 0x100081734
rb_rescue2(0x11002c390, 0x0, 0x0, 0x0, 0x1101b4390, 0x0, 0x110065620, 0x0) at 0x1000bd794
rb_f_loop(0x110199ef0) at 0x1000817f4
call_cfunc(0x11002c138, 0x110199ef0, 0x0, 0x0, 0x110065620) at 0x10006d1cc
vm_call_cfunc(0x110060c30, 0x1101650f0, 0x0, 0x110199ef0, 0x110165118, 0x1101f3190) at 0x10006ff30
vm_call_method(0x110060c30, 0x1101650f0, 0x0, 0x110165118, 0x8, 0xb50, 0x1101f3190, 0x110199ef0) at 0x1000700e0
vm_exec_core(0x110060c30, 0x0) at 0x1000747c0
vm_exec(0x110060c30) at 0x10007806c
invoke_block_from_c(0x110060c30, 0x110165220, 0x110199ef0, 0x100000001, 0xfffffffffffb060, 0x0, 0x0) at 0x10006c424
vm_yield(0x110060c30, 0x100000001, 0xfffffffffffb060) at 0x100079c08
rb_yield_0(0x100000001, 0xfffffffffffb060) at 0x100079c6c
catch_i(0x46250e, 0x0) at 0x10008197c
rb_catch_obj(0x46250e, 0x11002c3a8, 0x0) at 0x10007a444
rb_f_catch(0x100000001, 0x1100655e0) at 0x100081a2c
call_cfunc(0x11002c108, 0x110199ef0, 0xffffffffffffffff, 0x100000001, 0x1100655e0) at 0x10006d1a4
vm_call_cfunc(0x110060c30, 0x1101651f8, 0x100000001, 0x110199ef0, 0x110165220, 0x1101f2d90) at 0x10006ff30
vm_call_method(0x110060c30, 0x1101651f8, 0x100000001, 0x110165220, 0x8, 0xb40, 0x1101f2d90, 0x110199ef0) at 0x1000700e0
vm_exec_core(0x110060c30, 0x0) at 0x1000747c0
vm_exec(0x110060c30) at 0x10007806c
invoke_block_from_c(0x110060c30, 0x1101653d8, 0x1103c0f08, 0x100000001, 0xfffffffffffd410, 0x0, 0x0) at 0x10006c424
vm_yield(0x110060c30, 0x100000001, 0xfffffffffffd410) at 0x100079c08
rb_yield_0(0x100000001, 0xfffffffffffd410) at 0x100079c6c
catch_i(0x39d50e, 0x0) at 0x10008197c
rb_catch_obj(0x39d50e, 0x11002c3a8, 0x0) at 0x10007a444
rb_f_catch(0x100000001, 0x110065570) at 0x100081a2c
call_cfunc(0x11002c108, 0x1103c0f08, 0xffffffffffffffff, 0x100000001, 0x110065570) at 0x10006d1a4
vm_call_cfunc(0x110060c30, 0x1101653b0, 0x100000001, 0x1103c0f08, 0x1101653d8, 0x1101f2d90) at 0x10006ff30
vm_call_method(0x110060c30, 0x1101653b0, 0x100000001, 0x1101653d8, 0x8, 0xb40, 0x1101f2d90, 0x1103c0f08) at 0x1000700e0
vm_exec_core(0x110060c30, 0x0) at 0x1000747c0
vm_exec(0x110060c30) at 0x10007806c
rb_iseq_eval_main(0x11039fab0) at 0x10007fd48
ruby_exec_internal(0x11039fab0) at 0x1000bf0f4
ruby_exec_node(0x11039fab0) at 0x1000bf180
ruby_run_node(0x11039fab0) at 0x1000bf958
main(0x400000004, 0xffffffffffffb58) at 0x1000004e8
(dbx)
Any suggestion would be appreciated.
Kind regards,
Norman