Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kXraT-0007Nz-Di for pgsql-hackers@arkaria.postgresql.org; Wed, 28 Oct 2020 19:58:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1kXraR-0004NU-GZ for pgsql-hackers@arkaria.postgresql.org; Wed, 28 Oct 2020 19:58:23 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kXraR-0004NM-9u for pgsql-hackers@lists.postgresql.org; Wed, 28 Oct 2020 19:58:23 +0000 Received: from wout4-smtp.messagingengine.com ([64.147.123.20]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1kXraK-0004yf-QD for pgsql-hackers@lists.postgresql.org; Wed, 28 Oct 2020 19:58:22 +0000 Received: from compute2.internal (compute2.nyi.internal [10.202.2.42]) by mailout.west.internal (Postfix) with ESMTP id E035ED62; Wed, 28 Oct 2020 15:58:13 -0400 (EDT) Received: from mailfrontend1 ([10.202.2.162]) by compute2.internal (MEProxy); Wed, 28 Oct 2020 15:58:14 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:from:in-reply-to :message-id:mime-version:subject:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm1; bh=63LVbRwIeQg5tY5hc c6nN7zCFgOFg3wqQd7IjHrq0uU=; b=rAp4WUDWcCddXUMco9CwSYenkXnkqdiNN 9wj0VOgf9xq8/EBn3v5px8bCng8m2zJVtb5Jy0y35AhcueQjwFVhkP/4B2pNCxLV oZba+Q1jPFEUkIp8G++LWZYcbC2lDVyN5yxm37AQFQ4JGYcsurh0NuXrzElwksqR x3TYuBAivcM0gPjsnBYFQcbeDUevCWTt3g558U5Jz96FYaTP+kcFrFhjtw5kwyLx G/hmFxllat89DTbFZmRq7sr/VFtVtHWC3FkQkHPmWXdI7pV0csOTP+HvIa54ArXl eX5yFAtSQy+WHrRWsHFKAAYKQSIM9YOl/FHwB1WJ0o12qF7o7XtGg== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedujedrledugdduvdelucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmne cujfgurhepfffhvffukfggtggujggfsehttdertddtredvnecuhfhrohhmpeetlhhvrghr ohcujfgvrhhrvghrrgcuoegrlhhvhhgvrhhrvgesrghlvhhhrdhnohdqihhprdhorhhgqe enucggtffrrghtthgvrhhnpeevgfelveegueejgefhgeetgefhgeehieefheehleetteei udeiiefhgffgheffteenucfkphepudeltddrleehrdduledrudegkeenucevlhhushhtvg hrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpegrlhhvhhgvrhhrvgesrghl vhhhrdhnohdqihhprdhorhhg X-ME-Proxy: Received: from perhan.alvh.no-ip.org (unknown [190.95.19.148]) by mail.messagingengine.com (Postfix) with ESMTPA id A08CB3280063; Wed, 28 Oct 2020 15:58:12 -0400 (EDT) Received: by perhan.alvh.no-ip.org (Postfix, from userid 1000) id 8AF282A064B; Wed, 28 Oct 2020 16:58:10 -0300 (-03) Date: Wed, 28 Oct 2020 16:58:10 -0300 From: Alvaro Herrera To: Konstantin Knizhnik Cc: PostgreSQL Hackers , "Andrey M. Borodin" , =?utf-8?B?0JTQsNC90LjQuNC7INCX0LDRhdC70YvRgdGC0L7Qsg==?= Subject: Re: libpq compression Message-ID: <20201028195810.GA6732@alvherre.pgsql> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <22446ba0-058d-624a-a679-edc0215a56c8@postgrespro.ru> User-Agent: Mutt/1.10.1 (2018-07-13) List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk On 2020-Oct-26, Konstantin Knizhnik wrote: > + while (bufptr < bufend || zpq_buffered(PqStream) != 0) /* has more data to flush or unsent data in internal compression buffer */ > { > - int r; > - > - r = secure_write(MyProcPort, bufptr, bufend - bufptr); > - > - if (r <= 0) > + int r; > + size_t processed = 0; > + size_t available = bufend - bufptr; > + r = PqStream > + ? zpq_write(PqStream, bufptr, available, &processed) > + : secure_write(MyProcPort, bufptr, available); > + bufptr += processed; > + PqSendStart += processed; This bit is surprising to me. I thought the whole zpq_write() thing should be hidden inside secure_write, so internal_flush would continue to call just secure_write; and it is that routine's responsibility to call zpq_write or be_tls_write or secure_raw_write etc according to compile-time options and socket state.