Обсуждение: Re: [BUGS] BUG #8167: false EINVAL -22 for opening a file

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

Re: [BUGS] BUG #8167: false EINVAL -22 for opening a file

От
Tom Lane
Дата:
nelson@monkey.org writes:
> RhodiumToad asked me to report "pg in PathNameOpenFile / mdopen is
> assuming that errno is preserved over calls to free() which is not
> required by the spec"

Good catch!  The proximate problem appears to be this bit in
PathNameOpenFile:
vfdP->fd = BasicOpenFile(fileName, fileFlags, fileMode);
if (vfdP->fd < 0){    FreeVfd(file);    free(fnamecopy);    return -1;}

The other code layers in this stack seem to be careful about preserving
errno where needed, but this bit isn't.

I've not really reviewed fd.c for other instances of the same bug,
but I do see some places where there are DO_DB(...) debug calls in
places where errno had better not change.  I'm thinking maybe we should
improve that macro to include save/restore errno.  Or else rip that
stuff out entirely --- I've sure never built this code with FDDEBUG
set, has anyone else?
        regards, tom lane



Re: [BUGS] BUG #8167: false EINVAL -22 for opening a file

От
Robert Haas
Дата:
On Thu, May 16, 2013 at 11:55 AM, Tom Lane <tgl@sss.pgh.pa.us> wrote:
> I've not really reviewed fd.c for other instances of the same bug,
> but I do see some places where there are DO_DB(...) debug calls in
> places where errno had better not change.  I'm thinking maybe we should
> improve that macro to include save/restore errno.  Or else rip that
> stuff out entirely --- I've sure never built this code with FDDEBUG
> set, has anyone else?

Not me.

-- 
Robert Haas
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company