Date: Wed, 17 Aug 2005 10:52:57 -0700 (PDT) From: Nick Johnson <freebsd@spatula.net> To: FreeBSD-gnats-submit@FreeBSD.org Subject: threads/85112: Resource temporarily unavailable reading from sockets with Java/libpthread/jdbc Message-ID: <20050817175257.E24F31701D@turing.morons.org> Resent-Message-ID: <200508190510.j7J5ABxb037178@freefall.freebsd.org>
next in thread | raw e-mail | index | archive | help
>Number: 85112 >Category: threads >Synopsis: Resource temporarily unavailable reading from sockets with Java/libpthread/jdbc >Confidential: no >Severity: critical >Priority: medium >Responsible: freebsd-threads >State: open >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Fri Aug 19 05:10:08 GMT 2005 >Closed-Date: >Last-Modified: >Originator: Nick Johnson >Release: FreeBSD 5.4-STABLE i386 >Organization: morons.org >Environment: System: FreeBSD turing.morons.org 5.4-STABLE FreeBSD 5.4-STABLE #4: Mon Aug 15 21:22:19 PDT 2005 root@turing.morons.org:/usr/src/sys/i386/compile/TURING i386 Java 1.4.2-p7 built from ports Postgresql 8.0.3 built from ports; however still using the Postgresql 7.4 JDBC driver >Description: When attempting to get a database connection with Java linked to libpthread, a socket exception is thrown: java.net.SocketException: Resource temporarily unavailable at java.net.SocketInputStream.socketRead0(Native Method) at java.net.SocketInputStream.read(SocketInputStream.java:129) at java.io.BufferedInputStream.fill(BufferedInputStream.java:183) at java.io.BufferedInputStream.read(BufferedInputStream.java:201) at org.postgresql.PG_Stream.ReceiveChar(PG_Stream.java:139) at org.postgresql.jdbc1.AbstractJdbc1Connection.openConnection(AbstractJdbc1Connection.java:190) at org.postgresql.Driver.connect(Driver.java:122) at java.sql.DriverManager.getConnection(DriverManager.java:512) at java.sql.DriverManager.getConnection(DriverManager.java:193) at net.spatula.news.Utils.getJDBCconnection(Utils.java:816) Here is the code from getJDBCconnection, verbatim, including ugliness just for fun... public static synchronized Connection getJDBCconnection() { try { Class.forName("org.postgresql.Driver"); } catch (Exception e) { e.printStackTrace(); } int retryCount = 5; while (retryCount >0) { try { //XXX database name and username should be properties String dbURL = "jdbc:postgresql://"+ getProperty("spatula.dbhost")+":"+ getProperty("spatula.dbport")+"/morons.org?user=www&password="+ getProperty("spatula.dbpass"); Connection c = DriverManager.getConnection(dbURL); // <--- this is line 816 return c; } catch (Exception e) { e.printStackTrace(); } retryCount--; try { Thread.sleep(200 + (int)(Math.random()*50.0)); } catch (Exception e) {} } return null; } This fails every time when java links against libpthread and works every time when it is linked against libc_r. I'm not entirely sure, but this may have started showing itself after I added this to /etc/make.conf: CPUTYPE?=i686 CFLAGS=-O2 -pipe or it may be totally unrelated. See also threads/84778 (http://www.freebsd.org/cgi/query-pr.cgi?pr=84778) which was previously preventing me from getting far enough to make a database connection. (Once the class files were compiled with a process linked against libc_r, they were in place for a process linked against libpthread to use.) >How-To-Repeat: Try to get a database connection. >Fix: Workaround is to configure the linker to use libc_r for all Java processes in /etc/libmap.conf: [/usr/local/jdk1.4.2/] libpthread.so.1 libc_r.so.5 libpthread.so libc_r.so >Release-Note: >Audit-Trail: >Unformatted:
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20050817175257.E24F31701D>