* [PATCH] Use scoped_fd in linux-nat.c:proc_mem_file
@ 2025-03-17 20:55 Tom Tromey
2025-03-18 1:30 ` Kevin Buettner
2025-03-18 2:16 ` Simon Marchi
0 siblings, 2 replies; 4+ messages in thread
From: Tom Tromey @ 2025-03-17 20:55 UTC (permalink / raw)
To: gdb-patches; +Cc: Tom Tromey
This changes linux-nat.c:proc_mem_file to use a scoped_fd and fixes up
the users. Regression tested on x86-64 Fedora 40.
---
gdb/linux-nat.c | 29 +++++++++++++++--------------
1 file changed, 15 insertions(+), 14 deletions(-)
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index b16f9f96726..8861829f917 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -4029,24 +4029,26 @@ linux_nat_target::pid_to_exec_file (int pid)
class proc_mem_file
{
public:
- proc_mem_file (ptid_t ptid, int fd)
- : m_ptid (ptid), m_fd (fd)
+ proc_mem_file (ptid_t ptid, scoped_fd fd)
+ : m_ptid (ptid), m_fd (std::move (fd))
{
- gdb_assert (m_fd != -1);
+ gdb_assert (m_fd.get () != -1);
}
~proc_mem_file ()
{
linux_nat_debug_printf ("closing fd %d for /proc/%d/task/%ld/mem",
- m_fd, m_ptid.pid (), m_ptid.lwp ());
- close (m_fd);
+ m_fd.get (), m_ptid.pid (), m_ptid.lwp ());
}
DISABLE_COPY_AND_ASSIGN (proc_mem_file);
- int fd ()
+ proc_mem_file (proc_mem_file &&) = default;
+ proc_mem_file &operator= (proc_mem_file &&) = default;
+
+ int fd () const noexcept
{
- return m_fd;
+ return m_fd.get ();
}
private:
@@ -4055,7 +4057,7 @@ class proc_mem_file
ptid_t m_ptid;
/* The file descriptor. */
- int m_fd = -1;
+ scoped_fd m_fd;
};
/* The map between an inferior process id, and the open /proc/PID/mem
@@ -4093,9 +4095,9 @@ open_proc_mem_file (ptid_t ptid)
xsnprintf (filename, sizeof filename,
"/proc/%d/task/%ld/mem", ptid.pid (), ptid.lwp ());
- int fd = gdb_open_cloexec (filename, O_RDWR | O_LARGEFILE, 0).release ();
+ scoped_fd fd = gdb_open_cloexec (filename, O_RDWR | O_LARGEFILE, 0);
- if (fd == -1)
+ if (fd.get () == -1)
{
warning (_("opening /proc/PID/mem file for lwp %d.%ld failed: %s (%d)"),
ptid.pid (), ptid.lwp (),
@@ -4103,12 +4105,11 @@ open_proc_mem_file (ptid_t ptid)
return;
}
+ linux_nat_debug_printf ("opened fd %d for lwp %d.%ld",
+ fd.get (), ptid.pid (), ptid.lwp ());
proc_mem_file_map.emplace (std::piecewise_construct,
std::forward_as_tuple (ptid.pid ()),
- std::forward_as_tuple (ptid, fd));
-
- linux_nat_debug_printf ("opened fd %d for lwp %d.%ld",
- fd, ptid.pid (), ptid.lwp ());
+ std::forward_as_tuple (ptid, std::move (fd)));
}
/* Helper for linux_proc_xfer_memory_partial and
--
2.46.1
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] Use scoped_fd in linux-nat.c:proc_mem_file
2025-03-17 20:55 [PATCH] Use scoped_fd in linux-nat.c:proc_mem_file Tom Tromey
@ 2025-03-18 1:30 ` Kevin Buettner
2025-03-18 2:16 ` Simon Marchi
1 sibling, 0 replies; 4+ messages in thread
From: Kevin Buettner @ 2025-03-18 1:30 UTC (permalink / raw)
To: Tom Tromey; +Cc: gdb-patches
On Mon, 17 Mar 2025 14:55:29 -0600
Tom Tromey <tom@tromey.com> wrote:
> This changes linux-nat.c:proc_mem_file to use a scoped_fd and fixes up
> the users. Regression tested on x86-64 Fedora 40.
LGTM.
Approved-by: Kevin Buettner <kevinb@redhat.com>
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] Use scoped_fd in linux-nat.c:proc_mem_file
2025-03-17 20:55 [PATCH] Use scoped_fd in linux-nat.c:proc_mem_file Tom Tromey
2025-03-18 1:30 ` Kevin Buettner
@ 2025-03-18 2:16 ` Simon Marchi
2025-03-18 11:29 ` Tom Tromey
1 sibling, 1 reply; 4+ messages in thread
From: Simon Marchi @ 2025-03-18 2:16 UTC (permalink / raw)
To: Tom Tromey, gdb-patches
On 2025-03-17 16:55, Tom Tromey wrote:
> This changes linux-nat.c:proc_mem_file to use a scoped_fd and fixes up
> the users. Regression tested on x86-64 Fedora 40.
> ---
> gdb/linux-nat.c | 29 +++++++++++++++--------------
> 1 file changed, 15 insertions(+), 14 deletions(-)
>
> diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
> index b16f9f96726..8861829f917 100644
> --- a/gdb/linux-nat.c
> +++ b/gdb/linux-nat.c
> @@ -4029,24 +4029,26 @@ linux_nat_target::pid_to_exec_file (int pid)
> class proc_mem_file
> {
> public:
> - proc_mem_file (ptid_t ptid, int fd)
> - : m_ptid (ptid), m_fd (fd)
> + proc_mem_file (ptid_t ptid, scoped_fd fd)
> + : m_ptid (ptid), m_fd (std::move (fd))
> {
> - gdb_assert (m_fd != -1);
> + gdb_assert (m_fd.get () != -1);
> }
>
> ~proc_mem_file ()
> {
> linux_nat_debug_printf ("closing fd %d for /proc/%d/task/%ld/mem",
> - m_fd, m_ptid.pid (), m_ptid.lwp ());
> - close (m_fd);
> + m_fd.get (), m_ptid.pid (), m_ptid.lwp ());
> }
>
> DISABLE_COPY_AND_ASSIGN (proc_mem_file);
>
> - int fd ()
> + proc_mem_file (proc_mem_file &&) = default;
> + proc_mem_file &operator= (proc_mem_file &&) = default;
Is it really needed to add the move constructor / move assignment
operator? In fact, I would think that you could remove the
DISABLE_COPY_AND_ASSIGN, since just having the scoped_fd as a field will
do the right thing.
Otherwise, LGTM (Kevin already gave his AB).
Simon
^ permalink raw reply [flat|nested] 4+ messages in thread* Re: [PATCH] Use scoped_fd in linux-nat.c:proc_mem_file
2025-03-18 2:16 ` Simon Marchi
@ 2025-03-18 11:29 ` Tom Tromey
0 siblings, 0 replies; 4+ messages in thread
From: Tom Tromey @ 2025-03-18 11:29 UTC (permalink / raw)
To: Simon Marchi; +Cc: Tom Tromey, gdb-patches
>>>>> "Simon" == Simon Marchi <simark@simark.ca> writes:
>> + proc_mem_file (proc_mem_file &&) = default;
>> + proc_mem_file &operator= (proc_mem_file &&) = default;
Simon> Is it really needed to add the move constructor / move assignment
Simon> operator? In fact, I would think that you could remove the
Simon> DISABLE_COPY_AND_ASSIGN, since just having the scoped_fd as a field will
Simon> do the right thing.
I removed both of these.
Tom
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2025-03-18 11:30 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2025-03-17 20:55 [PATCH] Use scoped_fd in linux-nat.c:proc_mem_file Tom Tromey
2025-03-18 1:30 ` Kevin Buettner
2025-03-18 2:16 ` Simon Marchi
2025-03-18 11:29 ` Tom Tromey
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox