diff --git a/src/frontend/sock.c b/src/frontend/sock.c
index 24708db5ca2bb0e6e5dcc61e5c384fe1a03148ff..3b9799496df8bf1e70d501393e36b91de0ebd86e 100644 (file)
--- a/src/frontend/sock.c
+++ b/src/frontend/sock.c
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
+#if HAVE_CONFIG_H
+# include "config.h"
+#endif /* HAVE_CONFIG_H */
+
#include "sysdb.h"
#include "core/object.h"
#include "frontend/connection-private.h"
}
listener = realloc(sock->listeners,
- sock->listeners_num * sizeof(*sock->listeners));
+ (sock->listeners_num + 1) * sizeof(*sock->listeners));
if (! listener) {
char buf[1024];
sdb_log(SDB_LOG_ERR, "frontend: Failed to allocate memory: %s",
int max_listen_fd = 0;
size_t i;
- /* XXX: make the number of threads configurable */
- pthread_t handler_threads[5];
+ pthread_t handler_threads[loop->num_threads];
size_t num_threads;
- if ((! sock) || (! sock->listeners_num) || (! loop) || sock->chan)
+ if ((! sock) || (! sock->listeners_num) || sock->chan
+ || (! loop) || (loop->num_threads <= 0))
return -1;
if (! loop->do_loop)
return -1;
}
- num_threads = SDB_STATIC_ARRAY_LEN(handler_threads);
+ sdb_log(SDB_LOG_INFO, "frontend: Starting %d connection "
+ "handler thread%s managing %d listener%s",
+ loop->num_threads, loop->num_threads == 1 ? "" : "s",
+ sock->listeners_num, sock->listeners_num == 1 ? "" : "s");
+
+ num_threads = loop->num_threads;
memset(&handler_threads, 0, sizeof(handler_threads));
for (i = 0; i < num_threads; ++i) {
errno = 0;
}
}
- while (loop->do_loop) {
+ while (loop->do_loop && num_threads) {
struct timeval timeout = { 1, 0 }; /* one second */
sdb_llist_iter_t *iter;
sdb_channel_destroy(sock->chan);
sock->chan = NULL;
+
+ if (! num_threads)
+ return -1;
return 0;
} /* sdb_fe_sock_listen_and_server */