Re: Repaint lockup in ctlSQLBox::OnPositionStc on windows (Was: SQL-panel causes 100% CPU and lockup on windows) - Mailing list pgadmin-hackers

From J.F. Oster
Subject Re: Repaint lockup in ctlSQLBox::OnPositionStc on windows (Was: SQL-panel causes 100% CPU and lockup on windows)
Date
Msg-id 1435296136.20151004073210@mail.ru
Whole thread Raw
In response to Repaint lockup in ctlSQLBox::OnPositionStc on windows (Was: SQL-panel causes 100% CPU and lockup on windows)  (Nikolai Zhubr <n-a-zhubr@yandex.ru>)
Responses [PATCH] Fix EVT_STC_PAINTED recursion issue (Was: Re: Repaint lockup in ctlSQLBox::OnPositionStc on windows)  (Nikolai Zhubr <n-a-zhubr@yandex.ru>)
List pgadmin-hackers
Hello Nikolai,

Appreciate your research!
I suggest you to send a *.patch (git diff) attachmeht to the list
for the team members and others interested to test it in their
environments.


Sunday, October 4, 2015, 1:36:45 AM, you wrote:

NZ> Hi all,

NZ> ok, it is broken since this commit:

NZ> http://git.postgresql.org/gitweb/?p=pgadmin3.git;a=patch;h=b0ecbbca7f77c0f07cff67bba3d2bca28954a1e2

NZ> -   EVT_STC_UPDATEUI(-1,  ctlSQLBox::OnPositionStc)
NZ> +   EVT_STC_PAINTED(-1,  ctlSQLBox::OnPositionStc)

NZ> It appears that in previous version of scintilla, there existed a
NZ> SCN_POSCHANGED event, which then got obsolete and replaced by
NZ> SCN_UPDATEUI, and probably that is why the name 'OnPositionStc' was
NZ> chosen for the handler. So linking OnPositionStc() to STC_UPDATEUI was
NZ> correct and in accordance with scintilla's manual.
NZ> However the change from EVT_STC_UPDATEUI to EVT_STC_PAINTED was
NZ> incorrect. These events are not quite equivalent. EVT_STC_PAINTED has a
NZ> somewhat different purpose.

NZ> I've checked, reverting back to EVT_STC_UPDATEUI indeed fixed CPU load
NZ> and lockup issues on windows. See also
NZ> http://www.scintilla.org/ScintillaDoc.html#SCN_PAINTED
NZ> http://www.scintilla.org/ScintillaDoc.html#SCN_UPDATEUI
NZ> http://www.scintilla.org/ScintillaHistory.html
NZ> http://web.mit.edu/jhawk/mnt/spo/sandbox/punya/anjuta-1.2.3/doc/ScintillaDoc.html
NZ>   (-- this is some older document with a more detailed explanation of
NZ> SCN_UPDATEUI)

NZ> Some relevant excerptions:

NZ> "SCN_PAINTED: is to update some _other_ widgets based on a change."

NZ> "SCN_POSCHANGED: notification is deprecated as it was causing confusion.
NZ> Use SCN_UPDATEUI instead."

NZ> "SCN_UPDATEUI, SCN_CHECKBRACE:
NZ> Either the text or styling [...] common use is to check whether the
NZ> caret is next to a brace and set highlights on this brace and its
NZ> corresponding matching brace."

NZ> So for me this all sounds clear sufficiently. I'll stick with
NZ> EVT_STC_UPDATEUI and I can rebuild it myself if I have to. Whether fix
NZ> git respectively or not is up to maintainers now.


NZ> Thank you,
NZ> Nikolai

NZ> 03.10.2015 21:56, I wrote:
>> Hi all,
>>
>> Ok, I've verified that ctlSQLBox::OnPositionStc() is broken.
>>
>> If I comment the code for highlighting in it (that is, almost all of its
>> body), the problem goes away.
>>
>> I've found quite some problems observed with it and attempted to fix
>> previously, like e.g. the one from 2011:
>> ---------------
>> + // Ensure we don't recurse through any paint handlers
>> + Freeze();
>> UpdateLineNumber();
>> + Thaw();
>>
>> // Clear all highlighting
>> ---------------
>> That was most probably only a partial fix, and it was subsequently
>> reverted.
>>
>> I'd like to also note that 'OnPositionStc' name is pretty much
>> misleading. If it was named 'OnPaintedStc' it would be more consistent
>> and more hinting where the problem is. I'm aware that renaming alone
>> don't usually fix bugs, but it might help humans better catch ones.
>>
>> Ok, anyway, I've got no real fix for now, but I'm going on.
>>
>>
>> Thank you,
>> Nikolai
>>
>>
....

--
Best regards,
 J.F.



pgadmin-hackers by date:

Previous
From: Nikolai Zhubr
Date:
Subject: Repaint lockup in ctlSQLBox::OnPositionStc on windows (Was: SQL-panel causes 100% CPU and lockup on windows)
Next
From: "J.F. Oster"
Date:
Subject: Re: [Patch] Windows installer: allow manually setting WIXDIR as appropriate.