From Thomas Vogels <tov@ece.cmu.edu>  Thu Feb 15 04:38:15 2001
From: Thomas Vogels <tov@ece.cmu.edu> (Thomas Vogels)
Date: 14 Feb 2001 23:38:15 -0500
Subject: [Rd] who frees dd and xd in X11_Open?
Message-ID: <pxae7opnm0.fsf@infiniti.ece.cmu.edu>


Hi, I'm not sure this is a bug in the code, the comment or my
thinking.  So first try goes to r-devel...  I find the following
comment in X11_Open () (src/unix/X11/devX11.c):

/* if we have to bail out with "error", then must free(dd) and free(xd) */

A couple lines down, there is:

    if (!strncmp(dsp, "png::", 5)) {
	FILE *fp;
#ifndef HAVE_PNG
	error("No png support in this version of R");
#endif
	if (!(fp = R_fopen(R_ExpandFileName(dsp+5), "w")))
	    error("could not open PNG file `%s'", dsp+6);
    ...

So what does the comment imply?  If error jumps out to the toplevel
without giving X11DeviceDriver a chance to free dd and xd, then this
should be:

    if (!strncmp(dsp, "png::", 5)) {
	FILE *fp;
#ifndef HAVE_PNG
        free (xd);
        free (dd);
	error("No png support in this version of R");
#endif
	if (!(fp = R_fopen(R_ExpandFileName(dsp+5), "w"))) {
            free (xd);
            free (dd);
	    error("could not open PNG file `%s'", dsp+6);
        }

There are a couple more error()s without free()s.  The memory leak
isn't big, I'd still appreciate it if you clarify who should do the free().
Thanks,
  -tom



-- 
mailto:tov@ece.cmu.edu (Tom Vogels)   Tel: (412) 268-6638   FAX: -3204

-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._


[Rd] who frees dd and xd in X11_Open?
Thomas Vogels