[libglnx] fdio: Support taking ownership of tmpfile fd



commit 9d995a362009ae01bca14c781e14d5623ad27cd6
Author: Colin Walters <walters verbum org>
Date:   Mon Sep 11 17:17:12 2017 -0400

    fdio: Support taking ownership of tmpfile fd
    
    While reading a strace I noticed a double close in the tests; this was because
    we were missing an assignment to `-1` in the tests. However, let's make
    supporting this clearer by explicitly supporting the fd being `-1` while still
    setting the `initialized` variable to `FALSE`. We also add the `EBADF` assertion
    checking.

 glnx-fdio.c               |    8 +++++---
 tests/test-libglnx-fdio.c |    1 +
 2 files changed, 6 insertions(+), 3 deletions(-)
---
diff --git a/glnx-fdio.c b/glnx-fdio.c
index e8e2167..0046807 100644
--- a/glnx-fdio.c
+++ b/glnx-fdio.c
@@ -168,9 +168,11 @@ glnx_tmpfile_clear (GLnxTmpfile *tmpf)
     return;
   if (!tmpf->initialized)
     return;
-  if (tmpf->fd == -1)
-    return;
-  (void) close (tmpf->fd);
+  if (tmpf->fd != -1)
+    {
+      if (close (tmpf->fd) < 0)
+        g_assert (errno != EBADF);
+    }
   /* If ->path is set, we're likely aborting due to an error. Clean it up */
   if (tmpf->path)
     {
diff --git a/tests/test-libglnx-fdio.c b/tests/test-libglnx-fdio.c
index 4b81a95..36ded80 100644
--- a/tests/test-libglnx-fdio.c
+++ b/tests/test-libglnx-fdio.c
@@ -171,6 +171,7 @@ test_stdio_file (void)
   if (!glnx_open_anonymous_tmpfile (O_RDWR|O_CLOEXEC, &tmpf, error))
     goto out;
   f = fdopen (tmpf.fd, "w");
+  tmpf.fd = -1; /* Ownership was transferred via fdopen() */
   if (!f)
     {
       (void)glnx_throw_errno_prefix (error, "fdopen");


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