RAFContainer readPage method is not thread safe
-----------------------------------------------
Key: DERBY-145
URL: http://issues.apache.org/jira/browse/DERBY-145
Project: Derby
Type: Bug
Components: Store
Versions: 10.0.2.1
Environment: N/A
Reporter: Rick Post
Priority: Minor
readPage method comment says 'thread safe and has a synchronized block.
But 'pageOffset' computation occurs outside the sync block as does decryption.
This allows the (remote?) possibility of part of the operation(s) being
performed using the wrong pageNumber or pageData.
Fix - synchronize the method rather than the block
/**
Read a page into the supplied array.
<BR> MT - thread safe
@exception IOException exception reading page
@exception StandardException Standard Cloudscape error policy
*/
protected void readPage(long pageNumber, byte[] pageData)
throws IOException, StandardException
{
if (SanityManager.DEBUG) {
SanityManager.ASSERT(!getCommittedDropState());
}
long pageOffset = pageNumber * pageSize;
synchronized (this) {
fileData.seek(pageOffset);
fileData.readFully(pageData, 0, pageSize);
}
if (dataFactory.databaseEncrypted() &&
pageNumber != FIRST_ALLOC_PAGE_NUMBER)
{
decryptPage(pageData, pageSize);
}
}
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
If you want more information on JIRA, or have a bug to report see:
http://www.atlassian.com/software/jira