[gegl] buffer: in swap backend, free block when failing to set write offset
- From: Ell <ell src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gegl] buffer: in swap backend, free block when failing to set write offset
- Date: Sun, 15 Mar 2020 21:22:16 +0000 (UTC)
commit 8eb0c4105e54f369a1e54949489cab5eaa3fe1f7
Author: Ell <ell_se yahoo com>
Date: Sun Mar 15 23:08:14 2020 +0200
buffer: in swap backend, free block when failing to set write offset
In addition to last commit, also free the block when failing to set
the file offset while writing a tile, in which case nothing is
written, to avoid reading back junk data, causing a segfault with
RLE compression.
gegl/buffer/gegl-tile-backend-swap.c | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
---
diff --git a/gegl/buffer/gegl-tile-backend-swap.c b/gegl/buffer/gegl-tile-backend-swap.c
index 7adb1140b..c66cd2914 100644
--- a/gegl/buffer/gegl-tile-backend-swap.c
+++ b/gegl/buffer/gegl-tile-backend-swap.c
@@ -625,7 +625,8 @@ gegl_tile_backend_swap_write (ThreadParams *params)
if (lseek (out_fd, offset, SEEK_SET) < 0)
{
g_warning ("unable to seek to tile in buffer: %s", g_strerror (errno));
- return;
+
+ goto error;
}
out_offset = offset;
}
@@ -638,14 +639,13 @@ 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);
+ writing = FALSE;
g_message ("unable to write tile data to self: "
"%s (%d/%d bytes written)",
g_strerror (errno), wrote, to_be_written);
- break;
+
+ goto error;
}
data += wrote;
@@ -658,6 +658,15 @@ gegl_tile_backend_swap_write (ThreadParams *params)
writing = FALSE;
GEGL_NOTE (GEGL_DEBUG_TILE_BACKEND, "writer thread wrote at %i", (gint)offset);
+
+ return;
+
+error:
+ g_atomic_pointer_add (&total_uncompressed, -params->size);
+
+ gegl_tile_backend_swap_free_block (params->block);
+
+ return;
}
static void
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]