diff --git a/src/frontend/sock.c b/src/frontend/sock.c
index 9b650dd35c241354e32d96a962708864c37c5a27..8e2bc59dbf53d771d3eb6da298e97b8d5a46ab2f 100644 (file)
--- a/src/frontend/sock.c
+++ b/src/frontend/sock.c
} /* sdb_fe_sock_add_listener */
int
-sdb_fe_sock_listen_and_serve(sdb_fe_socket_t *sock)
+sdb_fe_sock_listen_and_serve(sdb_fe_socket_t *sock, sdb_fe_loop_t *loop)
{
sdb_channel_t *chan;
fd_set sockets;
/* XXX: make the number of threads configurable */
pthread_t handler_threads[5];
- if ((! sock) || (! sock->listeners_num))
+ if ((! sock) || (! sock->listeners_num) || (! loop))
return -1;
FD_ZERO(&sockets);
pthread_create(&handler_threads[i], /* attr = */ NULL,
connection_handler, /* arg = */ chan);
- while (42) {
+ while (loop->do_loop) {
fd_set ready = sockets;
int n;
}
}
}
+
+ for (i = 0; i < SDB_STATIC_ARRAY_LEN(handler_threads); ++i)
+ pthread_cancel(handler_threads[i]);
+ for (i = 0; i < SDB_STATIC_ARRAY_LEN(handler_threads); ++i)
+ pthread_join(handler_threads[i], NULL);
return 0;
} /* sdb_fe_sock_listen_and_server */