Alpha OSF, sendsig error
Posted in 1993
I have identical source but link them differently to obtain the test executables. The two executables are called client and the other is called client_bad. The code used instructs an Informix database to select data and update it. The client_bad program produces the following error message. sendsig: can't grow stack, pid 10836, proc client_bad Here are the link lines: cc -O0 -call_shared -g -o client client.o rm_def.o server.o \\ -L/axp1/pollak/infrmx \\ -L/axp1/pollak/pwd/lib -L/usr/informix/lib -L/usr/informix/lib/esql \\ -ltx -lcts -linfxxa /usr/shlib/libdce.so -ldnet -lm -lpthreads -lmach cc -O0 -call_shared -g -o client_bad client.o rm_def.o server.o \\ -L/axp1/pollak/infrmx \\ -L/axp1/pollak/pwd/lib -L/usr/informix/lib -L/usr/informix/lib/esql \\ -ltx -lcts -linfxxa /usr/shlib/libdce.so -ldnet -lm -lpthreads -lc_r -lmach The only difference between the two link lines is the addition of libc_ra.a in the client_bad link line. Source: client.c #include <sqlhdr.h> #include <sqlca.h> extern _SQCURSOR *_iqnprep(); #line 1 "client.ec #include "tx.h" #include "cma.h" main() { TXINFO *info_p; COMMIT_RETURN when_return_p; TRANSACTION_CONTROL control_p; TRANSACTION_TIMEOUT timeout_p; cma_t_attr stack_attr; long status; char rmname_p[16]; char open_string_p[256]; char close_string[256]; cma_attr_create (&stack_attr, &cma_c_null); cma_attr_set_stacksize (&stack_attr, 640560); printf ("In client routine\\n"); strcpy(rmname_p,"INFORMIX-ONLINE"); strcpy(open_string_p,"stores5:INFORMIXDIR=/usr/informix:TBCONFIG=tbconfig"); strcpy(close_string, ""); printf ("Setting tx_declare_rm_instance\\n"); status = tx_declare_rm_instance(rmname_p, open_string_p, close_string); if (status != TX_OK) return report_error(status); printf ("Calling tx_open\\n"); status = tx_open(); if (status != TX_OK) return report_error(status); printf ("calling tx_set_commit_return\\n"); when_return_p = TX_COMMIT_DECISION_LOGGED; status = tx_set_commit_return(when_return_p); if (status != TX_OK) return report_error(status); printf ("Calling tx_set_transaction_control\\n"); control_p = TX_UNCHAINED; status = tx_set_transaction_control(control_p); if (status != TX_OK) return report_error(status); printf ("Calling tx_begin\\n"); status = tx_begin(); if (status != TX_OK) return report_error(status); printf ("Calling update_items service routine\\n"); status = update_items(); if (status != 0) { printf ("Error calling service routine update_items()=%d\\n",status); return -1; } printf ("Calling tx_commit\\n"); status = tx_commit(); if (status != TX_OK) return report_error(status); printf ("Calling tx_close\\n"); status = tx_close(); if (status != TX_OK) return report_error(status); } report_error(status) int status; { switch (status) { case TX_NOT_SUPPORTED: { printf ("Returned TX_NOT_SUPPORTED\\n"); break; } case TX_OUTSIDE: { printf ("Returned TX_OUTSIDE\\n"); break; } case TX_ROLLBACK: { printf ("Returned TX_ROLLBACK\\n"); break; } case TX_MIXED: { printf ("Returned TX_MIXED\\n"); break; } case TX_HAZARD: { printf ("Returned TX_HAZARD\\n"); break; } case TX_PROTOCOL_ERROR: { printf ("Returned TX_PROTOCOL_ERROR\\n"); break; } case TX_ERROR: { printf ("Returned TX_ERROR\\n"); break; } case TX_FAIL: { printf ("Returned TX_FAIL\\n"); break; } case TX_EINVAL: { printf ("Returned TX_EINVAL\\n"); break; } case TX_TIMEOUT: { printf ("Returned TX_TIMEOUT\\n"); break; } case TX_COMMITTED: { printf ("Returned TX_COMMITTED\\n"); break; } case TX_NO_BEGIN: { printf ("Returned TX_NO_BEGIN\\n"); break; } case TX_ROLLBACK_NO_BEGIN: { printf ("Returned TX_ROLLBACK_NO_BEGIN\\n"); break; } case TX_MIXED_NO_BEGIN: { printf ("Returned TX_MIXED_NO_BEGIN\\n"); break; } case TX_HAZARD_NO_BEGIN: { printf ("Returned TX_HAZARD_NO_BEGIN\\n"); break; } case TX_COMMITTED_NO_BEGIN: { printf ("Returned TX_COMMITTED_NO_BEGIN\\n"); break; } default: { printf ("Error not found\\n"); break; } } } server.c #include <sqlhdr.h> #include <sqlca.h> extern _SQCURSOR *_iqnprep(); static char *_Cn1 = "sel_cur"; static _SQCURSOR *_SQ1 = 0; #line 1 "server.ec" #include <stdio.h>; /* * EXEC SQL INCLUDE sqltypes.h; */ #line 3 "server.ec" #line 1 "/usr/informix/incl/esql/sqltypes.h" #ifndef CCHARTYPE #define CCHARTYPE 100 #define CSHORTTYPE 101 #define CINTTYPE 102 #define CLONGTYPE 103 #define CFLOATTYPE 104 #define CDOUBLETYPE 105 #define CDECIMALTYPE 107 #define CFIXCHARTYPE 108 #define CSTRINGTYPE 109 #define CDATETYPE 110 #define CMONEYTYPE 111 #define CDTIMETYPE 112 #define CLOCATORTYPE 113 #define CVCHARTYPE 114 #define CINVTYPE 115 #define CFILETYPE 116 #define USERCOLL(x) ((x)) #define SQLCHAR 0 #define SQLSMINT 1 #define SQLINT 2 #define SQLFLOAT 3 #define SQLSMFLOAT 4 #define SQLDECIMAL 5 #define SQLSERIAL 6 #define SQLDATE 7 #define SQLMONEY 8 #define SQLNULL 9 #define SQLDTIME 10 #define SQLBYTES 11 #define SQLTEXT 12 #define SQLVCHAR 13 #define SQLINTERVAL 14 #define SQLTYPE 0xF #define SQLNONULL 0x100 #define SQLMAXTYPES 15 #define SQLHOST 01000 #define SQLNETFLT 02000 #define SIZCHAR 1 #define SIZSMINT 2 #define SIZINT 4 #define SIZFLOAT (sizeof(double)) #define SIZSMFLOAT (sizeof(float)) #define SIZDECIMAL 17 #define SIZSERIAL 4 #define SIZDATE 4 #define SIZMONEY 17 #define SIZDTIME 7 #define SIZVCHAR 1 #define MASKNONULL(t) ((t) & ~(SQLNONULL|SQLHOST|SQLNETFLT)) #define ISSQLTYPE(t) (MASKNONULL(t) >= SQLCHAR && MASKNONULL(t) < SQLMAXTYPES) #define ISDECTYPE(t) (MASKNONULL(t) == SQLDECIMAL || \\ MASKNONULL(t) == SQLMONEY || \\ MASKNONULL(t) == SQLDTIME || \\ MASKNONULL(t) == SQLINTERVAL) #define ISBLOBTYPE(type) (ISBYTESTYPE (type) || ISTEXTTYPE(type)) #define ISBYTESTYPE(type) (MASKNONULL(type) == SQLBYTES) #define ISTEXTTYPE(type) (MASKNONULL(type) == SQLTEXT) #define ISVCTYPE(t) (MASKNONULL(t) == SQLVCHAR) #define ISBLOBCTYPE(type) (ISLOCTYPE(type) || ISFILETYPE(type)) #define ISLOCTYPE(type) (MASKNONULL(type) == CLOCATORTYPE) #define IS