[gegl] Issue #229 - Segfault when running out of swap space with RLE compression



commit f025dc36e7147e32a228c07916f62b1752eab046
Author: Ell <ell_se yahoo com>
Date:   Sun Mar 15 22:38:21 2020 +0200

    Issue #229 - Segfault when running out of swap space with RLE compression
    
    In the swap backend, when writing a tile to disk fails (usually,
    when running out of space), free the corresponding block, so that
    attempting to later read it back returns a NULL tile.  Previously,
    we'd just read back junk, which would then segfault when attempting
    to RLE-decompress the data.

 gegl/buffer/gegl-tile-backend-swap.c | 4 ++++
 1 file changed, 4 insertions(+)
---
diff --git a/gegl/buffer/gegl-tile-backend-swap.c b/gegl/buffer/gegl-tile-backend-swap.c
index 4a60c5d33..7adb1140b 100644
--- a/gegl/buffer/gegl-tile-backend-swap.c
+++ b/gegl/buffer/gegl-tile-backend-swap.c
@@ -638,6 +638,10 @@ gegl_tile_backend_swap_write (ThreadParams *params)
       wrote = write (out_fd, data, to_be_written);
       if (wrote <= 0)
         {
+          g_atomic_pointer_add (&total_uncompressed, -params->size);
+
+          gegl_tile_backend_swap_free_block (params->block);
+
           g_message ("unable to write tile data to self: "
                      "%s (%d/%d bytes written)",
                      g_strerror (errno), wrote, to_be_written);


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]