Re: Why does SPI_connect change the memory context?

Поиск
Список
Период
Сортировка
От Tom Lane
Тема Re: Why does SPI_connect change the memory context?
Дата
Msg-id 41589.1559168709@sss.pgh.pa.us
обсуждение исходный текст
Ответ на Why does SPI_connect change the memory context?  (Jeff Davis <pgsql@j-davis.com>)
Список pgsql-hackers
Jeff Davis <pgsql@j-davis.com> writes:
> SPI_connect() changes the memory context to a newly-created one, and
> then SPI_finish() restores it. That seems a bit dangerous because the
> caller might not be expecting it. Is there a reason it doesn't just
> change to the new memory context as-needed?

Because the expectation is that palloc inside the SPI procedure will
allocate in a procedure-specific context.  If the caller isn't expecting
that, they haven't read the documentation, specifically

https://www.postgresql.org/docs/devel/spi-memory.html

which says

  <para>
   <function>SPI_connect</function> creates a new memory context and
   makes it current.  <function>SPI_finish</function> restores the
   previous current memory context and destroys the context created by
   <function>SPI_connect</function>.  These actions ensure that
   transient memory allocations made inside your C function are
   reclaimed at C function exit, avoiding memory leakage.
  </para>

            regards, tom lane



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

Предыдущее
От: Tom Lane
Дата:
Сообщение: Re: Rearranging ALTER TABLE to avoid multi-operations bugs
Следующее
От: Tom Lane
Дата:
Сообщение: Re: coverage increase for worker_spi