pgsql: Don't use OidIsValid to check the return value of

Started by Nonameabout 17 years ago3 messages
#1Noname
heikki@postgresql.org

Log Message:
-----------
Don't use OidIsValid to check the return value of transformGenericOptions,
because transformGenericOptions returns an array, not an Oid. I'm not
sure if this fixes the crashes seen in buildfarm, but it should be fixed
anyway.

Modified Files:
--------------
pgsql/src/backend/commands:
foreigncmds.c (r1.1 -> r1.2)
(http://anoncvs.postgresql.org/cvsweb.cgi/pgsql/src/backend/commands/foreigncmds.c?r1=1.1&r2=1.2)

#2Tom Lane
tgl@sss.pgh.pa.us
In reply to: Noname (#1)
Re: [COMMITTERS] pgsql: Don't use OidIsValid to check the return value of

heikki@postgresql.org (Heikki Linnakangas) writes:

Don't use OidIsValid to check the return value of transformGenericOptions,
because transformGenericOptions returns an array, not an Oid. I'm not
sure if this fixes the crashes seen in buildfarm, but it should be fixed
anyway.

Definitely a necessary fix, but you missed what I think is actually
causing the crashes:

if (PointerIsValid(DatumGetPointer(datum)))
! repl_val[Anum_pg_foreign_data_wrapper_fdwoptions - 1] = ObjectIdGetDatum(datum);

should be

if (PointerIsValid(DatumGetPointer(datum)))
! repl_val[Anum_pg_foreign_data_wrapper_fdwoptions - 1] = datum;

ObjectIdGetDatum probably is zeroing the high-order half of the pointer
datum.

I committed this along with some other cosmetic fixes.

Somebody still needs to fix the MSVC build scripts...

regards, tom lane

#3Heikki Linnakangas
heikki.linnakangas@enterprisedb.com
In reply to: Tom Lane (#2)
Re: [COMMITTERS] pgsql: Don't use OidIsValid to check the return value of

Tom Lane wrote:

Definitely a necessary fix, but you missed what I think is actually
causing the crashes:

if (PointerIsValid(DatumGetPointer(datum)))
! repl_val[Anum_pg_foreign_data_wrapper_fdwoptions - 1] = ObjectIdGetDatum(datum);

should be

if (PointerIsValid(DatumGetPointer(datum)))
! repl_val[Anum_pg_foreign_data_wrapper_fdwoptions - 1] = datum;

ObjectIdGetDatum probably is zeroing the high-order half of the pointer
datum.

Doh, how could I miss that, on the very next line :-)

I committed this along with some other cosmetic fixes.

Thanks.

--
Heikki Linnakangas
EnterpriseDB http://www.enterprisedb.com