static void sigPIPEi(int sig) { if( getpid() == forker_pid ) { putsLog("##SIGPIPE-P in fork()"); } else { putsLog("##SIGPIPE-C in fork()"); } }
void LongJmp(FL_PAR,jmp_buf env,int val){ if( inSignalHandler ){ putsLog("##non-SIG longjmp in signal handling"); } if( ismainthread() ){ }else{ putsLog("##non-SIG longjmp in non-main-thread"); thread_exit(0); } }
void SigLongJmp(FL_PAR,sigjmp_buf env,int val){ /* fprintf(stderr,"-- %X siglongjmp(%X,%d) <= %s:%d %d/%d\n",TID, env,val,FL_BAR,actthreads(),numthreads()); */ if( inSignalHandler ){ putsLog("##SIGlongjmp in signal handling"); } if( ismainthread() ){ }else{ putsLog("##SIGlongjmp in non-main-thread"); thread_exit(0); } return; }
static void sigTERMx(int sig) { putsLog("##SIGTERM-C in fork()"); _exit(0); }
/* int IsAlive(int sock){ */ int IsAlive_FL(FL_PAR,int sock){ int serrno,rdy1,rdy2; int r1,d1,r2,d2; if( IsConnected(sock,NULL) ){ if( isWindowsCE() ){ int exceptionReady(int sock); int rdy1,rdy2,rev2; if( rdy1 = exceptionReady(sock) ){ rdy2 = inputReady(sock,&rev2); /* syslog_DEBUG("## IsNotAlive[%d] %d,%d/%d <= %s:%d\n", sock,rdy1,rdy2,rev2,FL_BAR); */ return 0; } return 1; /* no MSG_PEEK on WinCE */ } if( !lSISALIVE() ){ SSigMask sMask; setSSigMask(sMask); /* rdy1 = PollIn(sock,1); 9.9.8 for faster IsAlive() */ rdy1 = PollIn(sock,TIMEOUT_IMM); serrno = errno; resetSSigMask(sMask); if( rdy1 < 0 ){ /* 9.9.4 MTSS interrupted by a signal ? */ putsLog("IsAlive PollIn failed"); rdy2 = PollIn(sock,1); syslog_ERROR("IsAlive[%d] rdy=%d,%d err=%d <= %s:%d\n", sock,rdy1,rdy2,serrno,FL_BAR); rdy1 = rdy2; } /* if( PollIn(sock,1) == 0 || 0 < Peek1(sock) ) */ if( rdy1 == 0 || 0 < rdy1 && Peek1(sock) ) return 1; else syslog_ERROR("## left connected but dead [%d] <= %s:%d\n", sock,FL_BAR); /* else syslog_ERROR("## left connected but dead [%d]\n",sock); */ }else{ errno = 0; rdy1 = PollIn(sock,1); serrno = errno; if( rdy1 == 0 ){ return 2; } msleep(1); r1 = inputReady(sock,&d1); rdy2 = PollIn(sock,1); r2 = inputReady(sock,&d2); if( rdy2 == 0 ){ porting_dbg("## IsAlive(%d) %d => %d (%d/%d %d/%d) e%d a%d <= %s:%d", sock,rdy1,rdy2,r1,d1,r2,d2,serrno, actthreads(),FL_BAR); return 3; } if( 0 < Peek1(sock) ){ return 4; } syslog_ERROR("## left connected but dead [%d]\n",sock); } } return 0; }