From 9ca4077700dc170f847ef2887727ed0ed11e4434 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Axel=20D=C3=B6rfler?= Date: Thu, 4 Jun 2009 12:29:15 +0000 Subject: [PATCH] * Fixed a bug that let _InvalidateAfter() access already freed memory, and would also mess up the file map, causing all sorts of file corruption. * This fixes bug #3991 (and eventually some others). git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@30960 a95241bf-73f2-0310-859d-f6bbb57e9c96 --- src/system/kernel/cache/file_map.cpp | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/src/system/kernel/cache/file_map.cpp b/src/system/kernel/cache/file_map.cpp index 5c89109748..68b88ddafd 100644 --- a/src/system/kernel/cache/file_map.cpp +++ b/src/system/kernel/cache/file_map.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2004-2008, Axel Dörfler, axeld@pinc-software.de. + * Copyright 2004-2009, Axel Dörfler, axeld@pinc-software.de. * Distributed under the terms of the MIT License. */ @@ -280,13 +280,15 @@ FileMap::_InvalidateAfter(off_t offset) uint32 index; file_extent* extent = _FindExtent(offset, &index); if (extent != NULL) { - _MakeSpace(index + 1); + uint32 resizeTo = index + 1; if (extent->offset + extent->disk.length > offset) { extent->disk.length = offset - extent->offset; if (extent->disk.length == 0) - _MakeSpace(index); + resizeTo = index; } + + _MakeSpace(resizeTo); } }