#endif /* ISC_SOCKET_USE_POLLWATCH */
/*%
- * Size of per-FD lock buckets.
+ * Per-FD lock buckets, we shuffle them around a bit as FDs come in herds.
*/
-#define FDLOCK_COUNT 1024
-#define FDLOCK_ID(fd) ((fd) % FDLOCK_COUNT)
+#define FDLOCK_BITS 10
+#define FDLOCK_COUNT (1<<FDLOCK_BITS)
+#define FDLOCK_ID(fd) (((fd)%(FDLOCK_COUNT)>>(FDLOCK_BITS/2)) |\
+ (((fd)<<(FDLOCK_BITS/2))%(FDLOCK_COUNT)))
/*%
* Maximum number of events communicated with the kernel. There should normally
if (result != ISC_R_SUCCESS)
manager->open_max = 64;
manager->calls = 0;
- manager->events = isc_mem_get(thread->manager->mctx,
+ manager->events = isc_mem_get(thread->manager->mctx,
sizeof(struct pollfd) *
manager->nevents);
if (manager->events == NULL)
close(sock);
return;
} else if (setsockopt(sock, SOL_SOCKET, SO_REUSEADDR, (void *)&yes,
- sizeof(yes)) < 0) {
+ sizeof(yes)) < 0) {
close(sock);
return;
} else if (setsockopt(sock, SOL_SOCKET, SO_REUSEPORT, (void *)&yes,
- sizeof(yes)) < 0) {
+ sizeof(yes)) < 0) {
close(sock);
return;
}