Search Postgresql Archives

Re: Do I have to free storage in a UDF if I raise an error?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 1/6/2014 10:00 AM, Pfuntner, John wrote:
If I've done a palloc() to get storage inside a user-defined function and raise an error using ereport(),  should I be using pfree() 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(), do I have a memory leak?

No, this is why it is important to use palloc and malloc.

-Steve



--
Sent via pgsql-general mailing list (pgsql-general@xxxxxxxxxxxxxx)
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgsql-general




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Postgresql Jobs]     [Postgresql Admin]     [Postgresql Performance]     [Linux Clusters]     [PHP Home]     [PHP on Windows]     [Kernel Newbies]     [PHP Classes]     [PHP Books]     [PHP Databases]     [Postgresql & PHP]     [Yosemite]
  Powered by Linux