Gier,

The DRLVM uses SIGUSR2 in thread suspend algorithm.
hysock_select() returns EINTR error when the signal appears, and
Socket.accept() throws exception.

The New ThreadManager use thread_suspend() more extensively ( in lock
reservation algorithm). So the problem appears more frequently.

Following patch to hysock.c fixes the problem in hysock.
Probably classlib experts could provide better way to fix this problem.

--
Artem Aliev, Intel Middleware Products Division

--- modules/luni/src/main/native/port/linux/hysock.c
+++ modules/luni/src/main/native/port/linux/hysock.c
@@ -2570,11 +2570,16 @@ hysock_select (struct HyPortLibrary * po
  I_32 rc = 0;
  I_32 result = 0;

-  result =
+  do
+  {
+    result =
    select (nfds, readfds == NULL ? NULL : &readfds->handle,
            writefds == NULL ? NULL : &writefds->handle,
            exceptfds == NULL ? NULL : &exceptfds->handle,
            timeout == NULL ? NULL : &timeout->time);
+  }
+  while (result == -1 && errno == EINTR);
+
  if (result == -1)
    {
      rc = errno;

---------------------------------------------------------------------
Terms of use : http://incubator.apache.org/harmony/mailing.html
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to