annotate src/http/ngx_http_busy_lock.c @ 174:ea464a6c0581

nginx-0.0.1-2003-11-05-01:12:39 import
author Igor Sysoev <igor@sysoev.ru>
date Tue, 04 Nov 2003 22:12:39 +0000
parents
children e92c2c647c57
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
174
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 #include <ngx_config.h>
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 #include <ngx_core.h>
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 #include <ngx_http.h>
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7 char *ngx_http_set_busy_lock_slot(ngx_conf_t *cf, ngx_command_t *cmd,
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 void *conf)
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 char *p = conf;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 int i;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 ngx_str_t *value;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14 ngx_http_busy_lock_t *bl, **blp;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 blp = (ngx_http_busy_lock_t **) (p + cmd->offset);
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 if (*blp) {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 return "is duplicate";
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 }
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21 /* ngx_calloc_shared() */
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22 if (!(bl = ngx_pcalloc(cf->pool, sizeof(ngx_http_busy_lock_t)))) {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 return NGX_CONF_ERROR;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 }
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 *blp = bl;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 value = (ngx_str_t *) cf->args->elts;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 for (i = 1; i < 3; i++) {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 if (value[i].len > 2 && ngx_strncasecmp(value[i].data, "c:", 2) == 0) {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32 if (bl->max_conn) {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 "duplicate \"%s\"", value[i].data);
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35 return NGX_CONF_ERROR;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 }
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 bl->max_conn = ngx_atoi(value[i].data + 2, value[i].len - 2);
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 if (bl->max_conn == NGX_ERROR) {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41 "invalid value \"%s\"", value[i].data);
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 return NGX_CONF_ERROR;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 }
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45 continue;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 }
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 if (value[i].len > 2 && ngx_strncasecmp(value[i].data, "w:", 2) == 0) {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 if (bl->max_waiting) {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 "duplicate \"%s\"", value[i].data);
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 return NGX_CONF_ERROR;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53 }
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 bl->max_waiting = ngx_atoi(value[i].data + 2, value[i].len - 2);
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 if (bl->max_waiting == NGX_ERROR) {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 "invalid value \"%s\"", value[i].data);
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59 return NGX_CONF_ERROR;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 }
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 continue;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 }
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 if (bl->timeout) {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67 "duplicate timeout \"%s\"", value[i].data);
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68 return NGX_CONF_ERROR;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 }
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 bl->timeout = ngx_parse_time(&value[1], 0);
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72 if (bl->timeout == NGX_ERROR) {
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74 "invalid timeout \"%s\"", value[i].data);
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75 return NGX_CONF_ERROR;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76 }
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77 }
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79 return NGX_CONF_OK;
ea464a6c0581 nginx-0.0.1-2003-11-05-01:12:39 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 }