#include <sys/wait.h>
#include <sys/socket.h>
#include <sys/time.h>
+#include <limits.h>
#include <netinet/in.h>
#include <netdb.h>
#include <string.h>
#include "server.h"
#include "sysdep_decls.h"
#include "citserver.h"
-#include "hooks.h"
#include "support.h"
#include "config.h"
#include "database.h"
#include "housekeeping.h"
+#include "dynloader.h"
#ifdef NEED_SELECT_H
#include <sys/select.h>
int msock; /* master listening socket */
int verbosity = 3; /* Logging level */
+struct CitContext masterCC;
+
/*
* lprintf() ... Write logging information
}
/*
- * Set up a place to put thread-specific data.
+ * Set up a place to put thred-specific data.
* We only need a single pointer per thread - it points to the
* thread's CitContext structure in the ContextList linked list.
*/
int oldval;
lprintf(8, "begin_critical_section(%d)\n", which_one);
- if (CC != NULL) hook_crit_get(CC->cs_pid, which_one);
/* Don't get interrupted during the critical section */
pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldval);
/* Obtain a semaphore */
pthread_mutex_lock(&Critters[which_one]);
- if (CC != NULL) hook_crit_got(CC->cs_pid, which_one);
}
/*
int oldval;
lprintf(8, " end_critical_section(%d)\n", which_one);
- if (CC != NULL) hook_crit_end(CC->cs_pid, which_one);
/* Let go of the semaphore */
pthread_mutex_unlock(&Critters[which_one]);
* Return a pointer to a thread's own CitContext structure (new)
*/
struct CitContext *MyContext(void) {
- return (struct CitContext *) pthread_getspecific(MyConKey);
+ struct CitContext *retCC;
+ retCC = (struct CitContext *) pthread_getspecific(MyConKey);
+ if (retCC == NULL) retCC = &masterCC;
+ return(retCC);
}
char tracefile[128]; /* Name of file to log traces to */
int a, i; /* General-purpose variables */
char convbuf[128];
-
+ char modpath[128];
+
/* specify default port name and trace file */
strcpy(tracefile, "");
/* Initialize... */
init_sysdep();
openlog("citserver",LOG_PID,LOG_USER);
-
+ lprintf(1, "Initting modules...\n");
+ snprintf(modpath, 128, "%s/modules", BBSDIR);
+ DLoader_Init(modpath);
+ lprintf(1, "Modules done initializing...\n");
+/*
+ lprintf(1, "First symtab item:");
+ lprintf(1, my_symtab->fcn_name);
+ lprintf(1, "\n");
+*/
/* Load site-specific parameters */
lprintf(7, "Loading citadel.config\n");
get_config();
- hook_init();
-
- /* Databases must be opened *after* config is loaded, otherwise we might
- * end up working in the wrong directory.
- */
- lprintf(7, "Opening databases\n");
- open_databases();
- lprintf(7, "Checking floor reference counts\n");
- check_ref_counts();
+ /* Do non system dependent startup functions */
+ master_startup();
/*
* Bind the server to our favourite port.