summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Haller <thaller@redhat.com>2022-10-12 23:30:37 +0200
committerThomas Haller <thaller@redhat.com>2022-10-20 08:16:52 +0200
commitd6790aeccaf7c680c29a34f8094fa098038e8499 (patch)
tree7f5ae4ebaa50f32be92c39344b6c09e89b4f7d80
parent3ed7f4d1ed7e49b5d38d837d3edba69f5b7eaaf6 (diff)
downloadglib-d6790aeccaf7c680c29a34f8094fa098038e8499.tar.gz
gspawn: use g_close()
g_close() now is async-signal-safe, as long as we don't request a GError and pass a valid file descriptor. Update "gspawn.c" to drop its safe_close() function and use g_close() instead.
-rw-r--r--glib/gspawn.c33
1 files changed, 5 insertions, 28 deletions
diff --git a/glib/gspawn.c b/glib/gspawn.c
index c644cebb1..4f4c55d99 100644
--- a/glib/gspawn.c
+++ b/glib/gspawn.c
@@ -162,8 +162,6 @@ extern char **environ;
*/
-static void safe_close (gint fd);
-
static gint g_execute (const gchar *file,
gchar **argv,
gchar **argv_buffer,
@@ -267,11 +265,9 @@ close_and_invalidate (gint *fd)
{
if (*fd < 0)
return;
- else
- {
- safe_close (*fd);
- *fd = -1;
- }
+
+ g_close (*fd, NULL);
+ *fd = -1;
}
/* Some versions of OS X define READ_OK in public headers */
@@ -1340,30 +1336,11 @@ dupfd_cloexec (int old_fd, int new_fd_min)
/* This function is called between fork() and exec() and hence must be
* async-signal-safe (see signal-safety(7)). */
-static void
-safe_close (gint fd)
-{
- /* Note that this function is (also) called after fork(), so it cannot use
- * g_close().
- * Note that it is however called both from the parent and the child
- * process.
- *
- * This function returns no error, because there is nothing what the caller
- * could do with that information. That is even the case for EINTR. See
- * g_close() about the specialty of EINTR and why that is correct.
- * If g_close() ever gets extended to handle EINTR specially, then this place
- * and all other direct calls to close() need updating.
- */
- close (fd);
-}
-
-/* This function is called between fork() and exec() and hence must be
- * async-signal-safe (see signal-safety(7)). */
G_GNUC_UNUSED static int
close_func (void *data, int fd)
{
if (fd >= GPOINTER_TO_INT (data))
- safe_close (fd);
+ g_close (fd, NULL);
return 0;
}
@@ -1458,7 +1435,7 @@ safe_fdwalk (int (*cb)(void *data, int fd), void *data)
}
}
- safe_close (dir_fd);
+ g_close (dir_fd, NULL);
return res;
}