Remove do_closedir_cleanup
This removes both copies of do_closedir_cleanup in favor of a new unique_ptr specialization. Tested by the buildbot, though I'm not sure that these code paths are exercised there. ChangeLog 2018-05-04 Tom Tromey <tom@tromey.com> * nto-procfs.c (do_closedir_cleanup): Remove. (procfs_pidlist): Use gdb_dir_up. * procfs.c (do_closedir_cleanup): Remove. (proc_update_threads): Use gdb_dir_up. * common/filestuff.h (struct gdb_dir_deleter): New. (gdb_dir_up): New typedef.
This commit is contained in:
parent
862d101ada
commit
f0b3976bdc
4 changed files with 31 additions and 32 deletions
|
@ -1,3 +1,12 @@
|
||||||
|
2018-05-04 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
|
* nto-procfs.c (do_closedir_cleanup): Remove.
|
||||||
|
(procfs_pidlist): Use gdb_dir_up.
|
||||||
|
* procfs.c (do_closedir_cleanup): Remove.
|
||||||
|
(proc_update_threads): Use gdb_dir_up.
|
||||||
|
* common/filestuff.h (struct gdb_dir_deleter): New.
|
||||||
|
(gdb_dir_up): New typedef.
|
||||||
|
|
||||||
2018-05-04 Tom Tromey <tom@tromey.com>
|
2018-05-04 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* ada-lang.c (print_mention_exception): Use std::string.
|
* ada-lang.c (print_mention_exception): Use std::string.
|
||||||
|
|
|
@ -19,6 +19,8 @@
|
||||||
#ifndef FILESTUFF_H
|
#ifndef FILESTUFF_H
|
||||||
#define FILESTUFF_H
|
#define FILESTUFF_H
|
||||||
|
|
||||||
|
#include <dirent.h>
|
||||||
|
|
||||||
/* Note all the file descriptors which are open when this is called.
|
/* Note all the file descriptors which are open when this is called.
|
||||||
These file descriptors will not be closed by close_most_fds. */
|
These file descriptors will not be closed by close_most_fds. */
|
||||||
|
|
||||||
|
@ -84,4 +86,16 @@ extern int gdb_pipe_cloexec (int filedes[2]);
|
||||||
|
|
||||||
extern struct cleanup *make_cleanup_close (int fd);
|
extern struct cleanup *make_cleanup_close (int fd);
|
||||||
|
|
||||||
|
struct gdb_dir_deleter
|
||||||
|
{
|
||||||
|
void operator() (DIR *dir) const
|
||||||
|
{
|
||||||
|
closedir (dir);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
/* A unique pointer to a DIR. */
|
||||||
|
|
||||||
|
typedef std::unique_ptr<DIR, gdb_dir_deleter> gdb_dir_up;
|
||||||
|
|
||||||
#endif /* FILESTUFF_H */
|
#endif /* FILESTUFF_H */
|
||||||
|
|
|
@ -423,16 +423,9 @@ nto_procfs_target::update_thread_list ()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
do_closedir_cleanup (void *dir)
|
|
||||||
{
|
|
||||||
closedir (dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
procfs_pidlist (const char *args, int from_tty)
|
procfs_pidlist (const char *args, int from_tty)
|
||||||
{
|
{
|
||||||
DIR *dp = NULL;
|
|
||||||
struct dirent *dirp = NULL;
|
struct dirent *dirp = NULL;
|
||||||
char buf[PATH_MAX];
|
char buf[PATH_MAX];
|
||||||
procfs_info *pidinfo = NULL;
|
procfs_info *pidinfo = NULL;
|
||||||
|
@ -441,13 +434,12 @@ procfs_pidlist (const char *args, int from_tty)
|
||||||
pid_t num_threads = 0;
|
pid_t num_threads = 0;
|
||||||
pid_t pid;
|
pid_t pid;
|
||||||
char name[512];
|
char name[512];
|
||||||
struct cleanup *cleanups;
|
|
||||||
char procfs_dir[PATH_MAX];
|
char procfs_dir[PATH_MAX];
|
||||||
|
|
||||||
snprintf (procfs_dir, sizeof (procfs_dir), "%s%s",
|
snprintf (procfs_dir, sizeof (procfs_dir), "%s%s",
|
||||||
(nodestr != NULL) ? nodestr : "", "/proc");
|
(nodestr != NULL) ? nodestr : "", "/proc");
|
||||||
|
|
||||||
dp = opendir (procfs_dir);
|
gdb_dir_up dp (opendir (procfs_dir));
|
||||||
if (dp == NULL)
|
if (dp == NULL)
|
||||||
{
|
{
|
||||||
fprintf_unfiltered (gdb_stderr, "failed to opendir \"%s\" - %d (%s)",
|
fprintf_unfiltered (gdb_stderr, "failed to opendir \"%s\" - %d (%s)",
|
||||||
|
@ -455,22 +447,17 @@ procfs_pidlist (const char *args, int from_tty)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
cleanups = make_cleanup (do_closedir_cleanup, dp);
|
|
||||||
|
|
||||||
/* Start scan at first pid. */
|
/* Start scan at first pid. */
|
||||||
rewinddir (dp);
|
rewinddir (dp.get ());
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
/* Get the right pid and procfs path for the pid. */
|
/* Get the right pid and procfs path for the pid. */
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
dirp = readdir (dp);
|
dirp = readdir (dp.get ());
|
||||||
if (dirp == NULL)
|
if (dirp == NULL)
|
||||||
{
|
return;
|
||||||
do_cleanups (cleanups);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
snprintf (buf, sizeof (buf), "%s%s/%s/as",
|
snprintf (buf, sizeof (buf), "%s%s/%s/as",
|
||||||
(nodestr != NULL) ? nodestr : "",
|
(nodestr != NULL) ? nodestr : "",
|
||||||
"/proc", dirp->d_name);
|
"/proc", dirp->d_name);
|
||||||
|
@ -521,9 +508,6 @@ procfs_pidlist (const char *args, int from_tty)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
while (dirp != NULL);
|
while (dirp != NULL);
|
||||||
|
|
||||||
do_cleanups (cleanups);
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
|
|
16
gdb/procfs.c
16
gdb/procfs.c
|
@ -1722,20 +1722,13 @@ proc_delete_dead_threads (procinfo *parent, procinfo *thread, void *ignore)
|
||||||
return 0; /* keep iterating */
|
return 0; /* keep iterating */
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
do_closedir_cleanup (void *dir)
|
|
||||||
{
|
|
||||||
closedir ((DIR *) dir);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int
|
static int
|
||||||
proc_update_threads (procinfo *pi)
|
proc_update_threads (procinfo *pi)
|
||||||
{
|
{
|
||||||
char pathname[MAX_PROC_NAME_SIZE + 16];
|
char pathname[MAX_PROC_NAME_SIZE + 16];
|
||||||
struct dirent *direntry;
|
struct dirent *direntry;
|
||||||
struct cleanup *old_chain = NULL;
|
|
||||||
procinfo *thread;
|
procinfo *thread;
|
||||||
DIR *dirp;
|
gdb_dir_up dirp;
|
||||||
int lwpid;
|
int lwpid;
|
||||||
|
|
||||||
/* We should never have to apply this operation to any procinfo
|
/* We should never have to apply this operation to any procinfo
|
||||||
|
@ -1756,11 +1749,11 @@ proc_update_threads (procinfo *pi)
|
||||||
|
|
||||||
strcpy (pathname, pi->pathname);
|
strcpy (pathname, pi->pathname);
|
||||||
strcat (pathname, "/lwp");
|
strcat (pathname, "/lwp");
|
||||||
if ((dirp = opendir (pathname)) == NULL)
|
dirp.reset (opendir (pathname));
|
||||||
|
if (dirp == NULL)
|
||||||
proc_error (pi, "update_threads, opendir", __LINE__);
|
proc_error (pi, "update_threads, opendir", __LINE__);
|
||||||
|
|
||||||
old_chain = make_cleanup (do_closedir_cleanup, dirp);
|
while ((direntry = readdir (dirp.get ())) != NULL)
|
||||||
while ((direntry = readdir (dirp)) != NULL)
|
|
||||||
if (direntry->d_name[0] != '.') /* skip '.' and '..' */
|
if (direntry->d_name[0] != '.') /* skip '.' and '..' */
|
||||||
{
|
{
|
||||||
lwpid = atoi (&direntry->d_name[0]);
|
lwpid = atoi (&direntry->d_name[0]);
|
||||||
|
@ -1768,7 +1761,6 @@ proc_update_threads (procinfo *pi)
|
||||||
proc_error (pi, "update_threads, create_procinfo", __LINE__);
|
proc_error (pi, "update_threads, create_procinfo", __LINE__);
|
||||||
}
|
}
|
||||||
pi->threads_valid = 1;
|
pi->threads_valid = 1;
|
||||||
do_cleanups (old_chain);
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue