diff options
Diffstat (limited to 'src/core')
| -rw-r--r-- | src/core/ngx_file.c | 6 | ||||
| -rw-r--r-- | src/core/ngx_file.h | 4 | ||||
| -rw-r--r-- | src/core/ngx_palloc.c | 26 | ||||
| -rw-r--r-- | src/core/ngx_palloc.h | 2 |
4 files changed, 33 insertions, 5 deletions
diff --git a/src/core/ngx_file.c b/src/core/ngx_file.c index 4be17ec9a..876541551 100644 --- a/src/core/ngx_file.c +++ b/src/core/ngx_file.c @@ -19,7 +19,7 @@ ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain) if (tf->file.fd == NGX_INVALID_FILE) { rc = ngx_create_temp_file(&tf->file, tf->path, tf->pool, - tf->persistent, tf->access); + tf->persistent, tf->clean, tf->access); if (rc == NGX_ERROR || rc == NGX_AGAIN) { return rc; @@ -37,7 +37,7 @@ ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain) ngx_int_t ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool, - ngx_uint_t persistent, ngx_uint_t access) + ngx_uint_t persistent, ngx_uint_t clean, ngx_uint_t access) { ngx_err_t err; ngx_atomic_uint_t n; @@ -79,7 +79,7 @@ ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, ngx_pool_t *pool, if (file->fd != NGX_INVALID_FILE) { - cln->handler = ngx_pool_cleanup_file; + cln->handler = clean ? ngx_pool_delete_file : ngx_pool_cleanup_file; clnf = cln->data; clnf->fd = file->fd; diff --git a/src/core/ngx_file.h b/src/core/ngx_file.h index 80dbd3319..e42489d8d 100644 --- a/src/core/ngx_file.h +++ b/src/core/ngx_file.h @@ -53,6 +53,7 @@ typedef struct { unsigned log_level:8; unsigned persistent:1; + unsigned clean:1; } ngx_temp_file_t; @@ -81,7 +82,8 @@ struct ngx_tree_ctx_s { ssize_t ngx_write_chain_to_temp_file(ngx_temp_file_t *tf, ngx_chain_t *chain); ngx_int_t ngx_create_temp_file(ngx_file_t *file, ngx_path_t *path, - ngx_pool_t *pool, ngx_uint_t persistent,ngx_uint_t access); + ngx_pool_t *pool, ngx_uint_t persistent, ngx_uint_t clean, + ngx_uint_t access); void ngx_create_hashed_filename(ngx_file_t *file, ngx_path_t *path); ngx_int_t ngx_create_path(ngx_file_t *file, ngx_path_t *path); ngx_err_t ngx_create_full_path(u_char *dir, ngx_uint_t access); diff --git a/src/core/ngx_palloc.c b/src/core/ngx_palloc.c index 109b6e3cc..4288bf10a 100644 --- a/src/core/ngx_palloc.c +++ b/src/core/ngx_palloc.c @@ -243,6 +243,32 @@ ngx_pool_cleanup_file(void *data) } +void +ngx_pool_delete_file(void *data) +{ + ngx_pool_cleanup_file_t *c = data; + + ngx_err_t err; + + ngx_log_debug3(NGX_LOG_DEBUG_ALLOC, c->log, 0, "run cleanup: %p, fd:%d %s", + c, c->fd, c->name); + + if (ngx_delete_file(c->name) == NGX_FILE_ERROR) { + err = ngx_errno; + + if (err != NGX_ENOENT) { + ngx_log_error(NGX_LOG_CRIT, c->log, err, + ngx_delete_file_n " \"%s\" failed", c->name); + } + } + + if (ngx_close_file(c->fd) == NGX_FILE_ERROR) { + ngx_log_error(NGX_LOG_ALERT, c->log, ngx_errno, + ngx_close_file_n " \"%s\" failed", c->name); + } +} + + #if 0 static void * diff --git a/src/core/ngx_palloc.h b/src/core/ngx_palloc.h index 239728102..76c6af15a 100644 --- a/src/core/ngx_palloc.h +++ b/src/core/ngx_palloc.h @@ -60,7 +60,6 @@ typedef struct { } ngx_pool_cleanup_file_t; - void *ngx_alloc(size_t size, ngx_log_t *log); void *ngx_calloc(size_t size, ngx_log_t *log); @@ -74,6 +73,7 @@ ngx_int_t ngx_pfree(ngx_pool_t *pool, void *p); ngx_pool_cleanup_t *ngx_pool_cleanup_add(ngx_pool_t *p, size_t size); void ngx_pool_cleanup_file(void *data); +void ngx_pool_delete_file(void *data); #endif /* _NGX_PALLOC_H_INCLUDED_ */ |
