Re: Problems with MemoryContextSwitchTo ()

From: Yessica Brinkmann <brinkmann(dot)yessica(at)gmail(dot)com>
To: Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
Cc: pgsql-general <pgsql-general(at)lists(dot)postgresql(dot)org>
Subject: Re: Problems with MemoryContextSwitchTo ()
Date: 2020-09-18 04:35:06
Message-ID: CAOR+mce+eXOU6jXkKQFVB5MVWvXt9rSmah+fDayfYffOzSXFGA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-general

I already discovered the problem, it was only a counter initialization
issue, it had nothing to do with memory contexts, that part was fine. Thank
God I could already understand the problem and solve it.
Anyway thank you very much.
Best regards,
Yessica Brinkmann

El jue., 17 sept. 2020 a las 22:26, Yessica Brinkmann (<
brinkmann(dot)yessica(at)gmail(dot)com>) escribió:

> Thank you very much for the answers, and for the advice given. I will try
> to put them into practice.
> Best regards,
> Yessica Brinkmann
>
>
> El jue., 17 sept. 2020 a las 6:46, Yessica Brinkmann (<
> brinkmann(dot)yessica(at)gmail(dot)com>) escribió:
>
>>
>>
>> Good Morning. Thank you so much for the answers. Now I have to go to
>> work, but when I come back I will be looking at the answers in detail, and
>> I will answer. Unfortunately I have to work and study as well, so right now
>> I can't see the answers in detail.
>> Best regards,
>> Yessica Brinkmann.
>>
>>
>> -------- Mensaje original --------
>> Asunto: Re: Problems with MemoryContextSwitchTo ()
>> De: Pavel Stehule
>> Para: Yessica Brinkmann
>> CC: pgsql-general
>>
>>
>>
>>
>> čt 17. 9. 2020 v 6:09 odesílatel Pavel Stehule <pavel(dot)stehule(at)gmail(dot)com>
>> napsal:
>>
>>>
>>>
>>> čt 17. 9. 2020 v 3:16 odesílatel Yessica Brinkmann <
>>> brinkmann(dot)yessica(at)gmail(dot)com> napsal:
>>>
>>>> Good night,
>>>> Thank you very much for the answer.
>>>> Excuse me please just answered, I was at my job.
>>>> And yes, I get the results of the list with SPI_exec.
>>>> And I am also using SPI_finish (). But I save the results of the
>>>> previous query in the array idxcd-> varattnnames.
>>>> And in the second foreach it should print me the values that I got in
>>>> the query, since I print the values of idxcd-> varattnnames, but it is
>>>> printing null.
>>>> And I think the memory context switch is fine too, so I really don't
>>>> know why it prints null to me.
>>>> I will greatly appreciate a help please. I can't really understand why
>>>> it prints null in the second foreach, even though I already tried various
>>>> changes.
>>>>
>>>
>>> do you use Postgres with active assertions ?
>>>
>>> postgres=# show debug_assertions ;
>>> ┌──────────────────┐
>>> │ debug_assertions │
>>> ╞══════════════════╡
>>> │ on │
>>> └──────────────────┘
>>> (1 row)
>>>
>>> maybe you somewhere allocate less memory then it is necessary and some
>>> memset rewrites memory with your data. When you have a problem with memory,
>>> then you should to very carefully check a) if memory is allocated in good
>>> context, b) if memory was allocated enough (sometimes I just allocated x +
>>> 100000 for testing).
>>>
>>> Can you write a reproducer ? code that I can check at my home. Postgres
>>> is pretty complex system, and it is hard to fix some issue without access
>>> to code
>>>
>>>
>> This is some messy in your code
>>
>> MemoryContext oldContext = MemoryContextSwitchTo( outerContext );
>> MemoryContextSwitchTo( oldContext );
>>
>> Unfortunately, your code is not well structured - it is hard to read it.
>> One hint - if you find an issue - try to reduce lines of your code which is
>> possible until you reproduce this issue or until you understand this issue.
>>
>> The sequence of statements is a little bit obscure :)
>>
>> initStringInfo( &query );
>>
>> */
>> if( cols.len > 0 )
>> {
>> initStringInfo(&cols);
>> } /*IF col.len>0*/
>>
>> Instead
>>
>> foreach( cell, candidates ) /* foreach cell in candidates */
>> {
>>
>> int i;
>>
>>
>>
>> /*elog (INFO, "Ingresando a foreach");*/
>> idxcd = (IndexCandidate*)lfirst( cell );
>>
>> if (idxcd == NULL) {
>> elog( INFO, "idxcd IS NULL" );
>> continue; /* Or is that fatal enough to break instead? */
>> }
>>
>>
>> you can write
>>
>> idxcd = (IndexCandidate *) linitial(candidates);
>>
>> The problem in your example is fact so it is a mix of copy/paste
>> fragments. I wrote similar code, and almost everyone I know (when I
>> started). But it is not possible to fix this code - start from scratch. The
>> code must be readable (every time). And when I write code inside some
>> complex environment (like Postgres is), I write code in very small
>> fragments, in very small steps, and every time I try to compile, restart
>> and check the result. Then I know what line, or what statement is the
>> problem.
>>
>> Regards
>>
>> Pavel
>>
>>
>>
>>
>>
>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> Best regards,
>>>> Yessica Brinkmann
>>>>
>>>> El mié., 16 sept. 2020 a las 9:16, Pavel Stehule (<
>>>> pavel(dot)stehule(at)gmail(dot)com>) escribió:
>>>>
>>>>>
>>>>>
>>>>> st 16. 9. 2020 v 15:09 odesílatel Yessica Brinkmann <
>>>>> brinkmann(dot)yessica(at)gmail(dot)com> napsal:
>>>>>
>>>>>> Well, the fact is that I have a function called get_columnnames,
>>>>>> which in the second foreach, is printing the values of idxcd-> varattnnames
>>>>>> [i] the null value. This is the error.
>>>>>
>>>>>
>>>>> How you get this list? It is result of SPI_exec*** ?
>>>>>
>>>>> There is SPI_finish(), that cleaning a memory used by SPI interface,
>>>>> and theoretically it can clean result of previous query.
>>>>>
>>>>> Regards
>>>>>
>>>>> Pavel
>>>>>
>>>>>
>>>>>>
>>>>>> -------- Mensaje original --------
>>>>>> Asunto: Re: Problems with MemoryContextSwitchTo ()
>>>>>> De: Pavel Stehule
>>>>>> Para: Yessica Brinkmann
>>>>>> CC: pgsql-general
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> st 16. 9. 2020 v 13:32 odesílatel Yessica Brinkmann <
>>>>>> brinkmann(dot)yessica(at)gmail(dot)com> napsal:
>>>>>>
>>>>>>> Good Morning.
>>>>>>> I will greatly appreciate a help please on this subject. I actually
>>>>>>> did several tests already and tried a lot to fix it myself. But I
>>>>>>> am not able to. And I really need to know this in order to finish
>>>>>>> my university thesis. If someone can help me please.
>>>>>>> Best regards,
>>>>>>> Yessica Brinkmann
>>>>>>>
>>>>>>
>>>>>> please, can you attach your code, and can you show the error message?
>>>>>>
>>>>>> It is hard to say what is the problem from your mail?
>>>>>>
>>>>>> Regards
>>>>>>
>>>>>> Pavel
>>>>>>
>>>>>>
>>>>>>
>>>>>>>
>>>>>>> El mié., 16 sept. 2020 a las 0:42, Yessica Brinkmann (<
>>>>>>> brinkmann(dot)yessica(at)gmail(dot)com>) escribió:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> Hello.
>>>>>>>> I think several of you will already remember me. I'm the one with
>>>>>>>> the IndexAdviser topic. Only that I changed my email address.
>>>>>>>> As you may recall, I am doing my thesis on the subject of
>>>>>>>> IndexAdviser modifications.
>>>>>>>> I really appreciate the help they have given me in various
>>>>>>>> Postgresql groups.
>>>>>>>> Well, I was really nearing the end of the programming part of the
>>>>>>>> thesis, when I had a problem to be able to compile my program in a moment,
>>>>>>>> and by accident some lines of source code were moved.
>>>>>>>> And for this reason, I think I have problems again with the context
>>>>>>>> switch issue, since at some point my context switch stopped working for me,
>>>>>>>> I think because of the issue that some lines of source code were moved.
>>>>>>>> Well, the fact is that I have a function called get_columnnames,
>>>>>>>> which in the second foreach, is printing the values of idxcd-> varattnnames
>>>>>>>> [i] the null value.
>>>>>>>> This second foreach, I only do it to test if the data is really
>>>>>>>> saved well and if I can recover it properly.
>>>>>>>> And since the data is not retrieved properly, or is not saved
>>>>>>>> properly, in the following functions of my program, the value of idxcd->
>>>>>>>> varattnnames [i] continues to appear as null.
>>>>>>>> I will appreciate a lot please help, if you can tell me please why
>>>>>>>> the function prints null in the values of idxcd-> varattnnames [i], in the
>>>>>>>> second foreach, if it is due to an error in the context switch, or why it
>>>>>>>> could be .
>>>>>>>>
>>>>>>>> I send my function as an attachment.
>>>>>>>>
>>>>>>>>
>>>>>>>> Best regards,
>>>>>>>> Yessica Brinkmann.
>>>>>>>>
>>>>>>>

In response to

Responses

Browse pgsql-general by date

  From Date Subject
Next Message Pavel Stehule 2020-09-18 05:19:24 Re: Problems with MemoryContextSwitchTo ()
Previous Message Yessica Brinkmann 2020-09-18 02:26:34 Re: Problems with MemoryContextSwitchTo ()