Re: PostgreSQL / PHP Overrun Error - Mailing list pgsql-php
| From | Mike Rogers |
|---|---|
| Subject | Re: PostgreSQL / PHP Overrun Error |
| Date | |
| Msg-id | OE58mXL3zF6GEe6zLuy00002aed@hotmail.com Whole thread Raw |
| In response to | Re: PostgreSQL / PHP Overrun Error ("Brent R. Matzelle" <bmatzelle@yahoo.com>) |
| List | pgsql-php |
As you can see here, I commented out the efree line and instead just set it
to none. This means that PHP is simply freeing it in it's own memory-leak
cleanup. It means the logs gets:
pgsql.c(170) : Freeing 0x085D3AAC (62 bytes),
script=/path/to/index.html
Last leak repeated 7 times
instead of segmentation faulting.
If you efree() something which was not emalloc()'ed nor estrdup()'ed you
will probably get a segmentation fault. That's my understanding of efree()-
I'd say that's probably be what's going on... So by me just NULL'ing
PGG(last_notice) instead of efree'ing it, it means that should it not have
been emalloc'd or estrdup'd then it won't crash miserably... And it's not.
static void
_notice_handler(void *arg, const char *message)
{
PGLS_FETCH();
if (! PGG(ignore_notices)) {
php_log_err((char *) message);
if (PGG(last_notice) != NULL) {
/* efree(PGG(last_notice)); */
PGG(last_notice) = NULL;
}
PGG(last_notice) = estrdup(message);
}
}
So yes- I wish there was a real solution rather than relying on php's
internal cleanup mechanism... But I will happily start from here as a point
to move from... I will send patches once i get the problem completely
fixed- in a better solution than this trial.
--
Mike
----- Original Message -----
From: "Brent R. Matzelle" <bmatzelle@yahoo.com>
To: "Mike Rogers" <temp6453@hotmail.com>; <pgsql-php@postgresql.org>
Sent: Wednesday, September 26, 2001 5:05 PM
Subject: Re: [PHP] PostgreSQL / PHP Overrun Error
> --- Mike Rogers <temp6453@hotmail.com> wrote:
> > I am currently running PHP-4.0.6 (with the memory leak patch
> > as posted to
> > correct a problem in this release [it is on the download
> > page]).
> > The script that causes them mostly "includes" other scripts to
> > do it's job.
> > The home page uses some of the scripts that it uses and I've
> > seen the errors
> > there too. There errors seem infrequent, and just occur
> > randomly... Maybe
> > every 2-10 minutes on a reasonably high-volume server. The
> > commands that
> > seem to be getting executed by the script [it's not my
> > script]:
> > pg_exec
> > pg_errormessage
> > pg_fetch_array
> > pg_errormessage
> > pg_freeresult
> > pg_fieldname
> > pg_fieldtype
> > pg_fieldsize
> > pg_cmdtuples
> > pg_numrows
> > pg_numfields
>
> All of those functions are okay to use except that I would
> commment out the calls to pg_freeresult(). I have seen various
> older bug reports that have noted that this function can be
> troublesome. Plus, PHP frees this memory automatically whether
> you call this function or not. I rarely use this function,
> unless I am making queries that return enormous amounts of data,
> and even then I really do not require it.
>
> Last note, the PHP debug information that you gathered seemed to
> be cleaning up the pg_notice memory if I was not mistaken. I
> would not be surprised if this function was called by
> pg_freeresult.
>
> Brent
>
> __________________________________________________
> Do You Yahoo!?
> Get email alerts & NEW webcam video instant messaging with Yahoo!
Messenger. http://im.yahoo.com
>
> ---------------------------(end of broadcast)---------------------------
> TIP 6: Have you searched our list archives?
>
> http://archives.postgresql.org
>