diff options
author | Igor Sysoev <igor@sysoev.ru> | 2003-11-16 21:49:42 +0000 |
---|---|---|
committer | Igor Sysoev <igor@sysoev.ru> | 2003-11-16 21:49:42 +0000 |
commit | f2e676aa1585de170b39cf3e9d71b88db47e4b1b (patch) | |
tree | 3553b3481de51b2321b201ae34024f178af894c1 /src/core | |
parent | 297c0487518d4b974a548dfd3d5d2f10c250177c (diff) | |
download | nginx-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.c | 22 | ||||
-rw-r--r-- | src/core/ngx_conf_file.c | 6 | ||||
-rw-r--r-- | src/core/ngx_core.h | 12 | ||||
-rw-r--r-- | src/core/ngx_file.c | 7 | ||||
-rw-r--r-- | src/core/ngx_garbage_collector.c | 127 | ||||
-rw-r--r-- | src/core/ngx_log.c | 2 | ||||
-rw-r--r-- | src/core/ngx_log.h | 2 |
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) \ |