Hallvard Breien Furuseth wrote:
On 15. mars 2017 12:15, openldap-commit2devel@OpenLDAP.org wrote:
commit e12ca8b6fed6b8a2526c5c8ee820bf5aa942b59d Author: Howard Chu hyc@openldap.org Date: Wed Mar 15 11:13:09 2017 +0000
Fixes for multiple threadpool queues Remove poolq_hash, it wasn't distributing work evenly to the queues.
Not surprising when it was hashing the address instead of contents of a local variable. Whatever that intended to achieve, it looks to me like rand_r() would have done the same but better.
It was hashing the bytes of arg. In the common case of the slapd_daemon_task submitting jobs to the pool, arg was the socket descriptor of an active connection, so this was always distributing those evenly. But in other cases where arg was a context pointer, the result was heavily skewed.
(Also the hash was pointlessly slow in that it walked a byte at a time, it could have hashed better with fewer operations.)
for a 4 or 8 byte arg this was hardly important.
I guess I should have looked closer at that code earlier:-)