netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [BUG]  TIPC handling of -ERESTARTSYS in connect()
@ 2012-08-30 15:20 Chris Friesen
  2012-08-31  9:37 ` Ying Xue
  0 siblings, 1 reply; 8+ messages in thread
From: Chris Friesen @ 2012-08-30 15:20 UTC (permalink / raw)
  To: netdev, ying.xue, Allan Stephens, Jon Maloy


Hi,

I'm seeing some behaviour that looks unintentional in the TIPC connect() call.
I'm running TIPC 1.7.7.  My userspace code (stripped of error handling) looks
like this:

	int sd = socket (AF_TIPC, SOCK_SEQPACKET,0);
	connect(sd,(struct sockaddr*)&topsrv,sizeof(topsrv));

where topsrv is the address of the TIPC topology server.  The thing that's weird
is that intermittently we get a EISCONN error on the connect call.

Looking at the TIPC connect() code, I think what is happening is that
wait_event_interruptible_timeout() is being interrupted by a signal and returns
-ERESTARTSYS.  This sets sock->state to SS_DISCONNECTING and exits.  Userspace
sees the ERESTARTSYS and retries the syscall, then we hit the
"sock->state != SS_UNCONNECTED" check and exit with -EISCONN.

I think current mainline is susceptible to this as well.

I'm not sure what the proper fix would be--can we detect coming back in that we were
waiting for a message and just skip down to the wait_event_interruptible_timeout()
call?

Chris


-- 

Chris Friesen
Software Designer

3500 Carling Avenue
Ottawa, Ontario K2H 8E9
www.genband.com

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2012-11-01  6:35 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-08-30 15:20 [BUG] TIPC handling of -ERESTARTSYS in connect() Chris Friesen
2012-08-31  9:37 ` Ying Xue
2012-08-31 15:09   ` Chris Friesen
2012-08-31 15:18     ` Chris Friesen
2012-09-03  3:16       ` Ying Xue
2012-09-04 14:54         ` Chris Friesen
2012-10-31 23:01           ` Chris Friesen
2012-11-01  6:35             ` Xue Ying

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).