Need to check palloc() return value?

Поиск
Список
Период
Сортировка
От Michael Fuhr
Тема Need to check palloc() return value?
Дата
Msg-id 20050216031355.GA14421@winnie.fuhr.org
обсуждение исходный текст
Ответы Re: Need to check palloc() return value?
Список pgsql-general
Do user-defined functions need to check palloc()'s return value,
or does return guarantee success?  The latter appears to be the
case:

Datum
palloctest(PG_FUNCTION_ARGS)
{
    int32  nbytes = PG_GETARG_INT32(0);
    char  *p;
    ereport(INFO, (errmsg("calling palloc")));
    p = palloc(nbytes);
    ereport(INFO, (errmsg("palloc returned")));
    PG_RETURN_INT32(nbytes);
}

SELECT palloctest(1000);
INFO:  calling palloc
INFO:  palloc returned
 palloctest
------------
       1000
(1 row)

\set VERBOSITY verbose
SELECT palloctest(1000000000);
INFO:  00000: calling palloc
LOCATION:  palloctest, palloctest.c:34
ERROR:  53200: out of memory
DETAIL:  Failed on request of size 1000000000.
LOCATION:  AllocSetAlloc, aset.c:505

Control doesn't return to the user-defined function if the allocation
fails, so checking palloc()'s return value seems superfluous.  Is it
safe to rely on this behavior?

--
Michael Fuhr
http://www.fuhr.org/~mfuhr/

В списке pgsql-general по дате отправления:

Предыдущее
От: "Andrew Hall"
Дата:
Сообщение: Re: Lost rows/data corruption?
Следующее
От: "Greg Sabino Mullane"
Дата:
Сообщение: Re: random record from small set