comparison src/core/ngx_murmurhash.c @ 622:8dc007eddbcf NGINX_1_0_1

nginx 1.0.1 *) Change: now the "split_clients" directive uses MurmurHash2 algorithm because of better distribution. Thanks to Oleg Mamontov. *) Change: now long strings starting with zero are not considered as false values. Thanks to Maxim Dounin. *) Change: now nginx uses a default listen backlog value 511 on Linux. *) Feature: the $upstream_... variables may be used in the SSI and perl modules. *) Bugfix: now nginx limits better disk cache size. Thanks to Oleg Mamontov. *) Bugfix: a segmentation fault might occur while parsing incorrect IPv4 address; the bug had appeared in 0.9.3. Thanks to Maxim Dounin. *) Bugfix: nginx could not be built by gcc 4.6 without --with-debug option. *) Bugfix: nginx could not be built on Solaris 9 and earlier; the bug had appeared in 0.9.3. Thanks to Dagobert Michelsen. *) Bugfix: $request_time variable had invalid values if subrequests were used; the bug had appeared in 0.8.47. Thanks to Igor A. Valcov.
author Igor Sysoev <http://sysoev.ru>
date Tue, 03 May 2011 00:00:00 +0400
parents
children
comparison
equal deleted inserted replaced
621:00d13b6d4ebd 622:8dc007eddbcf
1
2 /*
3 * Copyright (C) Austin Appleby
4 */
5
6
7 #include <ngx_config.h>
8 #include <ngx_core.h>
9
10
11 uint32_t
12 ngx_murmur_hash2(u_char *data, size_t len)
13 {
14 uint32_t h, k;
15
16 h = 0 ^ len;
17
18 while (len >= 4) {
19 k = data[0];
20 k |= data[1] << 8;
21 k |= data[2] << 16;
22 k |= data[3] << 24;
23
24 k *= 0x5bd1e995;
25 k ^= k >> 24;
26 k *= 0x5bd1e995;
27
28 h *= 0x5bd1e995;
29 h ^= k;
30
31 data += 4;
32 len -= 4;
33 }
34
35 switch (len) {
36 case 3:
37 h ^= data[2] << 16;
38 case 2:
39 h ^= data[1] << 8;
40 case 1:
41 h ^= data[0];
42 h *= 0x5bd1e995;
43 }
44
45 h ^= h >> 13;
46 h *= 0x5bd1e995;
47 h ^= h >> 15;
48
49 return h;
50 }