[mutter] screen-cast/src: Handle failing to allocate shm buffers



commit 08ad107df5f8cda76add0121c6fac8536d4a7cde
Author: Jonas Ã…dahl <jadahl gmail com>
Date:   Mon Feb 1 09:30:55 2021 +0100

    screen-cast/src: Handle failing to allocate shm buffers
    
    Don't leak the file descriptors, and don't fall over when trying to
    clean up buffers that failed to allocate.
    
    Part-of: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1697>

 src/backends/meta-screen-cast-stream-src.c | 13 +++++++++++--
 1 file changed, 11 insertions(+), 2 deletions(-)
---
diff --git a/src/backends/meta-screen-cast-stream-src.c b/src/backends/meta-screen-cast-stream-src.c
index 0682d7330a..3b09316487 100644
--- a/src/backends/meta-screen-cast-stream-src.c
+++ b/src/backends/meta-screen-cast-stream-src.c
@@ -781,6 +781,8 @@ on_stream_add_buffer (void             *data,
 
       if (ftruncate (spa_data[0].fd, spa_data[0].maxsize) < 0)
         {
+          close (spa_data[0].fd);
+          spa_data[0].fd = -1;
           g_critical ("Can't truncate to %d: %m", spa_data[0].maxsize);
           return;
         }
@@ -797,6 +799,8 @@ on_stream_add_buffer (void             *data,
                                spa_data[0].mapoffset);
       if (spa_data[0].data == MAP_FAILED)
         {
+          close (spa_data[0].fd);
+          spa_data[0].fd = -1;
           g_critical ("Failed to mmap memory: %m");
           return;
         }
@@ -820,8 +824,13 @@ on_stream_remove_buffer (void             *data,
     }
   else if (spa_data[0].type == SPA_DATA_MemFd)
     {
-      munmap (spa_data[0].data, spa_data[0].maxsize);
-      close (spa_data[0].fd);
+      g_warn_if_fail (spa_data[0].fd > 0 || !spa_data[0].data);
+
+      if (spa_data[0].fd > 0)
+        {
+          munmap (spa_data[0].data, spa_data[0].maxsize);
+          close (spa_data[0].fd);
+        }
     }
 }
 


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