Do I have to free storage in a UDF if I raise an error?
| От | Pfuntner, John |
|---|---|
| Тема | Do I have to free storage in a UDF if I raise an error? |
| Дата | |
| Msg-id | F50C41C1AF491549BDAC07CBE3CAA4B01378B8CD@SUSHDC8002.TD.TERADATA.COM обсуждение исходный текст |
| Ответы |
Re: Do I have to free storage in a UDF if I raise an error?
|
| Список | pgsql-general |
If I've done a palloc() to get storage inside a user-defined function and raise an error using ereport(), should I be
usingpfree() to release the storage before the ereport()?
Consider this example in C:
PG_FUNCTION_INFO_V1(Example);
Datum
Example(PG_FUNCTION_ARGS) {
VarChar* pstring=PG_GETARG_VARCHAR_P(0);
VarChar* ret=NULL;
int len = VARSIZE(pstring) - VARHDRSZ;
char *string=palloc(len+1);
memcpy(string, VARDATA(pstring), len);
string[len] = '\0';
/* ... */
if ( /* some bad condition */ ) {
ereport(ERROR, (errcode(ERRCODE_DATA_EXCEPTION), errmsg("some bad condition occurred!")));
}
/* ... */
pfree(string);
if (ret == NULL)
PG_RETURN_NULL();
else
PG_RETURN_VARCHAR_P(ret);
}
I only have the pfree() at the end before the return if there is no error. If I fail to call pfree() before ereport(),
doI have a memory leak?
В списке pgsql-general по дате отправления: