| Bug #15067 | Thread Deadlock | ||
|---|---|---|---|
| Submitted: | 19 Nov 2005 14:49 | Modified: | 31 Mar 2014 10:07 |
| Reporter: | Jim Redman | Email Updates: | |
| Status: | Duplicate | Impact on me: | |
| Category: | Connector / J | Severity: | S1 (Critical) |
| Version: | mysql-connector-java-3.1.10-bin.jar | OS: | Linux (Linux) |
| Assigned to: | Assigned Account | CPU Architecture: | Any |
[19 Nov 2005 16:13]
Mark Matthews
Probably a similar reason 14972, so we'll look into it, however the stack trace does show that your application isn't closing the statement(s) it created, which is a resource leak, at least until the connection itself is closed, so you'll probably want to look into that.
[24 Nov 2005 13:40]
Jim Redman
Here's a quick overview of how we use connections, in case it's useful. We open a connection to the database and share it between components on a number of threads. Each component may create a number of statements which remain open for the life of the connection. Any thread, when it detects any error will close the connection and notify the close. (OT - the lack of standardization of getErrorCode() means we have no way to judge the serverity of the error across different databases). When the application is configured correctly, connections close infrequently and only when there's a terminal problem with the connection (loss of network, database down, etc.). In the particular example, one component was mis-configured so was closing the connection, about every 10-15 seconds, on a "soft" error (wrong table name or something similar) even while the connection was still valid and other threads were using it. Hence the stack trace where one thread is asking for the type of a column while the other thread is closing the connection.
[3 Apr 2006 21:08]
Mark Matthews
We're going to tackle this when we fix BUG#18719 in Connector/J 5.0, so I'm consolidating all thread deadlock reports into this one bug, as they're all related.
[4 Apr 2006 21:47]
Bugs System
A patch for this bug has been committed. After review, it may be pushed to the relevant source trees for release in the next version. You can access the patch from: http://lists.mysql.com/commits/4463
[5 Apr 2006 0:59]
Mark Matthews
Please test propsed fixes in this nightly build: http://downloads.mysql.com/snapshots/mysql-connector-java-5.0/mysql-connector-java-5.0-nig...
[5 May 2006 23:00]
Bugs System
No feedback was provided for this bug for over a month, so it is being suspended automatically. If you are able to provide the information that was originally requested, please do so and change the status of the bug back to "Open".
[31 Mar 2014 10:07]
Alexander Soklakov
Duplicate of Bug#18719

Description: $ uname -a Linux charizard 2.6.11-1.1369_FC4 #1 Thu Jun 2 22:55:56 EDT 2005 i686 i686 i386 GNU/Linux $ java -version java version "1.4.2_05" Java(TM) 2 Runtime Environment, Standard Edition (build 1.4.2_05-b04) Java HotSpot(TM) Client VM (build 1.4.2_05-b04, mixed mode) Hot on the heels of 14972, which prevents me from using mysql-connector-java-3.1.11-bin.jar. Here's another thread deadlock. Thread [Timer for ExtremeServer "ExtremeServer50" - Value "0"] (Suspended) owns: Connection (id=45339) owns: DatabaseRowArrayLookup (id=45373) waiting for: ResultSet (id=45372) ResultSet.close() line: 715 Statement.realClose(boolean) line: 1597 Connection.closeAllOpenStatements() line: 2112 Connection.realClose(boolean, boolean, boolean, Throwable) line: 4379 Connection.close() line: 2084 DatabaseConnectionManager.closeConnection(ConnectionClosedListener) line: 291 DatabaseRowArrayLookup(DatabaseConnection).closeConnection() line: 410 DatabaseRowArrayLookup(DatabaseRawLookup).performQuery() line: 319 DatabaseRowArrayLookup(DatabaseRawLookup).executeStatement() line: 205 DatabaseRowArrayLookup(DatabaseRawLookup).trigger(ValueChangedEvent) line: 149 DatabaseRowArrayLookup(DatabaseRawLookup).valueChanged(int, ValueChangedEvent) line: 133 StaticConnector.validatedValueChanged(ValueChangedEvent) line: 101 [.....] Thread [Timer for SynchronizedClockTick "SynchronizedClockTick" - Value "0"] (Suspended) owns: ResultSet (id=45372) waiting for: Connection (id=45339) Connection.getCharsetConverter(String) line: 3161 Field.getStringFromBytes(int, int) line: 539 Field.getName() line: 456 ResultSet.buildIndexMapping() line: 572 ResultSet.findColumn(String) line: 886 ResultSet.getBytes(String) line: 1580 DatabaseMetaData.getColumns(String, String, String, String) line: 1906 TriggeredHistorical.getType(String, String) line: 300 TriggeredHistorical.update(long, Hashtable) line: 458 TriggeredHistorical.trigger(ValueChangedEvent) line: 697 TriggeredHistorical.valueChanged(int, ValueChangedEvent) line: 182 StaticConnector.validatedValueChanged(ValueChangedEvent) line: 101 StaticConnector(Connector).valueChanged(ValueChangedEvent) line: 567 [....] How to repeat: Thread deadlocks are rarely reproducible. I do not have a simple case for this.