Обсуждение: Re: [COMMITTERS] pgsql: Don't use OidIsValid to check the return value of

Поиск
Список
Период
Сортировка

Re: [COMMITTERS] pgsql: Don't use OidIsValid to check the return value of

От
Tom Lane
Дата:
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


Re: [COMMITTERS] pgsql: Don't use OidIsValid to check the return value of

От
Heikki Linnakangas
Дата:
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