This is the mail archive of the
gdb-patches@sourceware.cygnus.com
mailing list for the GDB project.
Re: [patch] procfs.c and make_cleanup_func
- To: Andrew Cagney <ac131313 at cygnus dot com>
- Subject: Re: [patch] procfs.c and make_cleanup_func
- From: Michael Snyder <msnyder at cygnus dot com>
- Date: Mon, 22 May 2000 09:38:13 -0700
- CC: GDB Patches <gdb-patches at sourceware dot cygnus dot com>
- Organization: Cygnus Solutions
- References: <3928D157.9EB3E84E@cygnus.com>
- Reply-To: msnyder at cygnus dot com
Andrew Cagney wrote:
>
> Yawn :-)
Looks OK to me.
>
> 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__);
> }