Core with SIGSEGV during CREATE PROCEDURE statement when procedure validation fails

Bug #1404053 reported by Hans Zeller
6
This bug affects 1 person
Affects Status Importance Assigned to Milestone
Trafodion
Fix Committed
High
Hans Zeller

Bug Description

This is a bug seen by John DeRoo. He ran into a situation when he did a CREATE PROCEDURE and for some reason tdm_udrserv reported an error back during validation of the procedure.

In the executor, we see this stack trace:

#0 GuaConnectionToServer::closePhandle (this=0x7fffe8a245c0) at ../common/IpcGuardian.cpp:1727
here we delete the connection, due to an error we got back from the server – this is not allowed
#1 0x00007ffff4628c99 in IpcGuardianServer::stop (this=0x7fffe8a234f8) at ../common/IpcGuardian.cpp:3626
#2 0x00007ffff460a516 in IpcServer::release (this=0x7fffe8a234f8) at ../common/Ipc.cpp:618
#3 0x00007ffff4d37a36 in ExUdrServer::stop (this=0x7fffe8a23348) at ../executor/ExUdrServer.cpp:675
#4 0x00007ffff4d22ba0 in ExUdrTcb::reportLoadReply (this=0x7fffe8b3e310, loadWasSuccessful=0) at ../executor/ExUdr.cpp:1469
#5 0x00007ffff4d31c95 in UdrClientControlStream::actOnReceive (this=0x7fffe8a25380, conn=0x7fffe8a245c0) at ../executor/ExUdrClientIpc.cpp:737
#6 0x00007ffff4610b6d in IpcMessageStream::internalActOnReceive (this=0x7fffe8a25380, buffer=0x7fffe8a256b8, connection=0x7fffe8a245c0) at ../common/Ipc.cpp:3553
#7 0x00007ffff460ea93 in IpcMessageBuffer::callReceiveCallback (this=0x7fffe8a256b8, conn=0x7fffe8a245c0) at ../common/Ipc.cpp:2427
#8 0x00007ffff46223db in GuaConnectionToServer::wait (this=0x7fffe8a245c0, timeout=0, eventConsumed=0x7fffe959ba98, ipcAwaitiox=0x7fffe8a17328) at ../common/IpcGuardian.cpp:826
 Here we wait for the connection
#9 0x00007ffff460d2d3 in IpcSetOfConnections::waitOnSet (this=0x7fffe8a17238, timeout=-1, calledByESP=0, timedout=0x7ffffffe01b0) at ../common/Ipc.cpp:1791
#10 0x00007ffff5f07a80 in IpcAllConnections::waitOnAll (this=0x7fffe8a171d0, timeout=-1, calledByESP=0, timedout=0x7ffffffe01b0, waitTime=0x7ffffffe01a8) at ../common/Ipc.h:3073
#11 0x00007ffff4bcad52 in ex_root_tcb::fetch (this=0x7fffe8b40f28, cliGlobals=0xb90fc0, glob=0x7fffe8b37308, output_desc=0x7fffe8b6c788, diagsArea=@0x7ffffffe0398, timeLimit=-1, newOperation=1, closeCursorOnError=@0x7ffffffe0394) at ../executor/ex_root.cpp:1841
#12 0x00007ffff5ef8119 in CliStatement::fetch (this=0x7fffe8b4ba98, cliGlobals=0xb90fc0, output_desc=0x7fffe8b6c788, diagsArea=..., newOperation=1) at ../cli/Statement.cpp:5000
#13 0x00007ffff5e804b1 in SQLCLI_PerformTasks(CliGlobals *, ULng32, SQLSTMT_ID *, SQLDESC_ID *, SQLDESC_ID *, Lng32, Lng32, typedef __va_list_tag __va_list_tag *, SQLCLI_PTR_PAIRS *, SQLCLI_PTR_PAIRS *) (cliGlobals=0xb90fc0, tasks=4900, statement_id=0x7fffd3542790, input_descriptor=0x0, output_descriptor=0x7fffd3542838, num_input_ptr_pairs=0, num_output_ptr_pairs=0, ap=0x7ffffffe0650, input_ptr_pairs=0x0, output_ptr_pairs=0x0) at ../cli/Cli.cpp:3377
#14 0x00007ffff5e8147d in SQLCLI_Fetch(CliGlobals *, SQLSTMT_ID *, SQLDESC_ID *, Lng32, typedef __va_list_tag __va_list_tag *, SQLCLI_PTR_PAIRS *) (cliGlobals=0xb90fc0, statement_id=0x7fffd3542790, output_descriptor=0x7fffd3542838, num_ptr_pairs=0, ap=0x7ffffffe0650, ptr_pairs=0x0) at ../cli/Cli.cpp:3815
#15 0x00007ffff5f0eed3 in SQL_EXEC_Fetch (statement_id=0x7fffd3542790, output_descriptor=0x7fffd3542838, num_ptr_pairs=0) at ../cli/CliExtern.cpp:2728
#16 0x00007ffff4c3f2dc in ExeCliInterface::fetch (this=0x7ffffffe3260) at ../executor/ExExeUtilCli.cpp:615
#17 0x00007ffff4c4091f in ExeCliInterface::clearExecFetchClose (this=0x7ffffffe3260, inputBuf=0x0, inputBufLen=0, outputBuf=0x0, outputBufLen=0x0) at ../executor/ExExeUtilCli.cpp:1218
#18 0x00007ffff0d9f327 in CmpSeabaseDDL::validateRoutine (this=0x7ffffffe4b60, cliInterface=0x7ffffffe3260, className=0x7fffd353fbc8 "t100", methodName=0x7fffd353fbf8 "T100_io_nn", externalPath=0x7ffffffe2b40 "/opt/home/jderoo/github/trafodion/core/sqf/../sql/regress/rundir/udr/t100.jar", signature=0x7ffffffe0b30 "(Ljava/math/BigDecimal;[Ljava/math/BigDecimal;)V", numSqlParam=2, maxResultSets=0, optionalSig=0x0) at ../sqlcomp/CmpSeabaseDDLroutine.cpp:928
#19 0x00007ffff0d9dc31 in CmpSeabaseDDL::createSeabaseRoutine (this=0x7ffffffe4b60, createRoutineNode=0x7fffd353f7d0, currCatName=..., currSchName=...) at ../sqlcomp/CmpSeabaseDDLroutine.cpp:674
#20 0x00007ffff0d39300 in CmpSeabaseDDL::executeSeabaseDDL (this=0x7ffffffe4b60, ddlExpr=0x7fffd353ff80, ddlNode=0x7fffd353f7d0, currCatName=..., currSchName=...) at ../sqlcomp/CmpSeabaseDDLcommon.cpp:6445
#21 0x00007ffff54959aa in CmpStatement::process (this=0x7fffd3526d08, statement=...) at ../arkcmp/CmpStatement.cpp:911
#22 0x00007ffff5484e6f in CmpContext::compileDirect (this=0x7fffd4d06090, data=0x7fffe8b3acc0 "\200", data_len=312, outHeap=0x7fffe959b100, charset=15, op=CmpMessageObj::PROCESSDDL, gen_code=@0x7ffffffe5388, gen_code_len=@0x7ffffffe5384, parserFlags=0, diagsArea=0x7fffe8b3ae00) at ../arkcmp/CmpContext.cpp:718
#23 0x00007ffff4b5562e in ExDDLTcb::work (this=0x7fffe8b2f518) at ../executor/ex_ddl.cpp:265
#24 0x00007ffff4b729a3 in ex_tcb::sWork (tcb=0x7fffe8b2f518) at ../executor/ex_tcb.h:99
#25 0x00007ffff4cdfb2f in ExSubtask::work (this=0x7fffe8b2fa70) at ../executor/ExScheduler.cpp:751
#26 0x00007ffff4cdeef2 in ExScheduler::work (this=0x7fffe8b2f080, prevWaitTime=0) at ../executor/ExScheduler.cpp:328
#27 0x00007ffff4bc951b in ex_root_tcb::execute (this=0x7fffe8b2faf0, cliGlobals=0xb90fc0, glob=0x7fffe8b3a688, input_desc=0x7fffe8b4e538, diagsArea=@0x7ffffffe69c0, reExecute=0) at ../executor/ex_root.cpp:1029
#28 0x00007ffff5ef77f9 in CliStatement::execute (this=0x7fffe8b398f0, cliGlobals=0xb90fc0, input_desc=0x7fffe8b4e538, diagsArea=..., execute_state=CliStatement::INITIAL_STATE_, fixupOnly=0, cliflags=0) at ../cli/Statement.cpp:4785
#29 0x00007ffff5e800b6 in SQLCLI_PerformTasks(CliGlobals *, ULng32, SQLSTMT_ID *, SQLDESC_ID *, SQLDESC_ID *, Lng32, Lng32, typedef __va_list_tag __va_list_tag *, SQLCLI_PTR_PAIRS *, SQLCLI_PTR_PAIRS *) (cliGlobals=0xb90fc0, tasks=4882, statement_id=0x2949a40, input_descriptor=0x293b850, output_descriptor=0x0, num_input_ptr_pairs=0, num_output_ptr_pairs=0, ap=0x7ffffffe6fb0, input_ptr_pairs=0x0, output_ptr_pairs=0x0) at ../cli/Cli.cpp:3279
#30 0x00007ffff5e80a27 in SQLCLI_Exec(CliGlobals *, SQLSTMT_ID *, SQLDESC_ID *, Lng32, typedef __va_list_tag __va_list_tag *, SQLCLI_PTR_PAIRS *) (cliGlobals=0xb90fc0, statement_id=0x2949a40, input_descriptor=0x293b850, num_ptr_pairs=0, ap=0x7ffffffe6fb0, ptr_pairs=0x0) at ../cli/Cli.cpp:3526
#31 0x00007ffff5f0db5e in SQL_EXEC_Exec (statement_id=0x2949a40, input_descriptor=0x293b850, num_ptr_pairs=0) at ../cli/CliExtern.cpp:2062
#32 0x00007ffff79b54bc in SqlCmd::doExec (sqlci_env=0xb8f7e0, stmt=0x2949a40, prep_stmt=0x2943020, numUnnamedParams=0, unnamedParamArray=0x0, unnamedParamCharSetArray=0x0, handleError=1) at ../sqlci/SqlCmd.cpp:1706
#33 0x00007ffff79b62b2 in SqlCmd::do_execute (sqlci_env=0xb8f7e0, prep_stmt=0x2943020, numUnnamedParams=0, unnamedParamArray=0x0, unnamedParamCharSetArray=0x0, prepcode=0) at ../sqlci/SqlCmd.cpp:2042
#34 0x00007ffff79b85b3 in DML::process (this=0x28053f0, sqlci_env=0xb8f7e0) at ../sqlci/SqlCmd.cpp:2816
#35 0x00007ffff79a2a36 in SqlciEnv::executeCommands (this=0xb8f7e0, input_stmt=@0x7ffffffe89e8) at ../sqlci/SqlciEnv.cpp:847
#36 0x00007ffff79a2177 in SqlciEnv::run (this=0xb8f7e0) at ../sqlci/SqlciEnv.cpp:656
#37 0x0000000000401fee in main (argc=1, argv=0x7ffffffe8ba8) at ../bin/SqlciMain.cpp:319

Note that in frame 0 we delete the connection to the server, while we are waiting on that same connection in stack frame 8. This is not allowed, we need to defer deleting the connection until we know nobody waits for it anymore.

Tags: sql-exe
Changed in trafodion:
milestone: none → r1.1
Changed in trafodion:
status: Confirmed → In Progress
Revision history for this message
Hans Zeller (hans-zeller) wrote :

Fix was delivered on March 18 as part of https://review.trafodion.org/1329

Changed in trafodion:
status: In Progress → Fix Committed
To post a comment you must log in.
This report contains Public information  
Everyone can see this information.

Other bug subscribers

Remote bug watches

Bug watches keep track of this bug in other bug trackers.