annotate src/core/ngx_murmurhash.c @ 634:23ef0645ea57 NGINX_1_1_1

nginx 1.1.1 *) Change: now cache loader processes either as many files as specified by "loader_files" parameter or works no more than time specified by "loader_threshold" parameter during each iteration. *) Change: now SIGWINCH signal works only in deamon mode. *) Feature: now shared zones and caches use POSIX semaphores on Solaris. Thanks to Den Ivanov. *) Feature: accept filters are now supported on NetBSD. *) Bugfix: nginx could not be build on Linux 3.0. *) Bugfix: nginx did not use gzipping in some cases; the bug had appeared in 1.1.0. *) Bugfix: request body might be incorrectly processed if client used pipelining. *) Bugfix: in the "request_body_in_single_buf" directive. *) Bugfix: in "proxy_set_body" and "proxy_pass_request_body" directives if SSL connection to backend was used. *) Bugfix: nginx hogged CPU if all servers in an upstream were marked as "down". *) Bugfix: a segmentation fault might occur during reconfiguration if ssl_session_cache was defined but not used in a previous configuration. *) Bugfix: a segmentation fault might occur in a worker process if many backup servers were used in an upstream. *) Bugfix: a segmentation fault might occur in a worker process if "fastcgi/scgi/uwsgi_param" directives were used with values starting with "HTTP_"; the bug had appeared in 0.8.40.
author Igor Sysoev <http://sysoev.ru>
date Mon, 22 Aug 2011 00:00:00 +0400
parents 8dc007eddbcf
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
622
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2 /*
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Austin Appleby
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
4 */
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
5
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
6
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
11 uint32_t
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
12 ngx_murmur_hash2(u_char *data, size_t len)
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
13 {
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
14 uint32_t h, k;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
15
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
16 h = 0 ^ len;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
17
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
18 while (len >= 4) {
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
19 k = data[0];
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
20 k |= data[1] << 8;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
21 k |= data[2] << 16;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
22 k |= data[3] << 24;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
23
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
24 k *= 0x5bd1e995;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
25 k ^= k >> 24;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
26 k *= 0x5bd1e995;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
27
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
28 h *= 0x5bd1e995;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
29 h ^= k;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
30
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
31 data += 4;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
32 len -= 4;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
33 }
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
34
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
35 switch (len) {
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
36 case 3:
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
37 h ^= data[2] << 16;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
38 case 2:
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
39 h ^= data[1] << 8;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
40 case 1:
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
41 h ^= data[0];
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
42 h *= 0x5bd1e995;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
43 }
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
44
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
45 h ^= h >> 13;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
46 h *= 0x5bd1e995;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
47 h ^= h >> 15;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
48
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
49 return h;
8dc007eddbcf nginx 1.0.1
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
50 }