/*
- * $Id$
- *
* WebCit "system dependent" code.
*
- * Copyright (c) 1996-2010 by the citadel.org team
+ * Copyright (c) 1996-2011 by the citadel.org team
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
http_new_modules(&Hdr);
do {
- /* Only one thread can accept at a time */
+ /* Each worker thread blocks on accept() while waiting for something to do. */
fail_this_transaction = 0;
ssock = -1;
errno = EAGAIN;
--num_threads_executing;
ssock = accept(msock, NULL, 0);
++num_threads_executing;
- lprintf(9, "Thread %u woke up, accept() returned %d %s\n",
- pthread_self(),
- ssock,
- ((ssock >= 0) ? "" : strerror(errno))
- );
+ if (ssock < 0) fail_this_transaction = 1;
} while ((msock > 0) && (ssock < 0) && (time_to_die == 0));
if ((msock == -1)||(time_to_die))
ShutDownWebcit();
- lprintf(2, "master shutdown exiting!.\n");
+ lprintf(2, "master shutdown exiting.\n");
exit(0);
}
break;
}
if (ssock < 0 ) continue;
+ check_thread_pool_size();
+
/* Now do something. */
if (msock < 0) {
if (ssock > 0) close (ssock);
} while (!time_to_die);
http_destroy_modules(&Hdr);
- lprintf (1, "bye\n");
+ lprintf (1, "Thread exiting.\n");
pthread_exit(NULL);
}
*/
pid_t current_child;
void graceful_shutdown_watcher(int signum) {
- lprintf (1, "bye; shutting down watcher.");
+ lprintf (1, "Watcher thread exiting.\n");
kill(current_child, signum);
if (signum != SIGHUP)
exit(0);
pthread_attr_t attr; /* Thread attributes */
int ret;
- lprintf(3, "Creating a new thread.\n");
-
++num_threads_existing;
++num_threads_executing;
#endif // HAVE_GETPWUID_R
if (pwp == NULL)
- lprintf(CTDL_CRIT, "WARNING: getpwuid(%ld): %s\n"
+ syslog(LOG_CRIT, "WARNING: getpwuid(%ld): %s\n"
"Group IDs will be incorrect.\n", UID,
strerror(errno));
else {
initgroups(pw.pw_name, pw.pw_gid);
if (setgid(pw.pw_gid))
- lprintf(CTDL_CRIT, "setgid(%ld): %s\n", (long)pw.pw_gid,
+ syslog(LOG_CRIT, "setgid(%ld): %s\n", (long)pw.pw_gid,
strerror(errno));
}
- lprintf(CTDL_INFO, "Changing uid to %ld\n", (long)UID);
+ syslog(LOG_INFO, "Changing uid to %ld\n", (long)UID);
if (setuid(UID) != 0) {
- lprintf(CTDL_CRIT, "setuid() failed: %s\n", strerror(errno));
+ syslog(LOG_CRIT, "setuid() failed: %s\n", strerror(errno));
}
#if defined (HAVE_SYS_PRCTL_H) && defined (PR_SET_DUMPABLE)
prctl(PR_SET_DUMPABLE, 1);