delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin-developers/2000/12/22/17:43:32

Mailing-List: contact cygwin-developers-help AT sourceware DOT cygnus DOT com; run by ezmlm
List-Subscribe: <mailto:cygwin-developers-subscribe AT sources DOT redhat DOT com>
List-Archive: <http://sources.redhat.com/ml/cygwin-developers/>
List-Post: <mailto:cygwin-developers AT sources DOT redhat DOT com>
List-Help: <mailto:cygwin-developers-help AT sources DOT redhat DOT com>, <http://sources.redhat.com/ml/#faqs>
Sender: cygwin-developers-owner AT sources DOT redhat DOT com
Delivered-To: mailing list cygwin-developers AT sources DOT redhat DOT com
Date: Fri, 22 Dec 2000 17:42:51 -0500
From: Christopher Faylor <cgf AT redhat DOT com>
To: cygwin-developers AT cygwin DOT com
Subject: [cobbler AT stanford DOT edu: Re: Serial blocking read]
Message-ID: <20001222174251.G12837@redhat.com>
Mail-Followup-To: cygwin-developers AT cygwin DOT com
Mime-Version: 1.0
User-Agent: Mutt/1.3.11i

----- Forwarded message from Dan Morris <cobbler AT stanford DOT edu> -----

From: Dan Morris <cobbler AT stanford DOT edu>
To: Christopher Faylor <cgf AT redhat DOT com>
Subject: Re: Serial blocking read
Date: Fri, 22 Dec 2000 14:39:16 -0800 (PST)
Reply-To: dmorris AT alumni DOT brown DOT edu
In-Reply-To: <20001222171618 DOT B12837 AT redhat DOT com>

I'll do it right now...

-Dan

On Fri, 22 Dec 2000, Christopher Faylor wrote:

> Well, I've checked this in.  I would appreciate if someone could actually
> verify that my patch does the right thing.  I'm not set up to verify the
> serial code anymore.
> 
> cgf
> 
> On Sun, Dec 17, 2000 at 07:07:01PM -0500, Christopher Faylor wrote:
> >Nevermind.  I understand now.  I was confused by the fact that this code
> >should not have been triggered unless the 'ready_for_read' had indicated that
> >there was stuff to read.
> >
> >Does the below patch work for you?  It avoids code duplication.
> >
> >cgf
> >
> >On Fri, Dec 15, 2000 at 09:58:42PM -0500, Christopher Faylor wrote:
> >>Ok.  Can you provide a little bit of an explanation on why this
> >>solves your problem.  It doesn't make any sense to me that it would
> >>by reading the code.
> >>
> >>cgf
> >>
> >>On Fri, Dec 15, 2000 at 06:53:31PM -0800, Dan Morris wrote:
> >>>My bad... I totally spaced on even giving a filename.  Here's a better diff :
> >>>
> >>>--- fhandler_serial.cc-orig     Fri Dec 15 18:45:26 2000
> >>>+++ fhandler_serial.cc  Fri Dec 15 00:28:04 2000
> >>>@@ -119,6 +119,13 @@ fhandler_serial::raw_read (void *ptr, si
> >>>            }
> >>>        }
> >>>
> >>>+      if (overlapped_armed) {
> >>>+          if (!ClearCommError (get_handle (), &ev, &st))
> >>>+           goto err;
> >>>+         else if (st.cbInQue)
> >>>+           inq = st.cbInQue;
> >>>+      }
> >>>+
> >>>       overlapped_armed = 0;
> >>>       ResetEvent (io_status.hEvent);
> >>>       if (inq > ulen)
> >>>
> >>>-Dan
> >>>
> >>>On Fri, 15 Dec 2000, Christopher Faylor wrote:
> >>>
> >>>> I think this is coming from fhandler_serial.cc but I don't know for
> >>>> sure.  Can you provide a unified diff?  A complete unified diff will
> >>>> show the filename and give a little more context.
> >>>> 
> >>>> The contributing link on http://cygwin.com should give you some pointers on how
> >>>> to do this and how to provide a patch.
> >>>> 
> >>>> cgf
> >>>> 
> >>>> On Fri, Dec 15, 2000 at 05:38:09PM -0800, Dan Morris wrote:
> >>>> >Has anyone else had problems with serial port reads blocking even when
> >>>> >O_NONBLOCK is passed to _read in the 1.1.6-1 DLL?
> >>>> >
> >>>> >I noticed that my reads were appropriately non-blocking most of the time, but
> >>>> >blocked whenever "overlapped_armed" was set, because in this case raw_read
> >>>> >never finds out how many bytes are in the serial port's buffer.  This patch
> >>>> >seems to fix the problem for me :
> >>>> >
> >>>> >121a122,128
> >>>> >>       if (overlapped_armed) {
> >>>> >>           if (!ClearCommError (get_handle (), &ev, &st))
> >>>> >> 	          goto err;
> >>>> >>           else if (st.cbInQue)
> >>>> >>             inq = st.cbInQue;
> >>>> >>       }
> >>>> >> 
> >>>> >
> >>>> >If anyone else has found a better solution to this problem, let me know...
> >>>> >otherwise perhaps this patch will fix things.
> >
> >Sun Dec 17 19:03:52 2000  Christopher Faylor <cgf AT cygnus DOT com>
> >
> >	* fhandler_serial.cc (fhandler_serial::raw_read): Always find number of 
> >	bytes ready to be read whether overlapped_armed or not.
> >
> >Index: fhandler_serial.cc
> >===================================================================
> >RCS file: /cvs/uberbaum/winsup/cygwin/fhandler_serial.cc,v
> >retrieving revision 1.9
> >diff -u -p -r1.9 fhandler_serial.cc
> >--- fhandler_serial.cc	2000/09/08 02:56:54	1.9
> >+++ fhandler_serial.cc	2000/12/18 00:07:05
> >@@ -79,15 +79,16 @@ fhandler_serial::raw_read (void *ptr, si
> > 			// if vmin > ulen then things won't work right.
> > 	  overlapped_armed = -1;
> > 	}
> >-      if (!overlapped_armed)
> >+
> >+      if (!ClearCommError (get_handle (), &ev, &st))
> >+	goto err;
> >+      else if (ev)
> >+	termios_printf ("error detected %x", ev);
> >+      else if (st.cbInQue)
> >+	inq = st.cbInQue;
> >+      else if (!overlapped_armed)
> > 	{
> >-	  if (!ClearCommError (get_handle (), &ev, &st))
> >-	    goto err;
> >-	  else if (ev)
> >-	    termios_printf ("error detected %x", ev);
> >-	  else if (st.cbInQue)
> >-	    inq = st.cbInQue;
> >-	  else if ((size_t)tot >= minchars)
> >+	  if ((size_t)tot >= minchars)
> > 	    break;
> > 	  else if (WaitCommEvent (get_handle (), &ev, &io_status))
> > 	    {
> 

Dan Morris
http://techhouse.brown.edu/dmorris

Tiqit Computers
http://www.tiqit.com

----- End forwarded message -----

-- 
cgf AT cygnus DOT com                        Red Hat, Inc.
http://sources.redhat.com/            http://www.redhat.com/

- Raw text -


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