X-Git-Url: https://code.citadel.org/?a=blobdiff_plain;f=citadel%2Fsysdep.c;h=ec320eeef2a873043a0734394424febf74a14214;hb=c750a06a241dc2737fa68c24b340a1bd82894f74;hp=cbed531f43498ee2d63a8b416632882a57671d80;hpb=4e6233ae0eefb338a0049e29e13d6b7997b9792e;p=citadel.git diff --git a/citadel/sysdep.c b/citadel/sysdep.c index cbed531f4..ec320eeef 100644 --- a/citadel/sysdep.c +++ b/citadel/sysdep.c @@ -41,6 +41,7 @@ #include "modules/crypto/serv_crypto.h" /* Needed for init_ssl, client_write_ssl, client_read_ssl, destruct_ssl */ #include "housekeeping.h" #include "context.h" + /* * Signal handler to shut down the server. */ @@ -50,18 +51,19 @@ volatile int shutdown_and_halt = 0; volatile int restart_server = 0; volatile int running_as_daemon = 0; + static RETSIGTYPE signal_cleanup(int signum) { syslog(LOG_DEBUG, "sysdep: caught signal %d; shutting down.", signum); exit_signal = signum; server_shutting_down = 1; } + static RETSIGTYPE signal_exit(int signum) { exit(1); } - /* * Some initialization stuff... */ @@ -327,7 +329,6 @@ static void flush_client_inbuf(void) FlushStrBuf(CCC->ReadBuf); CCC->RecvBuf->ReadWritePointer = NULL; - } */ @@ -375,7 +376,6 @@ int client_write(const char *buf, int nbytes) fd = fopen(fn, "a+"); if (fd == NULL) { syslog(LOG_ERR, "%s: %m", fn); - cit_backtrace(); exit(1); } fprintf(fd, "Sending: BufSize: %d BufContent: [", nbytes); @@ -418,7 +418,6 @@ int client_write(const char *buf, int nbytes) } } else { syslog(LOG_ERR, "sysdep: client_write(%d bytes) select failed: %m", nbytes - bytes_written); - cit_backtrace(); client_close(); Ctx->kill_me = KILLME_SELECT_FAILED; return -1; @@ -429,7 +428,6 @@ int client_write(const char *buf, int nbytes) retval = write(Ctx->client_socket, &buf[bytes_written], nbytes - bytes_written); if (retval < 1) { syslog(LOG_ERR, "sysdep: client_write(%d bytes) failed: %m", nbytes - bytes_written); - cit_backtrace(); client_close(); Ctx->kill_me = KILLME_WRITE_FAILED; return -1; @@ -491,7 +489,6 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout) fd = fopen(fn, "a+"); if (fd == NULL) { syslog(LOG_ERR, "%s: %m", fn); - cit_backtrace(); exit(1); } fprintf(fd, "Reading BLOB: BufSize: %d ", bytes); @@ -511,7 +508,6 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout) fd = fopen(fn, "a+"); if (fd == NULL) { syslog(LOG_ERR, "%s: %m", fn); - cit_backtrace(); exit(1); } fprintf(fd, "Read: %d BufContent: [", StrLength(Target)); @@ -533,7 +529,6 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout) fd = fopen(fn, "a+"); if (fd == NULL) { syslog(LOG_ERR, "%s: %m", fn); - cit_backtrace(); exit(1); } fprintf(fd, "Reading BLOB: BufSize: %d ", @@ -562,7 +557,6 @@ int client_read_blob(StrBuf *Target, int bytes, int timeout) fd = fopen(fn, "a+"); if (fd == NULL) { syslog(LOG_ERR, "%s: %m", fn); - cit_backtrace(); exit(1); } fprintf(fd, "Read: %d BufContent: [", @@ -621,7 +615,6 @@ int client_read_random_blob(StrBuf *Target, int timeout) fd = fopen(fn, "a+"); if (fd == NULL) { syslog(LOG_ERR, "%s: %m", fn); - cit_backtrace(); exit(1); } fprintf(fd, "Read: BufSize: %d BufContent: [", @@ -706,7 +699,6 @@ int CtdlClientGetLine(StrBuf *Target) fd = fopen(fn, "a+"); if (fd == NULL) { syslog(LOG_ERR, "%s: %m", fn); - cit_backtrace(); exit(1); } pch = ChrPtr(CCC->RecvBuf.Buf); @@ -764,7 +756,6 @@ int CtdlClientGetLine(StrBuf *Target) fd = fopen(fn, "a+"); if (fd == NULL) { syslog(LOG_ERR, "%s: %m", fn); - cit_backtrace(); exit(1); } pch = ChrPtr(CCC->RecvBuf.Buf); @@ -940,9 +931,6 @@ void sysdep_master_cleanup(void) { CtdlDestroyServiceHook(); CtdlDestroyRoomHooks(); CtdlDestroySearchHooks(); - #ifdef HAVE_BACKTRACE -/// eCrash_Uninit(); - #endif } @@ -1098,8 +1086,6 @@ void HuntBadSession(void) struct timeval tv; struct ServiceFunctionHook *serviceptr; - - /* Next, add all of the client sockets. */ begin_critical_section(S_SESSION_TABLE); for (ptr = ContextList; ptr != NULL; ptr = ptr->next) { @@ -1115,13 +1101,12 @@ void HuntBadSession(void) if ( (ptr->state == CON_IDLE) && (ptr->kill_me == 0) && (ptr->client_socket > 0) - ) { + ) { FD_SET(ptr->client_socket, &readfds); if (ptr->client_socket > highest) highest = ptr->client_socket; - if ((select(highest + 1, &readfds, NULL, NULL, &tv) < 0) && - (errno == EBADF)) + if ((select(highest + 1, &readfds, NULL, NULL, &tv) < 0) && (errno == EBADF)) { /* Gotcha! */ syslog(LOG_ERR, @@ -1130,18 +1115,16 @@ void HuntBadSession(void) ptr->client_socket, ptr->is_local_socket, ptr->curr_user, - ptr->cs_host,ptr->cs_addr); - + ptr->cs_host,ptr->cs_addr + ); ptr->kill_me = 1; ptr->client_socket = -1; break; } } - } end_critical_section(S_SESSION_TABLE); - /* First, add the various master sockets to the fdset. */ for (serviceptr = ServiceHookTable; serviceptr != NULL; serviceptr = serviceptr->next ) { @@ -1163,11 +1146,9 @@ void HuntBadSession(void) break; } } - - } -const char *WorkerLogStr = "W"; + /* * This loop just keeps going and going and going... */ @@ -1190,9 +1171,7 @@ void *worker_thread(void *blah) { while (!server_shutting_down) { - /* make doubly sure we're not holding any stale db handles - * which might cause a deadlock. - */ + /* make doubly sure we're not holding any stale db handles * which might cause a deadlock */ cdb_check_handles(); do_select: force_purge = 0; bind_me = NULL; /* Which session shall we handle? */ @@ -1284,7 +1263,7 @@ do_select: force_purge = 0; } } - /* Next, check to see if it's a new client connecting * on a master socket. */ + /* Next, check to see if it's a new client connecting on a master socket. */ else if ((retval > 0) && (!server_shutting_down)) for (serviceptr = ServiceHookTable; serviceptr != NULL; serviceptr = serviceptr->next) { @@ -1386,14 +1365,12 @@ SKIP_SELECT: CC->input_waiting = 0; } - /* If there are asynchronous messages waiting and the - * client supports it, do those now */ - if ((CC->is_async) && (CC->async_waiting) - && (CC->h_async_function != NULL)) { + /* If there are asynchronous messages waiting and the client supports it, do those now */ + if ((CC->is_async) && (CC->async_waiting) && (CC->h_async_function != NULL)) { CC->h_async_function(); CC->async_waiting = 0; } - + force_purge = CC->kill_me; become_session(NULL); bind_me->state = CON_IDLE; @@ -1422,7 +1399,6 @@ SKIP_SELECT: } - /* * SyslogFacility() * Translate text facility name to syslog.h defined value.