+
+
+ /* Raise or lower the size of the worker thread pool if such
+ * an action is appropriate.
+ */
+
+ if ( (num_sessions > num_threads)
+ && (num_threads < config.c_max_workers) ) {
+
+ pthread_attr_init(&attr);
+ pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
+ if (pthread_create(&newthread, &attr,
+ (void* (*)(void*)) worker_thread, NULL) != 0) {
+ lprintf(1, "Can't create worker thead: %s\n",
+ strerror(errno));
+ }
+
+ }
+
+ else if ( (num_sessions < num_threads)
+ && (num_threads > config.c_min_workers) ) {
+ --num_threads;
+ pthread_exit(NULL);
+ }
+