Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtp (Exim 4.84_2) (envelope-from ) id 1dzNrA-0002UM-Eo for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Oct 2017 14:07:32 +0000 Received: from localhost ([127.0.0.1] helo=postgresql.org) by malur.postgresql.org with smtp (Exim 4.84_2) (envelope-from ) id 1dzNrA-0007lO-1f for pgsql-hackers@arkaria.postgresql.org; Tue, 03 Oct 2017 14:07:32 +0000 Received: from makus.postgresql.org ([2001:4800:1501:1::229]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dzNr9-0007ky-Bx for pgsql-hackers@postgresql.org; Tue, 03 Oct 2017 14:07:31 +0000 Received: from smtprelay0123.b.hostedemail.com ([64.98.42.123] helo=smtprelay.b.hostedemail.com) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.84_2) (envelope-from ) id 1dzNqy-0000Vn-81 for pgsql-hackers@postgresql.org; Tue, 03 Oct 2017 14:07:30 +0000 Received: from filter.hostedemail.com (10.5.19.248.rfc1918.com [10.5.19.248]) by smtprelay04.b.hostedemail.com (Postfix) with ESMTP id 263B77B611; Tue, 3 Oct 2017 14:07:19 +0000 (UTC) X-Session-Marker: 616C76686572726540616C76682E6E6F2D69702E6F7267 X-Spam-Summary: 50,0,0,,d41d8cd98f00b204,alvherre@alvh.no-ip.org,:::::::::,RULES_HIT:41:355:379:599:966:967:973:981:988:989:1260:1277:1311:1312:1313:1314:1345:1359:1437:1515:1516:1518:1519:1534:1541:1593:1594:1595:1596:1711:1730:1747:1777:1792:2194:2196:2198:2199:2200:2201:2393:2525:2560:2563:2682:2685:2828:2859:2933:2937:2939:2942:2945:2947:2951:2954:3022:3138:3139:3140:3141:3142:3354:3865:3866:3867:3868:3870:3871:3872:3874:3934:3936:3938:3941:3944:3947:3950:3953:3956:3959:4303:4385:4605:5007:6119:6261:7903:8660:8957:9025:9121:10004:10400:10848:11232:11658:11914:12114:12663:13069:13138:13148:13153:13228:13230:13231:13311:13357:13439:13894:13895:14721:14764:21080:21326:21627:30012:30045:30054:30056:30070,0,RBL:none,CacheIP:none,Bayesian:0.5,0.5,0.5,Netcheck:none,DomainCache:0,MSF:not bulk,SPF:,MSBL:0,DNSBL:none,Custom_rules:0:0:0,LFtime:4,LUA_SUMMARY:none X-HE-Tag: note21_5cebfdd3e2b5a X-Filterd-Recvd-Size: 2938 Received: from alvin.alvh.no-ip.org (unknown [109.131.231.247]) (Authenticated sender: alvherre@alvh.no-ip.org) by omf02.b.hostedemail.com (Postfix) with ESMTPA; Tue, 3 Oct 2017 14:07:18 +0000 (UTC) Received: by alvin.alvh.no-ip.org (Postfix, from userid 1000) id 02235798; Tue, 3 Oct 2017 16:07:14 +0200 (CEST) Date: Tue, 3 Oct 2017 16:07:14 +0200 From: Alvaro Herrera To: Tom Lane Cc: Andres Freund , Andreas Seltenreich , pgsql-hackers@postgresql.org, Michael Paquier Subject: Re: [sqlsmith] stuck spinlock in pg_stat_get_wal_receiver after OOM Message-ID: <20171003140714.ozcduitwplj3ropj@alvherre.pgsql> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1409.1506981260@sss.pgh.pa.us> User-Agent: NeoMutt/20170306-137-4415bd-dirty (1.8.0) List-Archive: List-Help: List-ID: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-Mailing-List: pgsql-hackers Precedence: bulk Sender: pgsql-hackers-owner@postgresql.org Fixed the pstrdup problem by replacing with strlcpy() to stack-allocated variables (rather than palloc + memcpy as proposed in Michael's patch). About the other problems: Tom Lane wrote: > I took a quick look through walreceiver.c, and there are a couple of > obvious problems of the same ilk in WalReceiverMain, which is doing this: > > walrcv->lastMsgSendTime = walrcv->lastMsgReceiptTime = walrcv->latestWalEndTime = GetCurrentTimestamp(); > > (ie, a potential kernel call) inside a spinlock. But there seems no > real problem with just collecting the timestamp before we enter that > critical section. Done that way. > I also don't especially like the fact that just above there it reaches > elog(PANIC) with the lock still held, though at least that's a case that > should never happen. Fixed by releasing spinlock just before elog. > Further down, it's doing a pfree() inside the spinlock, apparently > for no other reason than to save one "if (tmp_conninfo)". Fixed. > I don't especially like the Asserts inside spinlocks, either. Personally, > I think if those conditions are worth testing then they're worth testing > for real (in production). Variables that are manipulated by multiple > processes are way more likely to assume unexpected states than local > variables. I didn't change these. It doesn't look to me that these asserts are worth very much as production code. > I'm also rather befuddled by the fact that this code sets and clears > walrcv->latch outside the critical sections. If that field is used > by any other process, surely that's completely unsafe. If it isn't, > why is it being kept in shared memory? I think the latch is only used locally. Seems that it was only put in shmem to avoid a separate variable ... -- Álvaro Herrera https://www.2ndQuadrant.com/ PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services -- Sent via pgsql-hackers mailing list (pgsql-hackers@postgresql.org) To make changes to your subscription: http://www.postgresql.org/mailpref/pgsql-hackers