[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <063D6719AE5E284EB5DD2968C1650D6D1CBCD484@AcuExch.aculab.com>
Date: Fri, 6 Nov 2015 15:07:30 +0000
From: David Laight <David.Laight@...LAB.COM>
To: 'Al Viro' <viro@...IV.linux.org.uk>
CC: 'David Holland' <dholland-tech@...bsd.org>,
Alan Burlison <Alan.Burlison@...cle.com>,
"Casper.Dik@...cle.com" <Casper.Dik@...cle.com>,
David Miller <davem@...emloft.net>,
"eric.dumazet@...il.com" <eric.dumazet@...il.com>,
"stephen@...workplumber.org" <stephen@...workplumber.org>,
"netdev@...r.kernel.org" <netdev@...r.kernel.org>
Subject: RE: [Bug 106241] New: shutdown(3)/close(3) behaviour is incorrect
for sockets in accept(3)
From: Al Viro
> Sent: 04 November 2015 16:28
> On Wed, Nov 04, 2015 at 03:54:09PM +0000, David Laight wrote:
> > > Sigh... The kernel has no idea when other threads are done with "all
> > > io activities using that fd" - it can wait for them to leave the
> > > kernel mode, but there's fuck-all it can do about e.g. a userland
> > > loop doing write() until there's more data to send. And no, you can't
> > > rely upon them catching EBADF on the next iteration - by the time they
> > > get there, close() might very well have returned and open() from yet
> > > another thread might've grabbed the same descriptor. Welcome to your
> > > data being written to hell knows what...
> >
> > That just means that the application must use dup2() rather than close().
> > It must do that anyway since the thread it is trying to stop might be
> > sleeping in the system call stub in libc at the time a close() and open()
> > happen.
>
> Oh, _lovely_. So instead of continuation of that write(2) going down
> the throat of something opened by unrelated thread, it (starting from a
> pretty arbitrary point) will go into the descriptor the closing thread
> passed to dup2(). Until it, in turn, gets closed, at which point we
> are back to square one. That, of course, makes it so much better -
> whatever had I been thinking about that made me miss that?
Do I detect a note of sarcasm.
You'd open "/dev/null" (lacking a "/dev/error") and use that as the source fd.
So any writes (etc) would be discarded in a safe manner, and nothing will block.
David
--
To unsubscribe from this list: send the line "unsubscribe netdev" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Powered by blists - more mailing lists