pltcl broken on tcl8.5 ?
Buildfarm bobcat is broken running the pltcl regression tests - see
http://www.pgbuildfarm.org/cgi-bin/show_log.pl?nm=bobcat&dt=2008-06-15%2022:43:01
and I have reproduced this on Fedora 9 myself. This distro has Tcl 8.5.1.
I'm not sure exactly what has broken here, but I'm guessing it is
something in the Tcl libs that has changed somehow. Has anyone been able
to get the tests to pass using Tcl 8.5.1? Or does anyone have an idea
about why pltcl_elog is sometimes failing to output its message?
cheers
andrew
Andrew Dunstan <andrew@dunslane.net> writes:
Buildfarm bobcat is broken running the pltcl regression tests - see
http://www.pgbuildfarm.org/cgi-bin/show_log.pl?nm=bobcat&dt=2008-06-15%2022:43:01
and I have reproduced this on Fedora 9 myself. This distro has Tcl 8.5.1.
I missed 8.5.1, but I can say that pltcl passes its regression test
with both 8.5.0 and 8.5.2 on HPUX. However, that's with a
non-thread-enabled tcl, which might be relevant.
I've had problems in the past with pltcl on multilib Fedora ... are
you by any chance using x86_64, and if so do you have tcldevel.i386
installed as well? I've found that we tend to pick the "wrong" tcl
if given a choice. Although I think the symptom there tends to be
build failure not just a couple of weird test discrepancies.
regards, tom lane
Tom Lane wrote:
Andrew Dunstan <andrew@dunslane.net> writes:
Buildfarm bobcat is broken running the pltcl regression tests - see
http://www.pgbuildfarm.org/cgi-bin/show_log.pl?nm=bobcat&dt=2008-06-15%2022:43:01
and I have reproduced this on Fedora 9 myself. This distro has Tcl 8.5.1.I missed 8.5.1, but I can say that pltcl passes its regression test
with both 8.5.0 and 8.5.2 on HPUX. However, that's with a
non-thread-enabled tcl, which might be relevant.I've had problems in the past with pltcl on multilib Fedora ... are
you by any chance using x86_64, and if so do you have tcldevel.i386
installed as well? I've found that we tend to pick the "wrong" tcl
if given a choice. Although I think the symptom there tends to be
build failure not just a couple of weird test discrepancies.
No. I have a pure i386 environment (in a VM).
I'll dig a bit more tomorrow.
cheers
andrew
Hi,
On Sun, 2008-06-15 at 20:54 -0400, Andrew Dunstan wrote:
Has anyone been able to get the tests to pass using Tcl 8.5.1?
All regression tests passed on Fedora-9 while building new RPM sets.
Regards,
--
Devrim GÜNDÜZ , RHCE
PostgreSQL Replication, Consulting, Custom Development, 24x7 support
Managed Services, Shared and Dedicated Hosting
Co-Authors: plPHP, ODBCng - http://www.commandprompt.com/
Devrim GÜNDÜZ wrote:
Hi,
On Sun, 2008-06-15 at 20:54 -0400, Andrew Dunstan wrote:
Has anyone been able to get the tests to pass using Tcl 8.5.1?
All regression tests passed on Fedora-9 while building new RPM sets.
Do you specifically run the PL regression tests?
cheers
andrew
Andrew Dunstan wrote:
Devrim GÜNDÜZ wrote:
Hi,
On Sun, 2008-06-15 at 20:54 -0400, Andrew Dunstan wrote:
Has anyone been able to get the tests to pass using Tcl 8.5.1?
All regression tests passed on Fedora-9 while building new RPM sets.
Do you specifically run the PL regression tests?
As confirmed by discussion on IRC, the RPM build process only runs "make
check" which doesn't run the PL regression tests.
cheers
andrew
Andrew Dunstan <andrew@dunslane.net> writes:
Buildfarm bobcat is broken running the pltcl regression tests - see
http://www.pgbuildfarm.org/cgi-bin/show_log.pl?nm=bobcat&dt=2008-06-15%2022:43:01
and I have reproduced this on Fedora 9 myself. This distro has Tcl 8.5.1.
Hoo, nasty. Tcl_GetVar() is resetting interp->result. Not sure why
we didn't see this before ... maybe it didn't use to? Anyway, the
order of execution in
ereport(ERROR,
(errmsg("%s", interp->result),
errcontext("%s\nin PL/Tcl function \"%s\"",
UTF_U2E(Tcl_GetVar(interp, "errorInfo",
TCL_GLOBAL_ONLY)),
prodesc->user_proname)));
is machine-dependent, which explains why I didn't see it on HPPA.
regards, tom lane
Tom Lane wrote:
Andrew Dunstan <andrew@dunslane.net> writes:
Buildfarm bobcat is broken running the pltcl regression tests - see
http://www.pgbuildfarm.org/cgi-bin/show_log.pl?nm=bobcat&dt=2008-06-15%2022:43:01and I have reproduced this on Fedora 9 myself. This distro has Tcl 8.5.1.
Hoo, nasty. Tcl_GetVar() is resetting interp->result. Not sure why
we didn't see this before ... maybe it didn't use to? Anyway, the
order of execution inereport(ERROR,
(errmsg("%s", interp->result),
errcontext("%s\nin PL/Tcl function \"%s\"",
UTF_U2E(Tcl_GetVar(interp, "errorInfo",
TCL_GLOBAL_ONLY)),
prodesc->user_proname)));is machine-dependent, which explains why I didn't see it on HPPA.
According to the manual page that's only supposed to happen if the
TCL_LEAVE_ERR_MSG flag is used:
TCL_LEAVE_ERR_MSG
If an error is returned and this bit is set in flags, then an
error message will be left in the interpreter�s result, where it
can be retrieved with Tcl_GetObjResult or Tcl_GetStringResult.
If this flag bit isn�t set then no error message is left and the
interpreter�s result will not be modified.
So this looks like a bug. I guess we could work around it by saving out
interp->result first. As you say, nasty.
cheers
andrew
Andrew Dunstan <andrew@dunslane.net> writes:
Tom Lane wrote:
Hoo, nasty. Tcl_GetVar() is resetting interp->result.
According to the manual page that's only supposed to happen if the
TCL_LEAVE_ERR_MSG flag is used:
TCL_LEAVE_ERR_MSG
If an error is returned and this bit is set in flags, then an
error message will be left in the interpreter�s result, where it
can be retrieved with Tcl_GetObjResult or Tcl_GetStringResult.
If this flag bit isn�t set then no error message is left and the
interpreter�s result will not be modified.
But notice that they specify using Tcl_GetObjResult or
Tcl_GetStringResult, rather than touching the field directly.
I suspect they'd regard this as not-a-bug. In any case I found
the responsible code: Tcl_SaveInterpState/Tcl_RestoreInterpState
restore the result as an object not a string. I see no such
routines in 8.4.
As I look at this, I think it's got even more problems: it's assuming
that interp->result is in the database encoding, which seems a pretty
faulty assumption considering it came from Tcl. pltcl_elog converts
to the database encoding before calling Tcl_SetResult, which makes
that path all right as long as Tcl doesn't do anything with the string
before exiting, but I don't particularly trust that assumption either.
All in all this is really quite broken.
regards, tom lane
Tom Lane wrote:
Andrew Dunstan <andrew@dunslane.net> writes:
Tom Lane wrote:
Hoo, nasty. Tcl_GetVar() is resetting interp->result.
According to the manual page that's only supposed to happen if the
TCL_LEAVE_ERR_MSG flag is used:TCL_LEAVE_ERR_MSG
If an error is returned and this bit is set in flags, then an
error message will be left in the interpreter�s result, where it
can be retrieved with Tcl_GetObjResult or Tcl_GetStringResult.
If this flag bit isn�t set then no error message is left and the
interpreter�s result will not be modified.But notice that they specify using Tcl_GetObjResult or
Tcl_GetStringResult, rather than touching the field directly.
I suspect they'd regard this as not-a-bug. In any case I found
the responsible code: Tcl_SaveInterpState/Tcl_RestoreInterpState
restore the result as an object not a string. I see no such
routines in 8.4.As I look at this, I think it's got even more problems: it's assuming
that interp->result is in the database encoding, which seems a pretty
faulty assumption considering it came from Tcl. pltcl_elog converts
to the database encoding before calling Tcl_SetResult, which makes
that path all right as long as Tcl doesn't do anything with the string
before exiting, but I don't particularly trust that assumption either.
All in all this is really quite broken.
Yes. At any rate, your fix has worked on my test bed.
cheers
andrew