[
https://issues.apache.org/jira/browse/DERBY-3655?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12636019#action_12636019
]
Knut Anders Hatlen commented on DERBY-3655:
-------------------------------------------
If the finalizer calls free(), the object must have been gc'ed, so I'm not sure
how anyone else could be able to call free() at the same time. Did you ever
experience a NullPointerException without the synchronization?
What I think could happen which would require synchronization, is that
LOBStreamControl.finalize() calls free() -> EmbedConnection.removeLOBFile()
while EmbedConnection.clearLOBMapping() is iterating over lobFiles. This could
cause a ConcurrentModificationException or something in EmbedConnection. To
prevent this, we would have to add synchronization in EmbedConnection around
the accesses to lobFiles. I don't think synchronization in LOBStreamControl
would prevent it.
Another reason to synchronize accesses to EmbedConnection.lobFiles is that we
could have code that did something like this:
Blob b1 = conn.createBlob();
Blob b2 = conn.createBlob();
new Thread(new BlobHandler(b1, ...)).start();
new Thread(new BlobHandler(b2, ...)).start();
In such a case, we could get calls to addLobFile/removeLobFile on the same
EmbedConnection from different threads concurrently.
> errror in nightly regression test:
> LobStreamsTest:encryptedjunit.framework.AssertionFailedError:
> f:\jartest\JarResults.2008-04-29\ibm16_suites.All\system\singleUse\oneuse1e\tmp\lob6165.tmp
> --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
>
> Key: DERBY-3655
> URL: https://issues.apache.org/jira/browse/DERBY-3655
> Project: Derby
> Issue Type: Bug
> Components: Regression Test Failure
> Affects Versions: 10.3.3.0, 10.4.2.0
> Environment: OS: Windows, Test: v10_4 branch insane jars, ibm16 jvm
> OS: Windows, Test: v10_3 branch insane jars, ibm142 jvm
> Reporter: Mike Matrigali
> Assignee: Kathey Marsden
> Attachments: derby-3655_diff.txt, derby-3655_diff2.txt
>
>
> There was 1 failure:
> 1) LobStreamsTest:encryptedjunit.framework.AssertionFailedError:
> f:\jartest\JarResults.2008-04-29\ibm16_suites.All\system\singleUse\oneuse1e\tmp\lob6165.tmp
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.removeDir(DropDatabaseSetup.java:130)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.removeDir(DropDatabaseSetup.java:128)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.access$000(DropDatabaseSetup.java:35)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup$1.run(DropDatabaseSetup.java:105)
> at
> java.security.AccessController.doPrivileged(AccessController.java:202)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.removeDirectory(DropDatabaseSetup.java:102)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.removeDirectory(DropDatabaseSetup.java:98)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.removeDatabase(DropDatabaseSetup.java:91)
> at
> org.apache.derbyTesting.junit.DropDatabaseSetup.tearDown(DropDatabaseSetup.java:77)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:20)
> at junit.extensions.TestSetup.run(TestSetup.java:23)
> at
> org.apache.derbyTesting.junit.BaseTestSetup.run(BaseTestSetup.java:57)
> at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
> at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
> at junit.extensions.TestSetup.run(TestSetup.java:23)
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.