]> mj.ucw.cz Git - libucw.git/commitdiff
Fixes in fb-mmap.
authorPavel Charvat <pchar@ucw.cz>
Wed, 29 Oct 2008 12:30:59 +0000 (13:30 +0100)
committerMartin Mares <mj@ucw.cz>
Tue, 29 Mar 2011 10:55:05 +0000 (12:55 +0200)
ucw/fb-mmap.c

index 96d482aa3cf65f87e9bd9765231af1c107963074..d1882ee77b848d33a696eb429e33961dd324b942 100644 (file)
@@ -70,7 +70,10 @@ bfmm_map_window(struct fastbuf *f)
   else
     f->buffer = ucw_mmap(f->buffer, ll, prot, MAP_SHARED | MAP_FIXED, F->fd, pos0);
   if (f->buffer == (byte *) MAP_FAILED)
-    bthrow(f, "fb.mmap", "mmap(%s): %m", f->name);
+    {
+      f->buffer = NULL;
+      bthrow(f, "fb.mmap", "mmap(%s): %m", f->name);
+    }
 #ifdef MADV_SEQUENTIAL
   if (ll > CPU_PAGE_SIZE)
     madvise(f->buffer, ll, MADV_SEQUENTIAL);
@@ -140,10 +143,10 @@ static void
 bfmm_close(struct fastbuf *f)
 {
   struct fb_mmap *F = FB_MMAP(f);
-
   if (f->buffer)
     munmap(f->buffer, F->window_size);
-  if (F->file_extend > F->file_size &&
+  if (!(f->flags & FB_DEAD) &&
+      F->file_extend > F->file_size &&
       ucw_ftruncate(F->fd, F->file_size))
     bthrow(f, "fb.write", "ftruncate(%s): %m", f->name);
   bclose_file_helper(f, F->fd, F->is_temp_file);