Re: C function :: SECOND PROBLEM SOLVED :: SPI_finish releases memory!

Поиск
Список
Период
Сортировка
От M. François Benoît-Marand
Тема Re: C function :: SECOND PROBLEM SOLVED :: SPI_finish releases memory!
Дата
Msg-id 1216913781.4888a1759cffb@webmail.univ-poitiers.fr
обсуждение исходный текст
Ответ на C function working with input/ouput tables failed !  ("M. François Benoît-Marand"<francois.benoit-marand@univ-poitiers.fr>)
Список pgsql-general
The second problem is now solved !

> Second problem:
> When I try to give the output table, only the first line is correctly
> returned.
> I have introduced an analyse stage which reveals that the problem comes from
> the loss of the information in my matrix data structure when the function is
> called for the second time.
>
> My matrix data structure is the following :
>
> typedef struct puissance_matrix
>  {
>    int nl;        //number of lines
>    int nc;        //number of columns
>    int** data;    //2D integer data
>  } puissance_m;
>
> I use palloc to allocate space to the element called data.
>
> At the second call of the function, the element funcctx->user_fctx (that I
> use
> to store my matrix data structure) references the good memory block.
> Moreover,
> the nl and nc element references the good memory block too. But, in the block
> pointed by nl and nc, the values stored have changed ! I don’t understand
> why.
> I try to use malloc or pgport_palloc instead of palloc: it doesn’t work !
>
> Example:
>
> At the first call of my function:
>
> 1: BLOCK ANALYSE
> 1: pointer value of pm [11784980]
> 1: pointer value of pm->nc [11785068] stores (4)
> 1: pointer value of pm->nl [11785064] stores (4)
> 1: pointer value of pm->data [] and stored value () ::
>   [19517544] (0) ::
>   [19517548] (1) ::
>   [19517552] (0) ::
>   [19517556] (2) ::
>   [19517568] (0) ::
>   [19517572] (0) ::
>   [19517576] (1) ::
>   [19517580] (0) ::
> etc…
>
> At the second call of my function:
>
> 1: pointer value of pm [11784980]
> 1: pointer value of pm->nc [11785068] stores (0)
> 1: pointer value of pm->nl [11785064] stores (0)
>
> If you are interested to read the code:
> Look at the function called: puissance_table
> At the line containing     : DBG("PROBLEMATIK at step %i\n" , call_cntr);
> --------------------

In fact, SPI_finish releases memory allocated by palloc !!!!!!
Then, by using SPI_palloc insted of palloc I solved my second problem !!!!!


I think it would be interesting to add this in the documentation of the SPI !

Thnaks for your reading.


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

Предыдущее
От: "David Spadea"
Дата:
Сообщение: Re: php + postgresql
Следующее
От: Kevin Neufeld
Дата:
Сообщение: Re: contrib catalogs