diff options
author | Rainer Gerhards <rgerhards@adiscon.com> | 2007-12-20 14:34:40 +0000 |
---|---|---|
committer | Rainer Gerhards <rgerhards@adiscon.com> | 2007-12-20 14:34:40 +0000 |
commit | 8a77bc82acfb5960e8c4054094f7eb80a158ec1f (patch) | |
tree | a447af04d7419c2049442d089ed3c6565d687bb1 | |
parent | a5ac2e420e6f58f2cad5123ea674b0da5c016aea (diff) | |
download | rsyslog-8a77bc82acfb5960e8c4054094f7eb80a158ec1f.tar.gz rsyslog-8a77bc82acfb5960e8c4054094f7eb80a158ec1f.tar.xz rsyslog-8a77bc82acfb5960e8c4054094f7eb80a158ec1f.zip |
removed single-threading support for sending TCP messages; caused
simplyfication of output module interface as well as core syslog
processing.
-rw-r--r-- | module-template.h | 47 | ||||
-rw-r--r-- | modules.c | 2 | ||||
-rw-r--r-- | modules.h | 2 | ||||
-rw-r--r-- | omdiscard.c | 10 | ||||
-rw-r--r-- | omfile.c | 10 | ||||
-rw-r--r-- | omfwd.c | 155 | ||||
-rw-r--r-- | omshell.c | 10 | ||||
-rw-r--r-- | omusrmsg.c | 10 | ||||
-rw-r--r-- | plugins/ommysql/ommysql.c | 10 | ||||
-rw-r--r-- | plugins/ompgsql/ompgsql.c | 10 | ||||
-rw-r--r-- | syslogd.c | 183 |
11 files changed, 8 insertions, 441 deletions
diff --git a/module-template.h b/module-template.h index 9d7deaf4..3b6ebb69 100644 --- a/module-template.h +++ b/module-template.h @@ -199,49 +199,6 @@ static rsRetVal needUDPSocket(void *pModData)\ } -/* onSelectReadyWrite() - * Extra comments: - * This is called when select() returned with a writable file descriptor - * for this module. The fd was most probably obtained by getWriteFDForSelect() - * before. - */ -#define BEGINonSelectReadyWrite \ -static rsRetVal onSelectReadyWrite(void *pModData)\ -{\ - rsRetVal iRet = RS_RET_NONE;\ - instanceData *pData = NULL; - -#define CODESTARTonSelectReadyWrite \ - pData = (instanceData*) pModData; - -#define ENDonSelectReadyWrite \ - return iRet;\ -} - - -/* getWriteFDForSelect() - * Extra comments: - * Gets writefd for select call. Must only be returned when the selector must - * be written to. If the module has no such fds, it must return RS_RET_NONE. - * In this case, the default implementation is sufficient. - * This interface will probably go away over time, but we need it now to - * continue modularization. - */ -#define BEGINgetWriteFDForSelect \ -static rsRetVal getWriteFDForSelect(void *pModData, short __attribute__((unused)) *fd)\ -{\ - rsRetVal iRet = RS_RET_NONE;\ - instanceData *pData = NULL; - -#define CODESTARTgetWriteFDForSelect \ - assert(fd != NULL);\ - pData = (instanceData*) pModData; - -#define ENDgetWriteFDForSelect \ - return iRet;\ -} - - /* parseSelectorAct() * Extra comments: * try to process a selector action line. Checks if the action @@ -363,10 +320,6 @@ static rsRetVal queryEtryPt(uchar *name, rsRetVal (**pEtryPoint)())\ *pEtryPoint = parseSelectorAct;\ } else if(!strcmp((char*) name, "isCompatibleWithFeature")) {\ *pEtryPoint = isCompatibleWithFeature;\ - } else if(!strcmp((char*) name, "getWriteFDForSelect")) {\ - *pEtryPoint = getWriteFDForSelect;\ - } else if(!strcmp((char*) name, "onSelectReadyWrite")) {\ - *pEtryPoint = onSelectReadyWrite;\ } else if(!strcmp((char*) name, "needUDPSocket")) {\ *pEtryPoint = needUDPSocket;\ } else if(!strcmp((char*) name, "tryResume")) {\ @@ -266,8 +266,6 @@ rsRetVal doModInit(rsRetVal (*modInit)(int, int*, rsRetVal(**)(), rsRetVal(*)()) CHKiRet((*pNew->modQueryEtryPt)((uchar*)"doAction", &pNew->mod.om.doAction)); CHKiRet((*pNew->modQueryEtryPt)((uchar*)"parseSelectorAct", &pNew->mod.om.parseSelectorAct)); CHKiRet((*pNew->modQueryEtryPt)((uchar*)"isCompatibleWithFeature", &pNew->isCompatibleWithFeature)); - CHKiRet((*pNew->modQueryEtryPt)((uchar*)"getWriteFDForSelect", &pNew->getWriteFDForSelect)); - CHKiRet((*pNew->modQueryEtryPt)((uchar*)"onSelectReadyWrite", &pNew->onSelectReadyWrite)); CHKiRet((*pNew->modQueryEtryPt)((uchar*)"needUDPSocket", &pNew->needUDPSocket)); CHKiRet((*pNew->modQueryEtryPt)((uchar*)"tryResume", &pNew->tryResume)); break; @@ -59,8 +59,6 @@ typedef struct moduleInfo { rsRetVal (*modQueryEtryPt)(uchar *name, rsRetVal (**EtryPoint)()); /* query entry point addresses */ rsRetVal (*isCompatibleWithFeature)(syslogFeature); rsRetVal (*freeInstance)(void*);/* called before termination or module unload */ - rsRetVal (*getWriteFDForSelect)(void*,short *);/* called before termination or module unload */ - rsRetVal (*onSelectReadyWrite)(void*);/* called when fd is writeable after select() */ rsRetVal (*needUDPSocket)(void*);/* called when fd is writeable after select() */ rsRetVal (*dbgPrintInstInfo)(void*);/* called before termination or module unload */ rsRetVal (*tryResume)(void*);/* called to see if module actin can be resumed now */ diff --git a/omdiscard.c b/omdiscard.c index bfdcdb14..26d5f3da 100644 --- a/omdiscard.c +++ b/omdiscard.c @@ -104,16 +104,6 @@ CODESTARTneedUDPSocket ENDneedUDPSocket -BEGINonSelectReadyWrite -CODESTARTonSelectReadyWrite -ENDonSelectReadyWrite - - -BEGINgetWriteFDForSelect -CODESTARTgetWriteFDForSelect -ENDgetWriteFDForSelect - - BEGINmodExit CODESTARTmodExit ENDmodExit @@ -611,21 +611,11 @@ CODESTARTfreeInstance ENDfreeInstance -BEGINonSelectReadyWrite -CODESTARTonSelectReadyWrite -ENDonSelectReadyWrite - - BEGINneedUDPSocket CODESTARTneedUDPSocket ENDneedUDPSocket -BEGINgetWriteFDForSelect -CODESTARTgetWriteFDForSelect -ENDgetWriteFDForSelect - - BEGINtryResume CODESTARTtryResume ENDtryResume @@ -47,11 +47,7 @@ #ifdef USE_NETZIP #include <zlib.h> #endif -#ifdef USE_PTHREADS #include <pthread.h> -#else -#include <fcntl.h> -#endif #ifdef USE_GSSAPI #include <gssapi.h> #endif @@ -109,17 +105,8 @@ typedef struct _instanceData { # define FORW_UDP 0 # define FORW_TCP 1 /* following fields for TCP-based delivery */ - enum TCPSendStatus { - TCP_SEND_NOTCONNECTED = 0, - TCP_SEND_CONNECTING = 1, - TCP_SEND_READY = 2 - } status; - char *savedMsg; - int savedMsgLen; /* length of savedMsg in octets */ time_t ttSuspend; /* time selector was suspended */ -# ifdef USE_PTHREADS pthread_mutex_t mtxTCPSend; -# endif # ifdef USE_GSSAPI gss_ctx_id_t gss_context; OM_uint32 gss_flags; @@ -160,12 +147,10 @@ CODESTARTfreeInstance free(pData->port); break; } -# ifdef USE_PTHREADS /* delete any mutex objects, if present */ if(pData->protocol == FORW_TCP) { pthread_mutex_destroy(&pData->mtxTCPSend); } -# endif # ifdef USE_GSSAPI if (gss_mode != GSSMODE_NONE) { OM_uint32 maj_stat, min_stat; @@ -194,50 +179,6 @@ ENDdbgPrintInstInfo /* CODE FOR SENDING TCP MESSAGES */ -/* get send status - * rgerhards, 2005-10-24 - */ -static void TCPSendSetStatus(instanceData *pData, enum TCPSendStatus iNewState) -{ - assert(pData != NULL); - assert(pData->protocol == FORW_TCP); - assert( (iNewState == TCP_SEND_NOTCONNECTED) - || (iNewState == TCP_SEND_CONNECTING) - || (iNewState == TCP_SEND_READY)); - - /* there can potentially be a race condition, so guard by mutex */ -# ifdef USE_PTHREADS - pthread_mutex_lock(&pData->mtxTCPSend); -# endif - pData->status = iNewState; -# ifdef USE_PTHREADS - pthread_mutex_unlock(&pData->mtxTCPSend); -# endif -} - - -/* set send status - * rgerhards, 2005-10-24 - */ -static enum TCPSendStatus TCPSendGetStatus(instanceData *pData) -{ - enum TCPSendStatus eState; - assert(pData != NULL); - assert(pData->protocol == FORW_TCP); - - /* there can potentially be a race condition, so guard by mutex */ -# ifdef USE_PTHREADS - pthread_mutex_lock(&pData->mtxTCPSend); -# endif - eState = pData->status; -# ifdef USE_PTHREADS - pthread_mutex_unlock(&pData->mtxTCPSend); -# endif - - return eState; -} - - /* Initialize TCP sockets (for sender) * This is done once per selector line, if not yet initialized. */ @@ -262,17 +203,12 @@ static int TCPSendCreateSocket(instanceData *pData, struct addrinfo *addrDest) * the receivers and the selector line processing are only loosely * coupled via a memory buffer. Now, I think, we can afford the extra * wait time. Thus, we enable blocking mode for TCP if we compile with - * pthreads. - * rgerhards, 2005-10-25 + * pthreads. -- rgerhards, 2005-10-25 + * And now, we always run on multiple threads... -- rgerhards, 2007-12-20 */ -# ifndef USE_PTHREADS - /* set to nonblocking - rgerhards 2005-07-20 */ - fcntl(fd, F_SETFL, fcntl(fd, F_GETFL) | O_NONBLOCK); -# endif if (connect (fd, r->ai_addr, r->ai_addrlen) != 0) { if(errno == EINPROGRESS) { - /* this is normal - will complete during select */ - TCPSendSetStatus(pData, TCP_SEND_CONNECTING); + /* this is normal - will complete later select */ return fd; } else { char errStr[1024]; @@ -282,7 +218,6 @@ static int TCPSendCreateSocket(instanceData *pData, struct addrinfo *addrDest) } else { - TCPSendSetStatus(pData, TCP_SEND_READY); return fd; } close(fd); @@ -437,7 +372,6 @@ static int TCPSendGSSSend(instanceData *pData, char *msg, size_t len) fail: close(s); pData->sock = -1; - TCPSendSetStatus(pData, TCP_SEND_NOTCONNECTED); gss_delete_sec_context(&min_stat, context, GSS_C_NO_BUFFER); *context = GSS_C_NO_CONTEXT; gss_release_buffer(&min_stat, &out_buf); @@ -461,7 +395,7 @@ static int TCPSendGSSSend(instanceData *pData, char *msg, size_t len) * rgerhards 2005-07-06 * This function is now expected to stay. Libloging won't be used for * that purpose. I have added the param "len", because it is known by the - * caller and so safes us some time. Also, it MUST be given because there + * caller and so saves us some time. Also, it MUST be given because there * may be NULs inside msg so that we can not rely on strlen(). Please note * that the restrictions outlined above do not existin in multi-threaded * mode, which we assume will now be most often used. So there is no @@ -487,7 +421,6 @@ static int TCPSend(instanceData *pData, char *msg, size_t len) int bIsCompressed; int lenSend; char *buf = NULL; /* if this is non-NULL, it MUST be freed before return! */ - enum TCPSendStatus eState; TCPFRAMINGMODE framingToUse; assert(pData != NULL); @@ -514,41 +447,12 @@ static int TCPSend(instanceData *pData, char *msg, size_t len) return -1; } - eState = TCPSendGetStatus(pData); /* cache info */ - - if(eState == TCP_SEND_CONNECTING) { - /* In this case, we save the buffer. If we have a - * system with few messages, that hopefully prevents - * message loss at all. However, we make no further attempts, - * just the first message is saved. So we only try this - * if there is not yet a saved message present. - * rgerhards 2005-07-20 - */ - if(pData->savedMsg == NULL) { - pData->savedMsg = malloc(len * sizeof(char)); - if(pData->savedMsg == NULL) - return 0; /* nothing we can do... */ - memcpy(pData->savedMsg, msg, len); - pData->savedMsgLen = len; - } - return 0; - } else if(eState != TCP_SEND_READY) - /* This here is debatable. For the time being, we - * accept the loss of a single message (e.g. during - * connection setup in favour of not messing with - * wait time and timeouts. The reason is that such - * things might otherwise cost us considerable message - * loss on the receiving side (even at a timeout set - * to just 1 second). - rgerhards 2005-07-20 - */ - return 0; - /* now check if we need to add a line terminator. We need to * copy the string in memory in this case, this is probably * quicker than using writev and definitely quicker than doing * two socket calls. * rgerhards 2005-07-22 - *//* + * * Some messages already contain a \n character at the end * of the message. We append one only if we there is not * already one. This seems the best fit, though this also @@ -678,9 +582,7 @@ static int TCPSend(instanceData *pData, char *msg, size_t len) * rgerhards, 2005-10-25 */ dbgprintf("message not completely (tcp)send, ignoring %d\n", lenSend); -# if USE_PTHREADS usleep(1000); /* experimental - might be benefitial in this situation */ -# endif if(buf != NULL) free(buf); return 0; @@ -694,20 +596,6 @@ static int TCPSend(instanceData *pData, char *msg, size_t len) free(buf); return 0; break; - case EINPROGRESS: - case EAGAIN: - dbgprintf("message not (tcp)send, would block\n"); -# if USE_PTHREADS - usleep(1000); /* experimental - might be benefitial in this situation */ -# endif - /* we loose this message, but that's better than loosing - * all ;) - */ - /* This is not a real error, so it is not flagged as one */ - if(buf != NULL) - free(buf); - return 0; - break; default: dbgprintf("message not (tcp)send"); break; @@ -717,7 +605,6 @@ static int TCPSend(instanceData *pData, char *msg, size_t len) ++retry; /* try to recover */ close(pData->sock); - TCPSendSetStatus(pData, TCP_SEND_NOTCONNECTED); pData->sock = -1; } else { if(buf != NULL) @@ -947,9 +834,7 @@ CODE_STD_STRING_REQUESTparseSelectorAct(1) pData->protocol = FORW_TCP; ++p; /* eat this '@', too */ /* in this case, we also need a mutex... */ -# ifdef USE_PTHREADS pthread_mutex_init(&pData->mtxTCPSend, 0); -# endif } else { pData->protocol = FORW_UDP; } @@ -1104,36 +989,6 @@ CODESTARTneedUDPSocket ENDneedUDPSocket -BEGINonSelectReadyWrite -CODESTARTonSelectReadyWrite - dbgprintf("tcp send socket %d ready for writing.\n", pData->sock); - TCPSendSetStatus(pData, TCP_SEND_READY); - /* Send stored message (if any) */ - if(pData->savedMsg != NULL) { - if(TCPSend(pData, pData->savedMsg, - pData->savedMsgLen) != 0) { - /* error! */ - pData->eDestState = eDestFORW_SUSP; - errno = 0; - logerror("error forwarding via tcp, suspending..."); - } - free(pData->savedMsg); - pData->savedMsg = NULL; - } -ENDonSelectReadyWrite - - -BEGINgetWriteFDForSelect -CODESTARTgetWriteFDForSelect - if( (pData->eDestState == eDestFORW) - && (pData->protocol == FORW_TCP) - && TCPSendGetStatus(pData) == TCP_SEND_CONNECTING) { - *fd = pData->sock; - iRet = RS_RET_OK; - } -ENDgetWriteFDForSelect - - BEGINmodExit CODESTARTmodExit ENDmodExit @@ -127,16 +127,6 @@ CODESTARTneedUDPSocket ENDneedUDPSocket -BEGINonSelectReadyWrite -CODESTARTonSelectReadyWrite -ENDonSelectReadyWrite - - -BEGINgetWriteFDForSelect -CODESTARTgetWriteFDForSelect -ENDgetWriteFDForSelect - - BEGINmodExit CODESTARTmodExit ENDmodExit @@ -325,16 +325,6 @@ CODE_STD_FINALIZERparseSelectorAct ENDparseSelectorAct -BEGINonSelectReadyWrite -CODESTARTonSelectReadyWrite -ENDonSelectReadyWrite - - -BEGINgetWriteFDForSelect -CODESTARTgetWriteFDForSelect -ENDgetWriteFDForSelect - - BEGINmodExit CODESTARTmodExit ENDmodExit diff --git a/plugins/ommysql/ommysql.c b/plugins/ommysql/ommysql.c index d67d92eb..107419a5 100644 --- a/plugins/ommysql/ommysql.c +++ b/plugins/ommysql/ommysql.c @@ -104,16 +104,6 @@ CODESTARTdbgPrintInstInfo ENDdbgPrintInstInfo -BEGINonSelectReadyWrite -CODESTARTonSelectReadyWrite -ENDonSelectReadyWrite - - -BEGINgetWriteFDForSelect -CODESTARTgetWriteFDForSelect -ENDgetWriteFDForSelect - - /* log a database error with descriptive message. * We check if we have a valid MySQL handle. If not, we simply * report an error, but can not be specific. RGerhards, 2007-01-30 diff --git a/plugins/ompgsql/ompgsql.c b/plugins/ompgsql/ompgsql.c index 45e3c674..1a0fba29 100644 --- a/plugins/ompgsql/ompgsql.c +++ b/plugins/ompgsql/ompgsql.c @@ -101,16 +101,6 @@ CODESTARTdbgPrintInstInfo ENDdbgPrintInstInfo -BEGINonSelectReadyWrite -CODESTARTonSelectReadyWrite -ENDonSelectReadyWrite - - -BEGINgetWriteFDForSelect -CODESTARTgetWriteFDForSelect -ENDgetWriteFDForSelect - - /* log a database error with descriptive message. * We check if we have a valid handle. If not, we simply * report an error, but can not be specific. RGerhards, 2007-01-30 @@ -5448,81 +5448,17 @@ static void processImInternal(void) } -/* helper function for mainloop(). This is used to add all module - * writeFDsfor Select via llExecFunc(). - * rgerhards, 2007-08-02 - */ -typedef struct selectHelperWriteFDSInfo_s { /* struct for pParam */ - fd_set *pWritefds; - int *pMaxfds; -} selectHelperWriteFDSInfo_t; -DEFFUNC_llExecFunc(mainloopAddModWriteFDSforSelect) -{ - DEFiRet; - action_t *pAction = (action_t*) pData; - selectHelperWriteFDSInfo_t *pState = (selectHelperWriteFDSInfo_t*) pParam; - short fdMod; - - assert(pAction != NULL); - assert(pState != NULL); - - if(pAction->pMod->getWriteFDForSelect(pAction->pModData, &fdMod) == RS_RET_OK) { - FD_SET(fdMod, pState->pWritefds); - if(fdMod > *pState->pMaxfds) - *pState->pMaxfds = fdMod; - } - - return iRet; -} - - -/* helper function for mainloop(). This is used to call module action - * handlers after select if a fd is writable. - * HINT: when we change to the new threading model, this function - * is probably no longer needed. - * rgerhards, 2007-08-02 - */ -DEFFUNC_llExecFunc(mainloopCallWithWritableFDsActions) -{ - DEFiRet; - action_t *pAction = (action_t*) pData; - selectHelperWriteFDSInfo_t *pState = (selectHelperWriteFDSInfo_t*) pParam; - short fdMod; - - assert(pAction != NULL); - assert(pState != NULL); - - if(pAction->pMod->getWriteFDForSelect(pAction->pModData, &fdMod) == RS_RET_OK) { - if(FD_ISSET(fdMod, pState->pWritefds)) { - if((iRet = pAction->pMod->onSelectReadyWrite(pAction->pModData)) - != RS_RET_OK) { - dbgprintf("error %d from onSelectReadyWrite() - continuing\n", iRet); - } - if(--(pState->pMaxfds) == 0) { - ABORT_FINALIZE(RS_RET_FINISHED); /* all processed, nothing left to do */ - } - } - } - -finalize_it: - return iRet; -} - - /* process the select() selector array after the successful select. * processing is completed as soon as all selectors needing attention * are processed. * rgerhards, 2007-08-08 */ -static rsRetVal processSelectAfter(int maxfds, int nfds, fd_set *pReadfds, fd_set *pWritefds) +static rsRetVal processSelectAfter(int maxfds, int nfds, fd_set *pReadfds) { DEFiRet; - rsRetVal iRetLL; int i; char line[MAXLINE +1]; - selectHelperWriteFDSInfo_t writeFDSInfo; #ifdef SYSLOG_INET - selector_t *f; struct sockaddr_storage frominet; socklen_t socklen; uchar fromHost[NI_MAXHOST]; @@ -5552,31 +5488,6 @@ static rsRetVal processSelectAfter(int maxfds, int nfds, fd_set *pReadfds, fd_se } #ifdef SYSLOG_INET - /* Now check the TCP send sockets. So far, we only see if they become - * writable and then change their internal status. No real async - * writing is currently done. This code will be replaced once liblogging - * is used, thus we try not to focus too much on it. - * - * IMPORTANT: With the current code, the writefds must be checked first, - * because the readfds might have messages to be forwarded, which - * rely on the status setting that is done here! - * rgerhards 2005-07-20 - * - * liblogging implementation will not happen as anticipated above. So - * this code here will stay for quite a while. - * rgerhards, 2006-12-07 - */ - writeFDSInfo.pWritefds = pWritefds; - writeFDSInfo.pMaxfds = &nfds; - for(f = Files; f != NULL ; f = f->f_next) { - iRetLL = llExecFunc(&f->llActList, mainloopCallWithWritableFDsActions, &writeFDSInfo); - if(iRetLL == RS_RET_FINISHED) { - ABORT_FINALIZE(RS_RET_OK); /* we are done in this case */ - } - } -#endif /* #ifdef SYSLOG_INET */ - -#ifdef SYSLOG_INET if (finet != NULL && AcceptRemote) { for (i = 0; i < *finet; i++) { if (FD_ISSET(finet[i+1], pReadfds)) { @@ -5711,14 +5622,8 @@ static void mainloop(void) int maxfds; int nfds; #ifdef SYSLOG_INET - selectHelperWriteFDSInfo_t writeFDSInfo; - fd_set writefds; - selector_t *f; int iTCPSess; #endif /* #ifdef SYSLOG_INET */ -#ifdef BSD - struct timeval tvSelectTimeout; -#endif while(!bFinished){ errno = 0; @@ -5770,23 +5675,6 @@ static void mainloop(void) } } - /* TODO: activate the code below only if we actually need to check - * for outstanding writefds. - */ - if(1) { - /* Now add the TCP output sockets to the writefds set. This implementation - * is not optimal (performance-wise) and it should be replaced with something - * better in the longer term. I've not yet done this, as this code is - * scheduled to be replaced after the liblogging integration. - * rgerhards 2005-07-20 - */ - FD_ZERO(&writefds); - writeFDSInfo.pWritefds = &writefds; - writeFDSInfo.pMaxfds = &maxfds; - for (f = Files; f != NULL ; f = f->f_next) { - llExecFunc(&f->llActList, mainloopAddModWriteFDSforSelect, &writeFDSInfo); - } - } #endif if ( debugging_on ) { @@ -5798,37 +5686,7 @@ static void mainloop(void) dbgprintf("\n"); } -#define MAIN_SELECT_TIMEVAL NULL -#ifdef BSD - /* There seems to be a problem with BSD and threads. When running on - * multiple threads, a signal will not cause the select call to be - * interrrupted. I am not sure if this is by design or an bug (some - * information on the web let's me think it is a bug), but that really - * does not matter. The issue with our code is that we will not gain - * control when rsyslogd is terminated or huped. What I am doing now is - * make the select call timeout after 10 seconds, so that we can check - * the condition then. Obviously, this causes some sluggish behaviour and - * also the loss of some (very few) cpu cycles. Both, I think, are - * absolutely acceptable. - * rgerhards, 2005-10-26 - * TODO: I got some information: this seems to be expected signal() behaviour - * we should investigate the use of sigaction() (see klogd.c for an sample). - * rgerhards, 2007-06-22 - * rgerhards, 2007-09-11: code has been converted to sigaction() now. We need - * to re-check on BSD, I think the issue is now solved. - */ - tvSelectTimeout.tv_sec = 10; - tvSelectTimeout.tv_usec = 0; -# undef MAIN_SELECT_TIMEVAL -# define MAIN_SELECT_TIMEVAL &tvSelectTimeout -#endif -#ifdef SYSLOG_INET -#define MAIN_SELECT_WRITEFDS (fd_set *) &writefds -#else -#define MAIN_SELECT_WRITEFDS NULL -#endif - nfds = select(maxfds+1, (fd_set *) &readfds, MAIN_SELECT_WRITEFDS, - (fd_set *) NULL, MAIN_SELECT_TIMEVAL); + nfds = select(maxfds+1, (fd_set *) &readfds, NULL, NULL, NULL); if(bRequestDoMark) { domark(); @@ -5849,10 +5707,7 @@ static void mainloop(void) continue; } - processSelectAfter(maxfds, nfds, &readfds, MAIN_SELECT_WRITEFDS); - -#undef MAIN_SELECT_TIMEVAL -#undef MAIN_SELECT_WRITEFDS + processSelectAfter(maxfds, nfds, &readfds); } } @@ -6074,10 +5929,6 @@ int main(int argc, char **argv) extern int optind; extern char *optarg; struct sigaction sigAct; -#if 0 /* see comment for #if 0 below (towards end of function) */ - pthread_t thrdMain; - sigset_t sigSet; -#endif #ifdef MTRACE mtrace(); /* this is a debug aid for leak detection - either remove @@ -6334,36 +6185,8 @@ int main(int argc, char **argv) sigaction(SIGXFSZ, &sigAct, NULL); /* do not abort if 2gig file limit is hit */ (void) alarm(TIMERINTVL); -#if 0 - i = pthread_create(&thrdMain, NULL, immark_runInput, NULL); - dbgprintf("\"main\" thread started with state %d.\n", i); -#endif - mainThread(); -#if 0 - /* This commented-out code was once used to spawn a separate thread - * for the mainThread(). This was initially done to solve a problem that not - * really existed. Thus the code is now commented out. I do not remove it yet, - * because there may be use for it in the not too distant future. If it is - * still commented out in a year's time, that's a good indication it should - * be removed! -- rgerhards, 2007-10-17 - */ - i = pthread_create(&thrdMain, NULL, mainThread, NULL); - dbgprintf("\"main\" thread started with state %d.\n", i); - - /* we block all signals - they will be processed by the "main"-thread. This most - * closely resembles previous behaviour. TODO: think about optimizing it, some - * signals may better be delivered here. rgerhards, 2007-10-08 - */ - sigfillset(&sigSet); - pthread_sigmask(SIG_BLOCK, &sigSet, NULL); - - /* see comment in mainThread on why we start thread and then immediately - * do a blocking wait on it - it makese sense... ;) rgerhards, 2007-10-08 - */ -#endif - /* do any de-init's that need to be done AFTER this comment */ dbgprintf("reaching die\n"); |