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 по дате отправления:

Предыдущее
От: Erik Darling
Дата:
Сообщение: Re: Dynamic SQL - transition from ms to pg
Следующее
От: zach cruise
Дата:
Сообщение: Re: file system level backup