manoj 99/05/26 00:12:32
Modified: pthreads/src/main http_main.c
Log:
Cleanup and dead code removal.
Revision Changes Path
1.88 +15 -73 apache-apr/pthreads/src/main/http_main.c
Index: http_main.c
===================================================================
RCS file: /home/cvs/apache-apr/pthreads/src/main/http_main.c,v
retrieving revision 1.87
retrieving revision 1.88
diff -u -u -r1.87 -r1.88
--- http_main.c 1999/05/26 07:09:18 1.87
+++ http_main.c 1999/05/26 07:12:30 1.88
@@ -98,20 +98,12 @@
#include <netinet/tcp.h>
#include <stdio.h>
-#ifdef USE_SHMGET_SCOREBOARD
-#include <sys/types.h>
-#include <sys/ipc.h>
-#include <sys/shm.h>
-#endif
-
#include "pthread.h"
/*#include initialization if any
#include threadabstractionlayer;
#include networkiolayer
#include lock */
-#include <setjmp.h>
-
/* This next function is never used. It is here to ensure that if we
* make all the modules into shared libraries that core httpd still
* includes the full Apache API. Without this function the objects in
@@ -218,33 +210,6 @@
int ap_pipe_of_death[2];
-/* thread local storage code that isn't used right now */
-
-#if 0
-/* stuff that needs thread local store in main */
-typedef struct {
- jmp_buf thread_exit;
- int generation;
-} tls_main_t;
-
-static pthread_key_t tls_main_key; /* ZZZZ */
-
-static tls_main_t *gettls(pthread_key_t tls_main_key)
-{
- tls_main_t *tls_p;
- tls_p = pthread_getspecific(tls_main_key);
- if (!tls_p) {
- tls_p = NULL;
- fprintf(stderr, "pthread_getspecific failed\n");
- }
-
- return tls_p;
-}
-#define tls() ((tls_main_t *) gettls(tls_main_key)) /* ZZZZZ */
-#endif
-
-
-
/* *Non*-shared http_main globals... */
static server_rec *server_conf;
@@ -961,24 +926,9 @@
*/
}
-/*****************************************************************
- * Connection structures and accounting...
- */
-
-/* XXX - alarms will need to be blockable at some point */
-
-static int alarms_blocked = 0;
-static int exit_after_unblock = 0;
static void just_die(int sig)
-{ /* SIGHUP to child process??? */
- /* if alarms are blocked we have to wait to die otherwise we might
- * end up with corruption in alloc.c's internal structures */
- if (alarms_blocked) {
- exit_after_unblock = 1;
- }
- else {
- clean_child_exit(0);
- }
+{
+ clean_child_exit(0);
}
/*****************************************************************
@@ -1926,9 +1876,12 @@
pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED);
for (i=0; i < ap_threads_per_child; i++) {
- my_info = NULL;
-
my_info = (proc_info *)malloc(sizeof(proc_info));
+ if (my_info == NULL) {
+ ap_log_error(APLOG_MARK, APLOG_ALERT, server_conf,
+ "malloc: out of memory");
+ clean_child_exit(APEXIT_CHILDFATAL);
+ }
my_info->pid = my_child_num;
my_info->tid = i;
my_info->sd = 0;
@@ -1940,13 +1893,11 @@
if (pthread_create(&thread, &thread_attr, worker_thread, my_info)) {
ap_log_error(APLOG_MARK, APLOG_ALERT, server_conf,
"pthread_create: unable to create worker thread");
- /*
- * We failed to create a thread. Update the scoreboard,
- * or it will say SERVER_STARTING forever.
- */
- (void) ap_update_child_status(my_child_num, i, SERVER_DEAD,
- (request_rec *) NULL);
- exit(1); /* We won't always exit here, but for no this is okay */
+ /* In case system resources are maxxed out, we don't want
+ Apache running away with the CPU trying to fork over and
+ over and over again if we exit. */
+ sleep(10);
+ clean_child_exit(APEXIT_CHILDFATAL);
}
/* We let each thread update it's own scoreboard entry. This is done
@@ -1969,8 +1920,8 @@
break;
default:
ap_log_error(APLOG_MARK, APLOG_ALERT, server_conf,
- "received strange signal: %d", signal_received);
-
+ "received impossible signal: %d", signal_received);
+ just_die(SIGTERM);
}
}
@@ -1991,8 +1942,6 @@
if (one_process) {
set_signals();
- /* Needed even in the one process case because lookup of the process
- * pid sometimes must go through the scoreboard */
ap_scoreboard_image->parent[slot].pid = getpid();
child_main(slot);
}
@@ -2000,12 +1949,6 @@
Explain1("Starting new child in slot %d",slot);
if ((pid = fork()) == -1) {
ap_log_error(APLOG_MARK, APLOG_ERR, s, "fork: Unable to fork new
process");
-
- /* fork didn't succeed. Fix the scoreboard or else
- * it will say SERVER_STARTING forever and ever
- */
- /* (void) ap_update_child_status(slot, SERVER_DEAD, (request_rec *)
NULL);
- We never put SERVER_STARTING in scoreboard */
/* In case system resources are maxxed out, we don't want
Apache running away with the CPU trying to fork over and
over and over again. */
@@ -2030,8 +1973,7 @@
RAISE_SIGSTOP(MAKE_CHILD);
MONCONTROL(1);
- /*
- signal(SIGWINCH, graceful_sig_handler);
+ /* XXX - For an unthreaded server, a signal handler will be necessary
signal(SIGTERM, just_die);
*/
child_main(slot);