Re: cvs: php4 /ext/pgsql pgsql.c
| From: | Thies C. Arntzen | Date: | Thu, 15 Feb 2001 11:58:02 +0000 |
| Subject: | Re: cvs: php4 /ext/pgsql pgsql.c | ||
| References: | 1 2 3 4 5 | Groups: | php.cvs |
| Request: | Send a blank email to php-cvs+get-4039@lists.php.net to get a copy of this message | ||
On Thu, Feb 15, 2001 at 01:47:46PM +0200, Zeev Suraski wrote:
> At 13:01 15/2/2001, Thies C. Arntzen wrote:
> >On Thu, Feb 15, 2001 at 04:17:06AM +0200, Zeev Suraski wrote:
> > > This patch won't always work (it may cause the link not to be closed when
> > > it's supposed to). I committed a different patch to the CVS - can you
> >
> > under what circumstances?
>
> Well, if you have an open link, and then you reopen the same link, then the
> original code would fail. Why?
>
> pgsql_connect(); // default_link is -1, so no ref-- is
> done. ref is 1 after it, and link is set to n (e.g. 2)
> pgsql_connect(); // default_link is 2, ref is 1, so ref--
> brings it to 0, deletes it, and only afterwards theres ref++ which brings
> it to 1, but it's already too late
>
> with the original patch:
> pgsql_connect(); // default_link is -1, so no ref-- is
> done. ref is 1 after it, and link is set to n (e.g. 2)
> pgsql_connect(); // default link is 2, ref is 1. with the
> patch, no ref-- is done, and then there's a ref++ - which brings ref to
> 2. this refcount is wrong...
>
> with my patch:
> pgsql_connect(); // default_link is -1, so no ref-- is
> done. ref is 1 after it, and link is set to n (e.g. 2)
> pgsql_connect(); // default_link is 2, ref++ brings it the
> refcount to 2, ref-- brings it back to 1. all is well...
ok - got you.
tc