On Dec 4, 2006, at 11:19 AM, David Daney wrote:

Andrew Haley wrote:
Roman Kennke writes:
> > While testing eclipse I sometimes saw interrupted reads occur. VMChannel > > already had a mechanism for checking the interrupted status of a thread > > when a system call returned early. But this wasn't used for the read() > > and write() methods. This patch adds the logic. And makes my eclipse
 > > happy again :)
 >  > I am seeing a (possibly) related issue still:
 >  > java.net.SocketException: Interrupted system call
If connect(2) returns EINTR, you should retry:
CPNIO_EXPORT int
cpnio_connect (int fd, const struct sockaddr *addr, socklen_t addrlen)
{
  int retcode;
  do
    {
      retcode = connect (fd, addr, addrlen);
    }
  while (retcode == EINTR);
  return retcode;
}

Except that you should probably also check if the thread was interrupted as the original patch does for read and write.


Also, it occurs to me that VMChannel.connect should just use "select" for all cases -- right now, if no timeout is specified, it relies on connect(2) blocking. In other cases, the socket is put into non- blocking mode, and the timeout is applied in a call to select. Using select for all cases would clean up that function a lot.

This call to select also looks like it needs EINTR protection.

Thanks.

Reply via email to