Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.80) (envelope-from ) id 1ZijT7-00007B-0G for pgadmin-hackers@arkaria.postgresql.org; Sun, 04 Oct 2015 13:36:49 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84) (envelope-from ) id 1ZijT6-00021z-HB for pgadmin-hackers@arkaria.postgresql.org; Sun, 04 Oct 2015 13:36:48 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZijSs-0001XF-Kt for pgadmin-hackers@postgresql.org; Sun, 04 Oct 2015 13:36:34 +0000 Received: from forward16o.cmail.yandex.net ([37.9.109.213]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84) (envelope-from ) id 1ZijSo-0005sl-U3 for pgadmin-hackers@postgresql.org; Sun, 04 Oct 2015 13:36:34 +0000 Received: from smtp2o.mail.yandex.net (smtp2o.mail.yandex.net [37.140.190.27]) by forward16o.cmail.yandex.net (Yandex) with ESMTP id 6A76421105 for ; Sun, 4 Oct 2015 16:36:28 +0300 (MSK) Received: from smtp2o.mail.yandex.net (localhost [127.0.0.1]) by smtp2o.mail.yandex.net (Yandex) with ESMTP id 3F7AB36A1227 for ; Sun, 4 Oct 2015 16:36:28 +0300 (MSK) Received: by smtp2o.mail.yandex.net (nwsmtp/Yandex) with ESMTPSA id L81yFiU3Z7-aR6afbCX; Sun, 4 Oct 2015 16:36:27 +0300 (using TLSv1 with cipher ECDHE-RSA-AES128-SHA (128/128 bits)) (Client certificate not present) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=yandex.ru; s=mail; t=1443965787; bh=K7jsvkNaQHGKZtMBRUP/0IYrHOHM9CJi0VltTZq7Wfk=; h=Message-ID:Date:From:User-Agent:MIME-Version:To:Subject: References:In-Reply-To:Content-Type:Content-Transfer-Encoding; b=KwlLC8LG1DqiAoQh2t7cTS+/mQwpnFlAKLx1t5Om7fnvOAVB8DmnNlqpOsk+LJPOP G/ev+b+2fc+N5OWu5UnSN+P+kj3dhEje9S9A4Iu9L8bVgxgaHdpEarcCyaSFacpZuZ OiuXygIqps0J1TWf1FATI4yajgeLhNONFp7VA0tY= Authentication-Results: smtp2o.mail.yandex.net; dkim=pass header.i=@yandex.ru X-Yandex-ForeignMX: US Message-ID: <56112F2E.5040107@yandex.ru> Date: Sun, 04 Oct 2015 16:52:46 +0300 From: Nikolai Zhubr User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.5) Gecko/20091204 Thunderbird/3.0 MIME-Version: 1.0 To: pgadmin-hackers Subject: [PATCH] Fix EVT_STC_PAINTED recursion issue (Was: Re: Repaint lockup in ctlSQLBox::OnPositionStc on windows) References: <5606F2C8.9010001@yandex.ru> <56070F5A.3070102@yandex.ru> <1674144739.20150927082019@mail.ru> <5607CF32.7030707@yandex.ru> <5609BC61.8030503@yandex.ru> <560ADB34.6050700@yandex.ru> <561024FB.9000805@yandex.ru> <5610587D.5020605@yandex.ru> <1435296136.20151004073210@mail.ru> In-Reply-To: <1435296136.20151004073210@mail.ru> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit X-Pg-Spam-Score: -2.7 (--) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgadmin-hackers Precedence: bulk Sender: pgadmin-hackers-owner@postgresql.org Hi all, 04.10.2015 7:32, J.F. Oster wrote: > 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. Well, technically I can, but it will be ugly, see below. Problem is, the change of STC_UPDATEUI to STC_PAINTED in pgadmin was not intended to break pgadmin on Windows, but rather to fix it on Mac. This change was obviously incorrect, but simply reverting it would probably cause regressions for Mac users. As I personally don't use Mac, I can not develop and test a proper fix for it. Therefore, all what I can suggest myself is this: --- ctlSQLBox.cpp.orig Fri Sep 25 13:20:24 2015 +++ ctlSQLBox.cpp Sun Oct 04 15:47:17 2015 @@ -40,7 +40,11 @@ EVT_MENU(MNU_FIND, ctlSQLBox::OnSearchReplace) EVT_MENU(MNU_AUTOCOMPLETE, ctlSQLBox::OnAutoComplete) EVT_KILL_FOCUS(ctlSQLBox::OnKillFocus) +#ifdef __WXMAC__ EVT_STC_PAINTED(-1, ctlSQLBox::OnPositionStc) +#else + EVT_STC_UPDATEUI(-1, ctlSQLBox::OnPositionStc) +#endif EVT_STC_MARGINCLICK(-1, ctlSQLBox::OnMarginClick) EVT_END_PROCESS(-1, ctlSQLBox::OnEndProcess) END_EVENT_TABLE() Thank you, Nikolai > 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 >>> >>> > .... > -- Sent via pgadmin-hackers mailing list (pgadmin-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgadmin-hackers