#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/socket.h>
-#include <sys/time.h>
+
+#if TIME_WITH_SYS_TIME
+# include <sys/time.h>
+# include <time.h>
+#else
+# if HAVE_SYS_TIME_H
+# include <sys/time.h>
+# else
+# include <time.h>
+# endif
+#endif
+
#include <limits.h>
#include <netinet/in.h>
#include <netdb.h>
fd_set masterfds; /* Master sockets etc. */
int masterhighest;
-time_t last_timer = 0L; /* Last timer hook processing */
-
static pthread_t initial_thread; /* tid for main() thread */
void begin_critical_section(int which_one)
{
/* lprintf(9, "begin_critical_section(%d)\n", which_one); */
+ /* ensure nobody ever tries to do a critical section within a
+ transaction; this could lead to deadlock. */
+ cdb_check_handles();
pthread_mutex_lock(&Critters[which_one]);
}
int retval;
int sock;
- /*
- * Yes, this is where we want this signal() call to be. Evidently the
- * DB library is screwing with this binding and we don't want the
- * server to crash, so we force this to be correct.
- */
- signal(SIGPIPE, SIG_IGN);
if (CC->redirect_fp != NULL) {
fwrite(buf, nbytes, 1, CC->redirect_fp);
/* Tell 'em who's in da house */
lprintf(1,
"\nMultithreaded message server for Citadel/UX\n"
-"Copyright (C) 1987-2000 by the Citadel/UX development team.\n"
+"Copyright (C) 1987-2001 by the Citadel/UX development team.\n"
"Citadel/UX is free software, covered by the GNU General Public License, and\n"
"you are welcome to change it and/or distribute copies of it under certain\n"
"conditions. There is absolutely no warranty for this software. Please\n"
/* make doubly sure we're not holding any stale db handles
* which might cause a deadlock.
*/
- cdb_release_handles();
+ cdb_check_handles();
begin_critical_section(S_I_WANNA_SELECT);
SETUP_FD: memcpy(&readfds, &masterfds, sizeof masterfds);
}
dead_session_purge();
- if ((time(NULL) - last_timer) > 60L) {
- last_timer = time(NULL);
- cdb_release_handles(); /* suggested by Justin Case */
- PerformSessionHooks(EVT_TIMER);
- }
-
+ do_housekeeping();
check_sched_shutdown();
}