delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2020/03/12/11:09:15

X-Recipient: archive-cygwin AT delorie DOT com
X-Original-To: cygwin AT cygwin DOT com
Delivered-To: cygwin AT cygwin DOT com
Date: Thu, 12 Mar 2020 16:08:33 +0100
From: Corinna Vinschen <corinna-cygwin AT cygwin DOT com>
To: cygwin AT cygwin DOT com
Subject: Re: Setting termios VMIN > 0 and VTIME > 0 on non blocking file
Message-ID: <20200312150833.GQ4042@calimero.vinschen.de>
Mail-Followup-To: cygwin AT cygwin DOT com
References: <9e4c6428-59de-df07-9e33-44ba95d5497f AT gmail DOT com>
<20200312114041 DOT GJ4042 AT calimero DOT vinschen DOT de>
<365dd437-7553-eb4e-3253-aba3bab74895 AT gmail DOT com>
<20200312144445 DOT GP4042 AT calimero DOT vinschen DOT de>
MIME-Version: 1.0
In-Reply-To: <20200312144445.GP4042@calimero.vinschen.de>
X-Provags-ID: V03:K1:3nl2k0X7REWWfRkyoBVVIc3xeNeVHaQdu/MkZ22Dma9V5EKkkoJ
FF3yv/sYPY6t2hCJm7bv1CQUhwhws80uaG61GAp40DmLEbZN7BL4zla8DJoQWE/98HVSsLG
JwGU98gQMLDBwUgbdmYcTUsKRf6+//4CbepG/6f4JjoNPz3VAY8mnKbE8Nsb4Vj0NT11nsR
lvrKK+kUyzzaALXZz5k5g==
X-UI-Out-Filterresults: notjunk:1;V03:K0:60F8ho/S8S8=:vdpOj2fM1cI2sV0I+e4JV7
v/qzg9QurvxdfdFfo92wcnVZ90YseF2lwWsN0OS/rXCyYMEYjicbDgZqJZK6M82fVivNjyCNR
7QWtRBNckozDVIHY0dzCpxb0kW4Emxd1jK0vIriHyXIlafgxzU6aMHZMaYL+6VaVAtggX4AhV
y38WhZYV5yfAnUCkeIeXBikkujd5rszNZjebK7hyRJYohE57ilufJV+9uouLEcNiD+t6HHEM+
dw4vaDngM1yxyNOf3w53GENS/IQktbzSHJe3ZKSapLK6LKad2/dTwsMAQHDev5PGimKfKi5hK
mGbfh51gRLQWRV6cYCG7H2P7HBKiOBHipD1qbT8HYYbcrtCRXXmm8MJalIVA8lRxnexh6TWle
NNK8RQt1kIlZl6h590++M5mlv9YJZLdNIdTNA4NxFDcN6ZFB/B0HPSJRCrABTDpSDeOQFSefk
7w90coPxbjIJ+Vtf5C8L3Zkmlicf00+5L7BzKDXnKmY5ncPeTpYsaGVDp0QVWKy9ZPjb65rxb
QveKCmL/AtCJ3l8g2Se6/njIkjxFPs1UdANkyNJZhYl+tLl0W72hMHWpkAz3dDdsVJ1gEQ8to
YhGE/L1YialjyU/8Z46YIE8ysHgjGsG8kdNBLTEE7dOMx4ooD4DlLJckFi8I7W2VjzgUfF/cY
sOTWrN92eemEq+lx57hIZO9jElfTXT28iST/BBmJpvVNjjaEhCLF0kS/y9UFmqjaqOEeIrtov
YAp86iRcmvy4ckmWDKVYkSEaZWaeL5ClbhfqgWWx+d2+3jcKY/GTPmOnLZQauMlwqQ/XbK2xV
ChmGqPS5/C2Lx2iWi6a83btL4mDj0EcAdjNvxF5y+O+uEHmgbVq7qa2+sR0nL2kd+3pY77U
X-Spam-Status: No, score=-124.4 required=5.0 tests=BAYES_00, GARBLED_BODY,
GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, GOOD_FROM_CORINNA_CYGWIN,
RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,
SPF_NONE autolearn=ham autolearn_force=no version=3.4.2
X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on
server2.sourceware.org
X-BeenThere: cygwin AT cygwin DOT com
X-Mailman-Version: 2.1.29
List-Id: Cygwin mailing list <cygwin.cygwin.com>
List-Unsubscribe: <http://cygwin.com/mailman/options/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=unsubscribe>
List-Archive: <http://cygwin.com/pipermail/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-request AT cygwin DOT com?subject=help>
List-Subscribe: <http://cygwin.com/mailman/listinfo/cygwin>,
<mailto:cygwin-request AT cygwin DOT com?subject=subscribe>
Reply-To: cygwin AT cygwin DOT com
Errors-To: cygwin-bounces AT cygwin DOT com
Sender: "Cygwin" <cygwin-bounces AT cygwin DOT com>

--===============0385289546164522454==
Content-Type: multipart/signed; micalg=pgp-sha256;
	protocol="application/pgp-signature"; boundary="worL9B4ITIAQZ1FS"
Content-Disposition: inline


--worL9B4ITIAQZ1FS
Content-Type: text/plain; charset=utf-8
Content-Disposition: inline
Content-Transfer-Encoding: quoted-printable

On Mar 12 15:44, Corinna Vinschen wrote:
> On Mar 12 15:20, =C3=85ke Rehnman via Cygwin wrote:
> > I think the problem is if the number of bytes requested are more than w=
hat
>=20
> To clarify: number of bytes =3D=3D VMIN?
>=20
> > is in the buffer it is going to overlap the read function (because of V=
TIME)
> > and immediately after that CancelIO is called. Contrary to what is ment=
ioned
> > in the source code I think CancelIO is actually discarding data...
>=20
> So far we didn't have that experience.  CancelIO is usually safe
> in this regard.
>=20
> > =C2=A0 /* Use CancelIo rather than PurgeComm (PURGE_RXABORT) since
> > =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 PurgeComm apparently discar=
ds in-flight bytes while CancelIo
> > =C2=A0=C2=A0=C2=A0 =C2=A0=C2=A0=C2=A0=C2=A0 only stops the overlapped I=
O routine. */
> >=20
> >=20
> > My suggestion is the following patch:
> >=20
> > diff --git a/winsup/cygwin/fhandler_serial.cc
> > b/winsup/cygwin/fhandler_serial.cc
> > index 69e5768f6..afa8871bf 100644
> > --- a/winsup/cygwin/fhandler_serial.cc
> > +++ b/winsup/cygwin/fhandler_serial.cc
> > @@ -898,7 +898,11 @@ fhandler_serial::tcsetattr (int action, const stru=
ct
> > termios *t)
> > =C2=A0=C2=A0 {
> > =C2=A0=C2=A0=C2=A0=C2=A0 memset (&to, 0, sizeof (to));
> >=20
> > -=C2=A0=C2=A0=C2=A0 if ((vmin_ > 0) && (vtime_ =3D=3D 0))
> > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 if (is_nonblocking())
> > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 {
> > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=
=A0=C2=A0=C2=A0 to.ReadIntervalTimeout =3D MAXDWORD;
> > +=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0=C2=A0 }
> > +=C2=A0=C2=A0=C2=A0 else if ((vmin_ > 0) && (vtime_ =3D=3D 0))
>=20
> What if you switch to !O_NONBLOCK after calling tcsetattr?  The
> setting of ReadIntervalTimeout would be lost then.
>=20
> Either we have to repeat calling SetCommTimeouts every time
> we switch mode, or we have to do the above setting temporary
> every time we call ReadFile in non blocking mode.

What about this:

diff --git a/winsup/cygwin/fhandler_serial.cc b/winsup/cygwin/fhandler_seri=
al.cc
--- a/winsup/cygwin/fhandler_serial.cc
+++ b/winsup/cygwin/fhandler_serial.cc
@@ -68,6 +68,16 @@ fhandler_serial::raw_read (void *ptr, size_t& ulen)
 	goto err;
       else if (ev)
 	termios_printf ("error detected %x", ev);
+      else if (is_nonblocking ())
+	{
+	  if (!st.cbInQue)
+	    {
+	      tot =3D -1;
+	      set_errno (EAGAIN);
+	      goto out;
+	    }
+	  inq =3D st.cbInQue;
+	}
       else if (st.cbInQue && !vtime_)
 	inq =3D st.cbInQue;
       else if (!is_nonblocking () && !overlapped_armed)


Corinna

--=20
Corinna Vinschen
Cygwin Maintainer

--worL9B4ITIAQZ1FS
Content-Type: application/pgp-signature; name="signature.asc"

-----BEGIN PGP SIGNATURE-----

iQIzBAEBCAAdFiEEoVYPmneWZnwT6kwF9TYGna5ET6AFAl5qUHEACgkQ9TYGna5E
T6DXeBAAj9Fry9Zf3MXUtyGGy8v54eyrH2iYq3Z1WxauE2Nzz00wVj3wrEDdmnC1
zjE+WI/x/YuEvI5nZVhcgVMzR4srhqi0QMWwV30ATN8cFTclWAzGy8L0d4PaHTcJ
e5xP1c6Hn3DyzgOjmBy8Vhm0z+GXiTfPp5dk96ShC4ycrUjbbu6AFcs/7SF+BH9v
qaFHQKrxorErp0GdQF2OU/BZHPC7tUrAF0SMvU/arTY1knFsNFG4E7ublMttVfwU
Fp1UEfI/u2+yMNQh4GjOc87qusLzPxsbXuTqbWGhQm2q8cHKC3X7suxxNkAmLrXb
2oVsoqqhImv0Ze/frZOP70Q8TQlTOwwwa9vgqJrZvUyec1gRlaM7HFKmxVy0scxt
+OuQc8GGqfZOgFKeGCoIytH5Uv2N/B3/PXR95oABwhoECs1z8ThHZ1jI9EQe/HMn
GXZe5dwZOISJOkV1IweHy45P4kOML1SR9bGpaboiszY/M+cTld17V+Lyh1wMWA6N
fBIesLeNld6Col/D6FEgaciueVQ58Z/S+anKM16EvN88zt1Is2xhlDtkvsa5A3Q3
ip8vSnXfbgXOndr/dO4vOEt3CR+heX+imAqp1O4Q1iKsa1KvoX1DWAh1m71TMZO7
IQjhQnoW84zqSinQeuJCAun4hFk8hAscPLddshfq7UqVGsdAByY=
=Nkc/
-----END PGP SIGNATURE-----

--worL9B4ITIAQZ1FS--

--===============0385289546164522454==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

--
Problem reports:       http://cygwin.com/problems.html
FAQ:                   http://cygwin.com/faq/
Documentation:         http://cygwin.com/docs.html
Unsubscribe info:      http://cygwin.com/ml/#unsubscribe-simple

--===============0385289546164522454==--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019