aboutsummaryrefslogtreecommitdiff
path: root/src/core
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2003-11-16 21:49:42 +0000
committerIgor Sysoev <igor@sysoev.ru>2003-11-16 21:49:42 +0000
commitf2e676aa1585de170b39cf3e9d71b88db47e4b1b (patch)
tree3553b3481de51b2321b201ae34024f178af894c1 /src/core
parent297c0487518d4b974a548dfd3d5d2f10c250177c (diff)
downloadnginx-f2e676aa1585de170b39cf3e9d71b88db47e4b1b.tar.gz
nginx-f2e676aa1585de170b39cf3e9d71b88db47e4b1b.zip
nginx-0.0.1-2003-11-17-00:49:42 import
Diffstat (limited to 'src/core')
-rw-r--r--src/core/nginx.c22
-rw-r--r--src/core/ngx_conf_file.c6
-rw-r--r--src/core/ngx_core.h12
-rw-r--r--src/core/ngx_file.c7
-rw-r--r--src/core/ngx_garbage_collector.c127
-rw-r--r--src/core/ngx_log.c2
-rw-r--r--src/core/ngx_log.h2
7 files changed, 109 insertions, 69 deletions
diff --git a/src/core/nginx.c b/src/core/nginx.c
index e0e67c081..8d0b3ea60 100644
--- a/src/core/nginx.c
+++ b/src/core/nginx.c
@@ -97,7 +97,9 @@ int main(int argc, char *const *argv)
return 1;
}
+#if 0
stub_init(log);
+#endif
ngx_max_module = 0;
for (i = 0; ngx_modules[i]; i++) {
@@ -229,8 +231,6 @@ ngx_log_debug(log, "REOPEN: %d:%d:%s" _ fd _ file[i].fd _ file[i].name.data);
break;
}
}
-
- return 0;
}
@@ -513,7 +513,7 @@ ngx_log_debug(log, "OPEN: %d:%s" _ file[i].fd _ file[i].name.data);
ngx_cleaner_event.event_handler = ngx_clean_old_cycles;
ngx_cleaner_event.log = cycle->log;
ngx_cleaner_event.data = &dumb;
- dumb.fd = -1;
+ dumb.fd = (ngx_socket_t) -1;
}
ngx_temp_pool->log = cycle->log;
@@ -541,11 +541,14 @@ static int ngx_open_listening_sockets(ngx_cycle_t *cycle, ngx_log_t *log)
ngx_listening_t *ls;
reuseaddr = 1;
+#if (NGX_SUPPRESS_WARN)
+ failed = 0;
+#endif
/* TODO: times configurable */
for (times = 10; times; times--) {
- failed = 0;
+ failed = 0;
/* for each listening socket */
@@ -597,6 +600,16 @@ static int ngx_open_listening_sockets(ngx_cycle_t *cycle, ngx_log_t *log)
/* TODO: close on exit */
+ if (!(ngx_event_flags & NGX_USE_AIO_EVENT)) {
+ if (ngx_nonblocking(s) == -1) {
+ ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
+ ngx_nonblocking_n " %s failed",
+ ls[i].addr_text.data);
+ return NGX_ERROR;
+ }
+ }
+
+#if 0
if (ls[i].nonblocking) {
if (ngx_nonblocking(s) == -1) {
ngx_log_error(NGX_LOG_EMERG, log, ngx_socket_errno,
@@ -605,6 +618,7 @@ static int ngx_open_listening_sockets(ngx_cycle_t *cycle, ngx_log_t *log)
return NGX_ERROR;
}
}
+#endif
if (bind(s, ls[i].sockaddr, ls[i].socklen) == -1) {
err = ngx_socket_errno;
diff --git a/src/core/ngx_conf_file.c b/src/core/ngx_conf_file.c
index 6fd4f8698..5ea364bce 100644
--- a/src/core/ngx_conf_file.c
+++ b/src/core/ngx_conf_file.c
@@ -55,9 +55,9 @@ char *ngx_conf_parse(ngx_conf_t *cf, ngx_str_t *filename)
ngx_palloc(cf->pool, sizeof(ngx_conf_file_t)),
NGX_CONF_ERROR);
- if (ngx_stat_fd(fd, &cf->conf_file->file.info) == -1) {
+ if (ngx_fd_info(fd, &cf->conf_file->file.info) == -1) {
ngx_log_error(NGX_LOG_EMERG, cf->log, ngx_errno,
- ngx_stat_fd_n " %s failed", filename->data);
+ ngx_fd_info_n " %s failed", filename->data);
}
ngx_test_null(cf->conf_file->hunk,
@@ -310,7 +310,7 @@ ngx_log_debug(cf->log, "TOKEN START");
if (h->pos >= h->last) {
if (cf->conf_file->file.offset
- >= ngx_file_size((&cf->conf_file->file.info))) {
+ >= ngx_file_size(&cf->conf_file->file.info)) {
return NGX_CONF_FILE_DONE;
}
diff --git a/src/core/ngx_core.h b/src/core/ngx_core.h
index 84b0a6d05..ec8182b0a 100644
--- a/src/core/ngx_core.h
+++ b/src/core/ngx_core.h
@@ -2,12 +2,6 @@
#define _NGX_CORE_H_INCLUDED_
-#include <ngx_types.h>
-#include <ngx_time.h>
-#include <ngx_socket.h>
-#include <ngx_errno.h>
-#include <ngx_process.h>
-
typedef struct ngx_module_s ngx_module_t;
typedef struct ngx_conf_s ngx_conf_t;
typedef struct ngx_cycle_s ngx_cycle_t;
@@ -18,6 +12,11 @@ typedef struct ngx_file_s ngx_file_t;
typedef struct ngx_event_s ngx_event_t;
typedef struct ngx_connection_s ngx_connection_t;
+
+#include <ngx_time.h>
+#include <ngx_socket.h>
+#include <ngx_errno.h>
+#include <ngx_process.h>
#include <ngx_string.h>
#include <ngx_parse.h>
#include <ngx_log.h>
@@ -25,6 +24,7 @@ typedef struct ngx_connection_s ngx_connection_t;
#include <ngx_hunk.h>
#include <ngx_array.h>
#include <ngx_table.h>
+#include <ngx_types.h>
#include <ngx_file.h>
#include <ngx_files.h>
#include <ngx_times.h>
diff --git a/src/core/ngx_file.c b/src/core/ngx_file.c
index 8869c6c77..f5a1c6601 100644
--- a/src/core/ngx_file.c
+++ b/src/core/ngx_file.c
@@ -86,7 +86,7 @@ ngx_log_debug(file->log, "temp fd: %d" _ file->fd);
}
if (err != NGX_ENOENT
-#if (WIN32_NEED_TEST)
+#if (WIN32)
&& err != NGX_ENOTDIR
#endif
) {
@@ -149,11 +149,12 @@ int ngx_create_path(ngx_file_t *file, ngx_path_t *path)
ngx_log_debug(file->log, "temp: %s" _ file->name.data);
- if (ngx_mkdir(file->name.data) == NGX_FILE_ERROR) {
+ if (ngx_create_dir(file->name.data) == NGX_FILE_ERROR) {
err = ngx_errno;
if (err != NGX_EEXIST) {
ngx_log_error(NGX_LOG_CRIT, file->log, err,
- ngx_mkdir_n " \"%s\" failed", file->name.data);
+ ngx_create_dir_n " \"%s\" failed",
+ file->name.data);
return NGX_ERROR;
}
}
diff --git a/src/core/ngx_garbage_collector.c b/src/core/ngx_garbage_collector.c
index ae6fab420..087b0ad0c 100644
--- a/src/core/ngx_garbage_collector.c
+++ b/src/core/ngx_garbage_collector.c
@@ -6,7 +6,11 @@
typedef struct ngx_gc_s ngx_gc_t;
typedef int (*ngx_gc_handler_pt) (ngx_gc_t *ctx, ngx_str_t *name,
- ngx_file_info_t *fi);
+ ngx_dir_t *dir);
+
+
+static int ngx_garbage_collector_temp_handler(ngx_gc_t *ctx, ngx_str_t *name,
+ ngx_dir_t *dir);
struct ngx_gc_s {
ngx_path_t *path;
@@ -78,6 +82,7 @@ void stub_init(ngx_log_t *log)
ctx->path = &path;
ctx->log = log;
+ ctx->handler = ngx_garbage_collector_temp_handler;
ngx_collect_garbage(ctx, &path.name, 0);
}
@@ -85,76 +90,85 @@ void stub_init(ngx_log_t *log)
static int ngx_collect_garbage(ngx_gc_t *ctx, ngx_str_t *dname, int level)
{
- int nlen;
- char *last;
- ngx_str_t fname;
- ngx_dir_t *dir;
- ngx_dirent_t *de;
- ngx_file_info_t fi;
-
- fname.len = 0;
+ int rc, len;
+ char *last;
+ ngx_err_t err;
+ ngx_str_t fname, buf;
+ ngx_dir_t dir;
-ngx_log_debug(ctx->log, "dir %s" _ dname->data);
+ buf.len = 0;
- dir = ngx_open_dir(dname->data);
+ngx_log_debug(ctx->log, "dir '%s':%d" _ dname->data _ dname->len);
- if (dir == NULL) {
- ngx_log_error(NGX_LOG_ERR, ctx->log, ngx_errno,
- ngx_open_dir_n " \"%s\" failed", dname->data);
+ if (ngx_open_dir(dname, &dir) == NGX_ERROR) {
+ ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
+ ngx_open_dir_n " \"%s\" failed", dname->data);
return NGX_ERROR;
}
for ( ;; ) {
- de = ngx_read_dir(dir);
+ ngx_set_errno(0);
+ if (ngx_read_dir(&dir) == NGX_ERROR) {
+ err = ngx_errno;
+
+ if (err != NGX_ENOMOREFILES) {
+ ngx_log_error(NGX_LOG_CRIT, ctx->log, err,
+ ngx_read_dir_n " \"%s\" failed", dname->data);
+ rc = NGX_ERROR;
- if (de == NULL) {
- if (fname.len) {
- ngx_free(fname.data);
+ } else {
+ rc = NGX_OK;
}
+
break;
}
-ngx_log_debug(ctx->log, "file %s" _ de->d_name);
+ len = ngx_de_namelen(&dir);
-#ifdef __FreeBSD__
- nlen = de->d_namlen;
-#else
- nlen = ngx_strlen(de->d_name);
-#endif
+ngx_log_debug(ctx->log, "name '%s':%d" _ ngx_de_name(&dir) _ len);
- if (nlen == 1 && de->d_name[0] == '.') {
+ if (len == 1 && ngx_de_name(&dir)[0] == '.') {
continue;
}
- if (nlen == 2 && de->d_name[0] == '.' && de->d_name[1] == '.') {
+ if (len == 2
+ && ngx_de_name(&dir)[0] == '.'
+ && ngx_de_name(&dir)[1] == '.')
+ {
continue;
}
- if (dname->len + 1 + nlen > fname.len) {
- if (fname.len) {
- ngx_free(fname.data);
+ fname.len = dname->len + 1+ len;
+
+ if (fname.len + NGX_DIR_MASK_LEN > buf.len) {
+
+ if (buf.len) {
+ ngx_free(buf.data);
}
- fname.len = dname->len + 1 + nlen;
+ buf.len = dname->len + 1 + len + NGX_DIR_MASK_LEN;
- if (!(fname.data = ngx_alloc(fname.len + 1, ctx->log))) {
+ if (!(buf.data = ngx_alloc(buf.len + 1, ctx->log))) {
return NGX_ABORT;
}
}
- last = ngx_cpymem(fname.data, dname->data, dname->len);
+ last = ngx_cpymem(buf.data, dname->data, dname->len);
*last++ = '/';
- ngx_memcpy(last, de->d_name, nlen + 1);
+ ngx_memcpy(last, ngx_de_name(&dir), len + 1);
+ fname.data = buf.data;
-ngx_log_debug(ctx->log, "de %s" _ fname.data);
+ngx_log_debug(ctx->log, "path %s" _ fname.data);
- if (ngx_file_type(fname.data, &fi) == NGX_FILE_ERROR) {
- ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
- ngx_file_type_n " \"%s\" failed", fname.data);
- continue;
+ if (!dir.info_valid) {
+ if (ngx_de_info(fname.data, &dir) == NGX_FILE_ERROR) {
+ ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
+ ngx_de_info_n " \"%s\" failed", fname.data);
+ continue;
+ }
}
- if (ngx_is_dir((&fi))) {
+ if (ngx_de_is_dir(&dir)) {
ngx_log_debug(ctx->log, "enter %s" _ fname.data);
@@ -162,12 +176,14 @@ ngx_log_debug(ctx->log, "enter %s" _ fname.data);
/* there can not be directory on the last level */
|| level == NGX_MAX_PATH_LEVEL
/* an directory from the old path hierarchy */
- || nlen != ctx->path->level[level])
+ || len != ctx->path->level[level])
{
if (ngx_collect_garbage(ctx, &fname, -1) == NGX_ABORT) {
return NGX_ABORT;
}
+ fname.data[fname.len] = '\0';
+
ngx_log_error(NGX_LOG_NOTICE, ctx->log, 0,
"delete old hierachy directory \"%s\"",
fname.data);
@@ -178,7 +194,7 @@ ngx_log_debug(ctx->log, "enter %s" _ fname.data);
fname.data);
} else {
ctx->deleted++;
- ctx->freed += ngx_file_size((&fi));
+ ctx->freed += ngx_de_size(&dir);
}
continue;
@@ -188,7 +204,9 @@ ngx_log_debug(ctx->log, "enter %s" _ fname.data);
return NGX_ABORT;
}
- } else if (ngx_is_file((&fi))) {
+ } else if (ngx_de_is_file(&dir)) {
+
+ngx_log_debug(ctx->log, "file %s" _ fname.data);
if (level == -1
|| (level < NGX_MAX_PATH_LEVEL && ctx->path->level[level] != 0))
@@ -199,13 +217,13 @@ ngx_log_debug(ctx->log, "enter %s" _ fname.data);
fname.data);
} else {
ctx->deleted++;
- ctx->freed += ngx_file_size((&fi));
+ ctx->freed += ngx_de_size(&dir);
}
continue;
}
- if (ctx->handler(ctx, &fname, &fi) == NGX_ABORT) {
+ if (ctx->handler(ctx, &fname, &dir) == NGX_ABORT) {
return NGX_ABORT;
}
@@ -218,17 +236,26 @@ ngx_log_debug(ctx->log, "enter %s" _ fname.data);
ngx_delete_file_n " \"%s\" failed", fname.data);
} else {
ctx->deleted++;
- ctx->freed += ngx_file_size((&fi));
+ ctx->freed += ngx_de_size(&dir);
}
}
}
- return NGX_OK;
+ if (buf.len) {
+ ngx_free(buf.data);
+ }
+
+ if (ngx_close_dir(&dir) == NGX_ERROR) {
+ ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
+ ngx_close_dir_n " \"%s\" failed", fname.data);
+ }
+
+ return rc;
}
-int ngx_garbage_collector_temp_handler(ngx_gc_t *ctx, ngx_str_t *name,
- ngx_file_info_t *fi)
+static int ngx_garbage_collector_temp_handler(ngx_gc_t *ctx, ngx_str_t *name,
+ ngx_dir_t *dir)
{
/*
* we use mtime only and do not use atime because:
@@ -237,7 +264,7 @@ int ngx_garbage_collector_temp_handler(ngx_gc_t *ctx, ngx_str_t *name,
* Unices have mount option "noatime"
*/
- if (ngx_cached_time - ngx_file_mtime(fi) < 3600) {
+ if (ngx_cached_time - ngx_de_mtime(dir) < 3600) {
return NGX_OK;
}
@@ -251,6 +278,6 @@ int ngx_garbage_collector_temp_handler(ngx_gc_t *ctx, ngx_str_t *name,
}
ctx->deleted++;
- ctx->freed += ngx_file_size(fi);
+ ctx->freed += ngx_de_size(dir);
return NGX_OK;
}
diff --git a/src/core/ngx_log.c b/src/core/ngx_log.c
index 6dda801ea..61d49c7c2 100644
--- a/src/core/ngx_log.c
+++ b/src/core/ngx_log.c
@@ -65,7 +65,7 @@ void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
va_list args;
#endif
#if (WIN32)
- u_int written;
+ u_long written;
#endif
if (log->file->fd == NGX_INVALID_FILE) {
diff --git a/src/core/ngx_log.h b/src/core/ngx_log.h
index 959c13206..3eedfff6f 100644
--- a/src/core/ngx_log.h
+++ b/src/core/ngx_log.h
@@ -139,8 +139,6 @@ void ngx_log_error_core(int level, ngx_log_t *log, ngx_err_t err,
#else /* NO VARIADIC MACROS */
-#include <stdarg.h>
-
#if (NGX_DEBUG)
#define ngx_log_debug(log, text) \
if (log->log_level == NGX_LOG_DEBUG) \