*/
void cprintf(const char *format, ...) {
va_list arg_ptr;
- char buf[256];
+ char buf[SIZ];
va_start(arg_ptr, format);
if (vsnprintf(buf, sizeof buf, format, arg_ptr) == -1)
FILE *netsetup;
int ch;
int a, b;
- char netsetup_args[3][256];
+ char netsetup_args[3][SIZ];
if (CC->usersupp.axlevel < 6) {
cprintf("%d Higher access required.\n",
*/
int main(int argc, char **argv)
{
- pthread_t HousekeepingThread; /* Thread descriptor */
+ pthread_t WorkerThread; /* Thread descriptor */
pthread_attr_t attr; /* Thread attributes */
char tracefile[128]; /* Name of file to log traces to */
int a, i; /* General-purpose variables */
* Load any server-side modules (plugins) available here.
*/
lprintf(7, "Initializing loadable modules\n");
- cdb_begin_transaction();
if ((moddir = malloc(strlen(bbs_home_directory) + 9)) != NULL) {
sprintf(moddir, "%s/modules", bbs_home_directory);
DLoader_Init(moddir);
free(moddir);
}
- cdb_end_transaction();
/*
* The rescan pipe exists so that worker threads can be woken up and
}
}
-
-
- /*
- * Create the housekeeper thread
- */
- lprintf(7, "Starting housekeeper thread\n");
- pthread_attr_init(&attr);
- pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- if (pthread_create(&HousekeepingThread, &attr,
- (void* (*)(void*)) housekeeping_loop, NULL) != 0) {
- lprintf(1, "Can't create housekeeping thead: %s\n",
- strerror(errno));
- }
-
-
+ /* We want to check for idle sessions once per minute */
+ CtdlRegisterSessionHook(terminate_idle_sessions, EVT_TIMER);
+
/*
* Now create a bunch of worker threads.
*/
for (i=0; i<(config.c_min_workers-1); ++i) {
+ lprintf(9, "Creating worker thread %d\n", i);
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
- if (pthread_create(&HousekeepingThread, &attr,
+ if (pthread_create(&WorkerThread, &attr,
(void* (*)(void*)) worker_thread, NULL) != 0) {
lprintf(1, "Can't create worker thead: %s\n",
strerror(errno));
}
}
+
/* Now this thread can become a worker as well. */
+ lprintf(9, "Original thread entering worker loop\n");
worker_thread();
return(0);
/* We're bound to a session, now do *one* command */
if (bind_me != NULL) {
become_session(bind_me);
- cdb_begin_transaction();
CC->h_command_function();
- cdb_end_transaction();
become_session(NULL);
bind_me->state = CON_IDLE;
if (bind_me->kill_me == 1) {
dead_session_purge();
if ((time(NULL) - last_timer) > 60L) {
last_timer = time(NULL);
- cdb_begin_transaction();
PerformSessionHooks(EVT_TIMER);
- cdb_end_transaction();
}
+
+ check_sched_shutdown();
}
/* If control reaches this point, the server is shutting down */