Mercurial > dovecot > original-hg > dovecot-1.2
diff src/lib/file-cache.c @ 4866:4ec6ceb0934a HEAD
If mremap_anon() fails, don't leak/crash.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Sun, 03 Dec 2006 17:21:29 +0200 |
parents | a69ab82d7346 |
children | e4afafbb963b |
line wrap: on
line diff
--- a/src/lib/file-cache.c Sun Dec 03 17:09:37 2006 +0200 +++ b/src/lib/file-cache.c Sun Dec 03 17:21:29 2006 +0200 @@ -50,6 +50,7 @@ { size_t page_size = mmap_get_page_size(); uoff_t diff = size % page_size; + void *new_base; if (diff != 0) size += page_size - diff; @@ -73,14 +74,14 @@ return -1; } } else { - cache->mmap_base = mremap_anon(cache->mmap_base, - cache->mmap_length, - size, MREMAP_MAYMOVE); - if (cache->mmap_base == MAP_FAILED) { + new_base = mremap_anon(cache->mmap_base, cache->mmap_length, + size, MREMAP_MAYMOVE); + if (new_base == MAP_FAILED) { i_error("mremap_anon(%"PRIuUOFF_T") failed: %m", size); - cache->mmap_length = 0; return -1; } + + cache->mmap_base = new_base; } cache->mmap_length = size; return 0;