Hello,
I am using the Boehm GC myself, and noticed that some system calls (in
particular select) can be blocked by the GC (which is using signals and signal
handlers to block threads) and return with an error of -1 and errno set to
EINTR.
I looked at gcj's libjava implementation to see if you handled it better than I
did, and I noticed that you do handle EINTR in the select system call by using
_Jv_select, and you also handle it when reading/writing to local files, but I
think you omitted the reading/writing of network sockets and accept system
calls.
There might be other places too: basically what I understand of the Boehm GC is
that it can block any thread at any place in order to do a GC, and when that
happens in a thread within a system call that can return an error of EINTR, you
have to treat that error specially and redo that system call.
--
Summary: Potential problems in libjava system calls with gc-boehm
Product: gcc
Version: 3.4.3
Status: UNCONFIRMED
Severity: normal
Priority: P2
Component: java
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: Stephane dot Epardaud at sophia dot inria dot fr
CC: gcc-bugs at gcc dot gnu dot org,java-prs at gcc dot gnu
dot org
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=19003