Enhanced Unix code for auto-extending files.

git-svn-id: https://svn.code.sf.net/p/flaim/code/trunk@653 0109f412-320b-0410-ab79-c3e0c5ffbbe6
This commit is contained in:
ahodgkinson
2006-07-11 21:12:04 +00:00
parent f9f8ade96b
commit 04c8a75de2
5 changed files with 59 additions and 7 deletions

View File

@@ -480,6 +480,10 @@ RCODE F_FileHdl::lowLevelRead(
{
ui64ReadOffset = m_ui64CurrentPos;
}
else
{
m_ui64CurrentPos = ui64ReadOffset;
}
if( !pvBuffer)
{
@@ -646,6 +650,7 @@ RCODE F_FileHdl::lowLevelWrite(
FLMUINT uiBytesWritten = 0;
F_FileAsyncClient * pAsyncClient = NULL;
FLMBOOL bWaitForWrite = FALSE;
FLMBYTE * pucExtendBuffer = NULL;
if( pIOBuffer && pvBuffer && pvBuffer != pIOBuffer->getBufferPtr())
{
@@ -657,8 +662,12 @@ RCODE F_FileHdl::lowLevelWrite(
{
ui64WriteOffset = m_ui64CurrentPos;
}
else
{
m_ui64CurrentPos = ui64WriteOffset;
}
if( m_bDoDirectIO)
if( m_bDoDirectIO && !m_numAsyncPending)
{
FLMUINT64 ui64CurrFileSize;
FLMUINT uiTotalBytesToExtend;
@@ -698,19 +707,25 @@ RCODE F_FileHdl::lowLevelWrite(
if( uiTotalBytesToExtend)
{
FLMUINT uiCurrBytesToExtend;
FLMINT iBytesWritten;
FLMUINT uiCurrBytesToExtend;
FLMUINT uiExtendBufferSize;
f_memset( m_pucAlignedBuff, 0, m_uiAlignedBuffSize);
uiExtendBufferSize = f_min( uiTotalBytesToExtend, 64 * 1024);
if( RC_BAD( rc = f_allocAlignedBuffer(
uiExtendBufferSize, &pucExtendBuffer)))
{
goto Exit;
}
while( uiTotalBytesToExtend)
{
uiCurrBytesToExtend = f_min(
uiTotalBytesToExtend, m_uiAlignedBuffSize);
uiTotalBytesToExtend, uiExtendBufferSize);
if( (iBytesWritten = pwrite( m_fd,
m_pucAlignedBuff, uiCurrBytesToExtend,
ui64CurrFileSize)) == -1)
if( (iBytesWritten = pwrite( m_fd, pucExtendBuffer,
uiCurrBytesToExtend, ui64CurrFileSize)) == -1)
{
if( errno == EINTR)
{
@@ -894,6 +909,11 @@ Exit:
f_assert( RC_BAD( rc));
pIOBuffer->notifyComplete( rc);
}
if( pucExtendBuffer)
{
f_freeAlignedBuffer( &pucExtendBuffer);
}
if( puiBytesWritten)
{