Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nginx/nginx.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2003-11-05 20:03:41 +0300
committerIgor Sysoev <igor@sysoev.ru>2003-11-05 20:03:41 +0300
commite8732b06b94ea5f8a25fa3e71cece7d93f5ac0b8 (patch)
tree2164e718d78644f6593c228b7b7f2e73d0032ddf /src/http/ngx_http_busy_lock.c
parent9cc1acef18220cfc3b66d0a761f1f7c39e0b5c29 (diff)
nginx-0.0.1-2003-11-05-20:03:41 import
Diffstat (limited to 'src/http/ngx_http_busy_lock.c')
-rw-r--r--src/http/ngx_http_busy_lock.c59
1 files changed, 57 insertions, 2 deletions
diff --git a/src/http/ngx_http_busy_lock.c b/src/http/ngx_http_busy_lock.c
index 8ebedfb16..9431a3876 100644
--- a/src/http/ngx_http_busy_lock.c
+++ b/src/http/ngx_http_busy_lock.c
@@ -4,6 +4,61 @@
#include <ngx_http.h>
+int ngx_http_busy_lock(ngx_http_busy_lock_t *bl, u_char *md5)
+{
+ int i, b, busy, free;
+ u_int mask;
+
+ b = 0;
+ busy = 0;
+ free = -1;
+
+#if (NGX_SUPPRESS_WARN)
+ mask = 0;
+#endif
+
+ for (i = 0; i < bl->max_conn; i++) {
+
+ if ((b & 7) == 0) {
+ mask = bl->busy_mask[i / 8];
+ }
+
+ if (mask & 1) {
+ if (ngx_memcmp(&bl->busy[i * 16], md5, 16) == 0) {
+ return NGX_AGAIN;
+ }
+ busy++;
+
+ } else if (free == -1) {
+ free = i;
+ }
+
+ if (busy == bl->busy_n) {
+ if (busy < bl->max_conn) {
+ free = i + 1;
+ }
+
+ break;
+ }
+
+ mask >>= 1;
+ b++;
+ }
+
+ if (free == -1) {
+ return NGX_ERROR;
+ }
+
+ ngx_memcpy(&bl->busy[free * 16], md5, 16);
+ bl->busy_mask[free / 8] |= free % 8;
+
+ bl->busy_n++;
+ bl->conn_n++;
+
+ return NGX_OK;
+}
+
+
char *ngx_http_set_busy_lock_slot(ngx_conf_t *cf, ngx_command_t *cmd,
void *conf)
{
@@ -26,7 +81,7 @@ char *ngx_http_set_busy_lock_slot(ngx_conf_t *cf, ngx_command_t *cmd,
value = (ngx_str_t *) cf->args->elts;
- for (i = 1; i < 3; i++) {
+ for (i = 1; i < 4; i++) {
if (value[i].len > 2 && ngx_strncasecmp(value[i].data, "c:", 2) == 0) {
if (bl->max_conn) {
@@ -68,7 +123,7 @@ char *ngx_http_set_busy_lock_slot(ngx_conf_t *cf, ngx_command_t *cmd,
return NGX_CONF_ERROR;
}
- bl->timeout = ngx_parse_time(&value[1], 0);
+ bl->timeout = ngx_parse_time(&value[1], 1);
if (bl->timeout == NGX_ERROR) {
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
"invalid timeout \"%s\"", value[i].data);