<title lang="en">nginx changelog</title>
+<changes ver="0.3.30" date="22.02.2006">
+
+<change type="change">
+<para lang="ru">
+ÕÒÏ×ÅÎØ ÚÁÐÉÓÉ × ÌÏÇ ÏÛÉÂËÉ ECONNABORTED ÉÚÍÅΣΠÎÁ error Ó ÕÒÏ×ÎÑ crit.
+</para>
+<para lang="en">
+the ECONNABORTED error log level was changed to "error" from "crit".
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+ÍÏÄÕÌØ ngx_http_perl_module ÎÅ ÓÏÂÉÒÁÌÓÑ ÂÅÚ ÍÏÄÕÌÑ ngx_http_ssi_filter_module.
+</para>
+<para lang="en">
+the ngx_http_perl_module could not be build without
+the ngx_http_ssi_filter_module.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+nginx ÎÅ ÓÏÂÉÒÁÌÓÑ ÎÁ i386 ÐÌÁÔÆÏÒÍÅ, ÅÓÌÉ ÉÓÐÏÌØÚÏ×ÁÌÓÑ PIC.
+</para>
+<para lang="en">
+nginx could not be built on i386 platform, if the PIC was used.
+</para>
+</change>
+
+</changes>
+
+
<changes ver="0.3.29" date="20.02.2006">
<change type="feature">
#define _NGINX_H_INCLUDED_
-#define NGINX_VER "nginx/0.3.29"
+#define NGINX_VER "nginx/0.3.30"
#define NGINX_VAR "NGINX"
#define NGX_OLDPID_EXT ".oldbin"
static ngx_inline void ngx_cpuid(uint32_t i, uint32_t *buf);
+#if ( __i386__ )
+
+static ngx_inline void
+ngx_cpuid(uint32_t i, uint32_t *buf)
+{
+
+ /*
+ * we could not use %ebx as output parameter if gcc builds PIC,
+ * and we could not save %ebx on stack, because %esp is used,
+ * when the -fomit-frame-pointer optimization is specified.
+ */
+
+ __asm__ (
+
+ " mov %%ebx, %%esi; "
+
+ " cpuid; "
+ " mov %%eax, %0; "
+ " mov %%ebx, %1; "
+ " mov %%edx, %2; "
+ " mov %%ecx, %3; "
+
+ " mov %%esi, %%ebx; "
+
+ : "=m" (buf[0]), "=m" (buf[1]), "=m" (buf[2]), "=m" (buf[3])
+ : "a" (i)
+ : "ecx", "edx", "esi" );
+}
+
+
+#else /* __amd64__ */
+
+
static ngx_inline void
ngx_cpuid(uint32_t i, uint32_t *buf)
{
}
+#endif
+
+
/* auto detect the L2 cache line size of modern and widespread CPUs */
void
return;
}
- ngx_log_error((err == NGX_ECONNABORTED) ? NGX_LOG_CRIT:
+ ngx_log_error((err == NGX_ECONNABORTED) ? NGX_LOG_ERR:
NGX_LOG_ALERT,
ev->log, err, "accept() failed");
static ngx_int_t
ngx_http_perl_output(ngx_http_request_t *r, ngx_buf_t *b)
{
- ngx_chain_t *cl, out;
+ ngx_chain_t out;
+#if (NGX_HTTP_SSI)
+ ngx_chain_t *cl;
ngx_http_perl_ctx_t *ctx;
ctx = ngx_http_get_module_ctx(r, ngx_http_perl_module);
return NGX_OK;
}
+#endif
out.buf = b;
out.next = NULL;
} ngx_http_perl_variable_t;
+#if (NGX_HTTP_SSI)
static ngx_int_t ngx_http_perl_ssi(ngx_http_request_t *r,
ngx_http_ssi_ctx_t *ssi_ctx, ngx_str_t **params);
+#endif
+
static ngx_int_t
ngx_http_perl_get_interpreter(ngx_http_perl_main_conf_t *pmcf,
PerlInterpreter **perl, ngx_log_t *log);
};
+#if (NGX_HTTP_SSI)
+
#define NGX_HTTP_PERL_SSI_SUB 0
#define NGX_HTTP_PERL_SSI_ARG 1
{ ngx_null_string, 0, 0, 0 }
};
-
static ngx_http_ssi_command_t ngx_http_perl_ssi_command = {
ngx_string("perl"), ngx_http_perl_ssi, ngx_http_perl_ssi_params, 0, 1
};
+#endif
+
static void
ngx_http_perl_xs_init(pTHX)
}
+#if (NGX_HTTP_SSI)
+
static ngx_int_t
ngx_http_perl_ssi(ngx_http_request_t *r, ngx_http_ssi_ctx_t *ssi_ctx,
ngx_str_t **params)
return rc;
}
+#endif
+
static ngx_int_t
ngx_http_perl_get_interpreter(ngx_http_perl_main_conf_t *pmcf,
static ngx_int_t
ngx_http_perl_preconfiguration(ngx_conf_t *cf)
{
+#if (NGX_HTTP_SSI)
ngx_int_t rc;
ngx_http_ssi_main_conf_t *smcf;
return NGX_ERROR;
}
+#endif
return NGX_OK;
}
ngx_str_t redirect_uri;
ngx_str_t redirect_args;
+#if (NGX_HTTP_SSI)
ngx_http_ssi_ctx_t *ssi;
+#endif
} ngx_http_perl_ctx_t;