This is the mail archive of the
gdb-patches@sourceware.cygnus.com
mailing list for the GDB project.
[patch] procfs.c and make_cleanup_func
- To: GDB Patches <gdb-patches at sourceware dot cygnus dot com>
- Subject: [patch] procfs.c and make_cleanup_func
- From: Andrew Cagney <ac131313 at cygnus dot com>
- Date: Mon, 22 May 2000 16:19:03 +1000
- Organization: Cygnus Solutions
Yawn :-)
Andrew
Mon May 22 15:49:13 2000 Andrew Cagney <cagney@b1.cygnus.com>
* procfs.c (info_proc_cmd): Use make_cleanup_freeargv.
(proc_iterate_over_mappings): Use make_cleanup_close.
(proc_get_LDT_entry): Ditto.
(do_closedir_cleanup): New function.
(proc_update_threads): Use.
(do_destroy_procinfo_cleanup): New function.
(info_proc_cmd): Use.
Index: procfs.c
===================================================================
RCS file: /cvs/src/src/gdb/procfs.c,v
retrieving revision 1.11
diff -p -r1.11 procfs.c
*** procfs.c 2000/05/10 17:38:16 1.11
--- procfs.c 2000/05/22 06:16:13
*************** static procinfo *find_procinfo_or_die PA
*** 328,333 ****
--- 328,334 ----
static procinfo *find_procinfo PARAMS ((int pid, int tid));
static procinfo *create_procinfo PARAMS ((int pid, int tid));
static void destroy_procinfo PARAMS ((procinfo *p));
+ static void do_destroy_procinfo_cleanup (void *);
static void dead_procinfo PARAMS ((procinfo *p,
char *msg, int killp));
static int open_procinfo_files PARAMS ((procinfo *p, int which));
*************** destroy_procinfo (pi)
*** 683,688 ****
--- 684,695 ----
}
}
+ static void
+ do_destroy_procinfo_cleanup (void *pi)
+ {
+ destroy_procinfo (pi);
+ }
+
enum { NOKILL, KILL };
/*
*************** proc_iterate_over_mappings (func)
*** 2633,2639 ****
proc_error (pi, "proc_iterate_over_mappings (open)", __LINE__);
/* Make sure it gets closed again. */
! make_cleanup ((make_cleanup_func) close, (void *) map_fd);
/* Allocate space for mapping (lifetime only for this function). */
map = alloca (sizeof (struct prmap));
--- 2640,2646 ----
proc_error (pi, "proc_iterate_over_mappings (open)", __LINE__);
/* Make sure it gets closed again. */
! make_cleanup_close (map_fd);
/* Allocate space for mapping (lifetime only for this function). */
map = alloca (sizeof (struct prmap));
*************** proc_get_LDT_entry (pi, key)
*** 2744,2750 ****
return NULL;
}
/* Make sure it gets closed again! */
! old_chain = make_cleanup ((make_cleanup_func) close, (void *) fd);
/* Now 'read' thru the table, find a match and return it. */
while (read (fd, ldt_entry, sizeof (struct ssd)) == sizeof (struct ssd))
--- 2751,2757 ----
return NULL;
}
/* Make sure it gets closed again! */
! old_chain = make_cleanup_close (fd);
/* Now 'read' thru the table, find a match and return it. */
while (read (fd, ldt_entry, sizeof (struct ssd)) == sizeof (struct ssd))
*************** proc_update_threads (pi)
*** 3013,3018 ****
--- 3020,3031 ----
/*
* Unixware and Solaris 6 (and later) version
*/
+ static void
+ do_closedir_cleanup (void *dir)
+ {
+ closedir (dir);
+ }
+
int
proc_update_threads (pi)
procinfo *pi;
*************** proc_update_threads (pi)
*** 3051,3057 ****
if ((dirp = opendir (pathname)) == NULL)
proc_error (pi, "update_threads, opendir", __LINE__);
! old_chain = make_cleanup ((make_cleanup_func) closedir, dirp);
while ((direntry = readdir (dirp)) != NULL)
if (direntry->d_name[0] != '.') /* skip '.' and '..' */
{
--- 3064,3070 ----
if ((dirp = opendir (pathname)) == NULL)
proc_error (pi, "update_threads, opendir", __LINE__);
! old_chain = make_cleanup (do_closedir_cleanup, dirp);
while ((direntry = readdir (dirp)) != NULL)
if (direntry->d_name[0] != '.') /* skip '.' and '..' */
{
*************** info_proc_cmd (args, from_tty)
*** 5033,5039 ****
if ((argv = buildargv (args)) == NULL)
nomem (0);
else
! make_cleanup ((make_cleanup_func) freeargv, argv);
}
while (argv != NULL && *argv != NULL)
{
--- 5046,5052 ----
if ((argv = buildargv (args)) == NULL)
nomem (0);
else
! make_cleanup_freeargv (argv);
}
while (argv != NULL && *argv != NULL)
{
*************** info_proc_cmd (args, from_tty)
*** 5067,5073 ****
/* No. So open a procinfo for it, but
remember to close it again when finished. */
process = create_procinfo (pid, 0);
! make_cleanup ((make_cleanup_func) destroy_procinfo, process);
if (!open_procinfo_files (process, FD_CTL))
proc_error (process, "info proc, open_procinfo_files", __LINE__);
}
--- 5080,5086 ----
/* No. So open a procinfo for it, but
remember to close it again when finished. */
process = create_procinfo (pid, 0);
! make_cleanup (do_destroy_procinfo_cleanup, process);
if (!open_procinfo_files (process, FD_CTL))
proc_error (process, "info proc, open_procinfo_files", __LINE__);
}