aboutsummaryrefslogtreecommitdiff
path: root/src/core/ngx_garbage_collector.c
diff options
context:
space:
mode:
authorIgor Sysoev <igor@sysoev.ru>2009-03-23 13:14:51 +0000
committerIgor Sysoev <igor@sysoev.ru>2009-03-23 13:14:51 +0000
commit52859f2f1309fc8452f1cf182b712ae2d72bc40c (patch)
treef87d424675f857d0dcebdc80ce3828389d75a69b /src/core/ngx_garbage_collector.c
parent1af7090b5091ebbee1cd9354fe8a702e601a8ce0 (diff)
downloadnginx-52859f2f1309fc8452f1cf182b712ae2d72bc40c.tar.gz
nginx-52859f2f1309fc8452f1cf182b712ae2d72bc40c.zip
a prelimiary proxy cache support
Diffstat (limited to 'src/core/ngx_garbage_collector.c')
-rw-r--r--src/core/ngx_garbage_collector.c217
1 files changed, 0 insertions, 217 deletions
diff --git a/src/core/ngx_garbage_collector.c b/src/core/ngx_garbage_collector.c
deleted file mode 100644
index 4eeaeb9be..000000000
--- a/src/core/ngx_garbage_collector.c
+++ /dev/null
@@ -1,217 +0,0 @@
-
-/*
- * Copyright (C) Igor Sysoev
- */
-
-
-#include <ngx_config.h>
-#include <ngx_core.h>
-
-
-
-ngx_int_t ngx_collect_garbage(ngx_gc_t *ctx, ngx_str_t *dname, ngx_int_t level)
-{
- int rc;
- u_char *last;
- size_t len;
- ngx_err_t err;
- ngx_str_t fname, buf;
- ngx_dir_t dir;
-
- buf.len = 0;
-#if (NGX_SUPPRESS_WARN)
- buf.data = NULL;
- fname.data = NULL;
-#endif
-
- ngx_log_debug2(NGX_LOG_DEBUG_CORE, ctx->log, 0,
- "gc dir \"%s\":%d", dname->data, dname->len);
-
- 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 ( ;; ) {
- 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;
-
- } else {
- rc = NGX_OK;
- }
-
- break;
- }
-
- len = ngx_de_namelen(&dir);
-
- ngx_log_debug2(NGX_LOG_DEBUG_CORE, ctx->log, 0,
- "gc name \"%s\":%d", ngx_de_name(&dir), len);
-
- if (len == 1 && ngx_de_name(&dir)[0] == '.') {
- continue;
- }
-
- if (len == 2
- && ngx_de_name(&dir)[0] == '.'
- && ngx_de_name(&dir)[1] == '.')
- {
- continue;
- }
-
- fname.len = dname->len + 1+ len;
-
- if (fname.len + NGX_DIR_MASK_LEN > buf.len) {
-
- if (buf.len) {
- ngx_free(buf.data);
- }
-
- buf.len = dname->len + 1 + len + NGX_DIR_MASK_LEN;
-
- buf.data = ngx_alloc(buf.len + 1, ctx->log);
- if (buf.data == NULL) {
- return NGX_ABORT;
- }
- }
-
- last = ngx_cpymem(buf.data, dname->data, dname->len);
- *last++ = '/';
- ngx_memcpy(last, ngx_de_name(&dir), len + 1);
- fname.data = buf.data;
-
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0,
- "gc path: \"%s\"", fname.data);
-
- if (!dir.valid_info) {
- 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_de_is_dir(&dir)) {
-
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0,
- "gc enter dir \"%s\"", fname.data);
-
- if (level == -1
- /* there can not be directory on the last level */
- || level == NGX_MAX_PATH_LEVEL
- /* an directory from the old path hierarchy */
- || 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);
-
- if (ngx_delete_dir(fname.data) == NGX_FILE_ERROR) {
- ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
- ngx_delete_dir_n " \"%s\" failed",
- fname.data);
- } else {
- ctx->deleted++;
- ctx->freed += ngx_de_size(&dir);
- }
-
- continue;
- }
-
- if (ngx_collect_garbage(ctx, &fname, level + 1) == NGX_ABORT) {
- return NGX_ABORT;
- }
-
- } else if (ngx_de_is_file(&dir)) {
-
- ngx_log_debug1(NGX_LOG_DEBUG_CORE, ctx->log, 0,
- "gc file \"%s\"", fname.data);
-
- if (level == -1
- || (level < NGX_MAX_PATH_LEVEL && ctx->path->level[level] != 0))
- {
- if (ngx_delete_file(fname.data) == NGX_FILE_ERROR) {
- ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
- ngx_delete_file_n " \"%s\" failed",
- fname.data);
- } else {
- ctx->deleted++;
- ctx->freed += ngx_de_size(&dir);
- }
-
- continue;
- }
-
- if (ctx->handler(ctx, &fname, &dir) == NGX_ABORT) {
- return NGX_ABORT;
- }
-
- } else {
- ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
- "the file \"%s\" has unknown type, deleting",
- fname.data);
-
- if (ngx_delete_file(fname.data) == NGX_FILE_ERROR) {
- ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
- ngx_delete_file_n " \"%s\" failed", fname.data);
- } else {
- ctx->deleted++;
- ctx->freed += ngx_de_size(&dir);
- }
- }
- }
-
- 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;
-}
-
-
-ngx_int_t 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:
- * on NTFS access time has a resolution of 1 hour,
- * on NT FAT access time has a resolution of 1 day,
- * Unices have the mount option "noatime".
- */
-
- if (ngx_time() - ngx_de_mtime(dir) < 3600) {
- return NGX_OK;
- }
-
- ngx_log_error(NGX_LOG_NOTICE, ctx->log, 0,
- "delete the stale temporary file \"%s\"", name->data);
-
- if (ngx_delete_file(name->data) == NGX_FILE_ERROR) {
- ngx_log_error(NGX_LOG_CRIT, ctx->log, ngx_errno,
- ngx_delete_file_n " \"%s\" failed", name->data);
- return NGX_ERROR;
- }
-
- ctx->deleted++;
- ctx->freed += ngx_de_size(dir);
-
- return NGX_OK;
-}