[prev in list] [next in list] [prev in thread] [next in thread] 

List:       linux-usb
Subject:    Re: g_serial hangs on write when the cable is disconnected
From:       Greg KH <greg () kroah ! com>
Date:       2015-08-05 16:29:23
Message-ID: 20150805162923.GC21870 () kroah ! com
[Download RAW message or body]

On Wed, Aug 05, 2015 at 04:40:21PM +0100, Laszlo Papp wrote:
> On Wed, Aug 5, 2015 at 3:56 PM, Greg KH <greg@kroah.com> wrote:
> > On Wed, Aug 05, 2015 at 11:05:56AM +0100, Laszlo Papp wrote:
> >> Hi,
> >>
> >> The code below reproduces the issue. The code is intentionally kept
> >> small, so it deliberately does not have error checking, et al.
> >>
> >> Now, my concern is that it blocks for the write operation if the cable
> >> is disconnected. This is not inline with the /dev/ttyS* operation, for
> >> instance. They would not block if I disconnected the serial cable.
> >>
> >> Is this a bug or feature? :-) If it turns out to be a feature, is it
> >> better to use O_NONBLOCK if one does not want to use pthreads, etc?
> >>
> >> #include <sys/types.h>
> >> #include <sys/stat.h>
> >> #include <fcntl.h>
> >>
> >> int main()
> >> {
> >>     const char buf[] = "Hello World!\n";
> >>     int fd = open("/dev/ttyGS0", O_RDWR | O_NONBLOCK);
> >
> > This line discipline is very different from the "traditional" tty line
> > discipline, so it might not know anything about cable removals.
> >
> > good luck,
> >
> > greg k-h
> > --
> 
> Thank you for your prompt reply.
> 
> Wow, I managed to mess it up in my original email! So, this code above
> made it working, but without O_NONBLOCK, it was not working. Using
> O_NONBLOCK is my current nasty workaround. As you are indicating it,
> this does not quite feel right, does it! I am not sure what the right
> thing would be to do in order to get write non-blocking for g_serial.
> I hope that someone with more knowledge about it than me could help
> out!

I doubt the O_NONBLOCK setting does anything, this is a character
device, with a very specific line discipline that works in a very
specific way and assumes you know exactly how to talk to it and
communicate with it properly.

Why not look at some examples of userspace code that uses this
connection properly to see how they do it?

good luck,

greg k-h
--
To unsubscribe from this list: send the line "unsubscribe linux-usb" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic