Segmentation fault on EXEC SQL FREE :cursor_id;
Posted in 1995
Anyone seen anything like this? This is on IBM rs6000 AIX 3.2.5 with Online 7.1 (the CLOSE works fine - the ifx_status routine is from the book but is printed below the dbx WHERE output). Right after that the FREE dies. 1934 if (strcmp(dbv->inf_cursor_id, "") != 0) (gdb) n 1936 EXEC SQL close :cursor_id; (gdb) s 1937 ret = ifx_status(dbc); (gdb) n 1938 if (ret < 0) (gdb) print ret $4 = 0 (gdb) n 1946 if (return_status != FATAL_DATABASE_ERROR) (gdb) n 1948 if (strcmp(dbv->inf_stmt_id, "") != 0) (gdb) n 1950 EXEC SQL free :stmt_id ; (gdb) s Program received signal SIGSEGV, Segmentation fault. 0xd01777c4 in splay () (gdb) where #0 0xd01777c4 in splay () #1 0xd0175c04 in free_y () #2 0x1017de3c in _sqfrcmdtxt () #3 0x1017fb74 in _sqremove_cursor () #4 0x1017f590 in _iqfree (=0x2ff6a2e0) #5 0x101384a4 in ifx_deallocate_structures (dbc=0x2ff6a2e0, dbv=0x2ff6ec68) at ./dbinform.ec:1950 #6 0x101374e4 in informix_cancel_fetch (dbc=0x2ff6a2e0, dbv=0x2ff6ec68, dbi=0x2ff6ec58, dbo=0x2ff76a7c) at ./dbinform.ec:1291 #7 0x10003df4 in sql_cancel_fetch (dbc=0x2ff6a2e0, dbv=0x2ff6ec68, dbi=0x2ff6ec58, dbo=0x2ff76a7c) at dbil.c:1237 #8 0x10003e94 in sql_release (dbc=0x2ff6a2e0, dbv=0x2ff6ec68, dbi=0x2ff6ec58, dbo=0x2ff76a7c) at dbil.c:1292 #9 0x10003a18 in sql_cancel (dbc=0x2ff6a2e0, dbv=0x2ff6ec68, dbi=0x2ff6ec58, dbo=0x2ff76a7c) at dbil.c:1077 #10 0x100017e8 in main () at driver.c:427 #11 0x1000042c in __start () (gdb) === int ifx_status (dbvisual_connect_descriptor *dbc) { char lmsg[133]; int n, p; char msg[512]; int sql_return = SQL_RTERROR; if(SQLSTATE[0] == '0') /* trap '00', '01', '02' */ { switch(SQLSTATE[1]) { case '0': /* success - return 0 */ sql_return = SQL_SUCCESS; break; case '1': /* warning - return 1 */ sql_return = SQL_WARNING; ifx_sqlstate_err (dbc); break; case '2': /* end of data - return 100 */ sql_return = SQL_NODATA; break; default: /* error - return SQLCODE */ ifx_sqlstate_err (dbc); break; } } dbc->sql_return = SQLCODE; strcpy(dbc->sql_state_return, SQLSTATE); return (sql_return); } /* end */