You are viewing a plain text version of this content. The canonical link for it is here.
Posted to derby-dev@db.apache.org by "Kristian Waagan (JIRA)" <ji...@apache.org> on 2012/04/26 11:47:17 UTC

[jira] [Commented] (DERBY-5561) Race conditions in LogicalConnection checking for a null physical connection

    [ https://issues.apache.org/jira/browse/DERBY-5561?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13262497#comment-13262497 ] 

Kristian Waagan commented on DERBY-5561:
----------------------------------------

Any updates on this issue?
To me the changes look safe and correct. Given that the Connection interface probably won't see much change, and that writing a test that reliably detects missing synchronization in future methods (i.e. by using reflection and running  a test pattern for each method) may be non-trivial, I suggest we commit the patch right away unless Siddharth is planning to write a test for this shortly.

Siddhart, what's your opinion on this?
                
> Race conditions in LogicalConnection checking for a null physical connection
> ----------------------------------------------------------------------------
>
>                 Key: DERBY-5561
>                 URL: https://issues.apache.org/jira/browse/DERBY-5561
>             Project: Derby
>          Issue Type: Bug
>          Components: Network Client
>    Affects Versions: 10.8.2.2
>         Environment: Solaris 10
> Glassfish V2.1.1
> ClientXADataSource connection pool
>            Reporter: Brett Bergquist
>            Assignee: Siddharth Srivastava
>              Labels: derby_triage10_9
>         Attachments: DERBY-5561.patch
>
>
> There are race conditions with checkForNullPhysicalConnection calls in LogicalConnection.  checkForNullPhysicalConnection is not synchronized and it checks for the member "phsyicalConnection" which can be cleared by "nullPhsyicalConnection" (which is synchronized) and "close" (which is synchronized) and "closeWithoutRecyclingToPool" (which is synchronized).
> This affects "nativeSQL", "getAutoCommit", "getTransactionIsolation", "getWarnings", "isReadOnly", "getCatalog", "getTypeMap", "createStatement", "prepareCall", "prepareStatement", "setHoldability", "getHoldability", "setSavePoint", "rollBack", "releaseSavePoint", "getSchema", "setSchema".
> All of these call "checkForNullPhysicalConnection" and then use the member "physicalConnection" after that call returns.  Because these methods are not synchronized, between the time "checkForNullPhysicalConnectoin" returns and "physicalConnection" is used, the "physicalConnection" member could be set to null and then a NPE occurs.
> Probably all of these methods should be changed to synchronized.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira