comparison src/core/ngx_open_file_cache.c @ 1986:7df9b30e2361

fix segfault when file is deleted and open_file_cache_errors is off
author Igor Sysoev <igor@sysoev.ru>
date Tue, 29 Apr 2008 14:39:15 +0000
parents ed71d58c0cf3
children 0e628cf11c29
comparison
equal deleted inserted replaced
1985:f711544d01b4 1986:7df9b30e2361
171 171
172 if (file) { 172 if (file) {
173 173
174 file->uses++; 174 file->uses++;
175 175
176 ngx_queue_remove(&file->queue);
177
178 if (file->fd == NGX_INVALID_FILE && file->err == 0 && !file->is_dir) { 176 if (file->fd == NGX_INVALID_FILE && file->err == 0 && !file->is_dir) {
179 177
180 /* file was not used often enough to keep open */ 178 /* file was not used often enough to keep open */
181 179
182 rc = ngx_open_and_stat_file(name->data, of, pool->log); 180 rc = ngx_open_and_stat_file(name->data, of, pool->log);
183 181
184 if (rc != NGX_OK && (of->err == 0 || !of->errors)) { 182 if (rc != NGX_OK && (of->err == 0 || !of->errors)) {
185 goto failed; 183 goto failed;
186 } 184 }
185
186 ngx_queue_remove(&file->queue);
187 187
188 goto add_event; 188 goto add_event;
189 } 189 }
190 190
191 if ((file->event && file->use_event) 191 if ((file->event && file->use_event)
209 } 209 }
210 210
211 } else { 211 } else {
212 of->err = file->err; 212 of->err = file->err;
213 } 213 }
214
215 ngx_queue_remove(&file->queue);
214 216
215 goto found; 217 goto found;
216 } 218 }
217 219
218 ngx_log_debug4(NGX_LOG_DEBUG_CORE, pool->log, 0, 220 ngx_log_debug4(NGX_LOG_DEBUG_CORE, pool->log, 0,
233 rc = ngx_open_and_stat_file(name->data, of, pool->log); 235 rc = ngx_open_and_stat_file(name->data, of, pool->log);
234 236
235 if (rc != NGX_OK && (of->err == 0 || !of->errors)) { 237 if (rc != NGX_OK && (of->err == 0 || !of->errors)) {
236 goto failed; 238 goto failed;
237 } 239 }
240
241 ngx_queue_remove(&file->queue);
238 242
239 if (of->is_dir) { 243 if (of->is_dir) {
240 244
241 if (file->is_dir || file->err) { 245 if (file->is_dir || file->err) {
242 goto update; 246 goto update;