Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Work around (incorrect) ASAN warnings in memjournal.c. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
4de09777dad6188b7e897473700af3c9 |
User & Date: | drh 2016-03-05 15:03:31.910 |
Context
2016-03-05
| ||
15:35 | Remove the unused journal.c source file (its function have been subsumed into memjournal.c). Refactor some of the names in memjournal.c. No functional changes. (check-in: 5f2a262d3f user: drh tags: trunk) | |
15:03 | Work around (incorrect) ASAN warnings in memjournal.c. (check-in: 4de09777da user: drh tags: trunk) | |
14:19 | Fix an integer size mismatch problem in test_bestindex.c (check-in: 2e35eb6b74 user: drh tags: trunk) | |
Changes
Changes to src/memjournal.c.
︙ | ︙ | |||
105 106 107 108 109 110 111 | pChunk = p->readpoint.pChunk; } iChunkOffset = (int)(iOfst%p->nChunkSize); do { int iSpace = p->nChunkSize - iChunkOffset; int nCopy = MIN(nRead, (p->nChunkSize - iChunkOffset)); | | | 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 | pChunk = p->readpoint.pChunk; } iChunkOffset = (int)(iOfst%p->nChunkSize); do { int iSpace = p->nChunkSize - iChunkOffset; int nCopy = MIN(nRead, (p->nChunkSize - iChunkOffset)); memcpy(zOut, (u8*)pChunk->zChunk + iChunkOffset, nCopy); zOut += nCopy; nRead -= iSpace; iChunkOffset = 0; } while( nRead>=0 && (pChunk=pChunk->pNext)!=0 && nRead>0 ); p->readpoint.iOffset = iOfst+iAmt; p->readpoint.pChunk = pChunk; } |
︙ | ︙ | |||
149 150 151 152 153 154 155 | p->pReal = pReal; for(pIter=p->pFirst; pIter && rc==SQLITE_OK; pIter=pIter->pNext){ int nWrite = nChunk; if( pIter==p->endpoint.pChunk ){ nWrite = p->endpoint.iOffset % p->nChunkSize; if( nWrite==0 ) nWrite = p->nChunkSize; } | | | 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 | p->pReal = pReal; for(pIter=p->pFirst; pIter && rc==SQLITE_OK; pIter=pIter->pNext){ int nWrite = nChunk; if( pIter==p->endpoint.pChunk ){ nWrite = p->endpoint.iOffset % p->nChunkSize; if( nWrite==0 ) nWrite = p->nChunkSize; } rc = sqlite3OsWrite(pReal, (u8*)pIter->zChunk, nWrite, iOff); iOff += nWrite; } if( rc!=SQLITE_OK ){ /* If an error occurred while writing to the file, close it before ** returning. This way, SQLite uses the in-memory journal data to ** roll back changes made to the internal page-cache before this ** function was called. */ |
︙ | ︙ | |||
206 207 208 209 210 211 212 | ** access writes are not required. The only exception to this is when ** the in-memory journal is being used by a connection using the ** atomic-write optimization. In this case the first 28 bytes of the ** journal file may be written as part of committing the transaction. */ assert( iOfst==p->endpoint.iOffset || iOfst==0 ); if( iOfst==0 && p->pFirst ){ assert( p->nChunkSize>iAmt ); | | | 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 | ** access writes are not required. The only exception to this is when ** the in-memory journal is being used by a connection using the ** atomic-write optimization. In this case the first 28 bytes of the ** journal file may be written as part of committing the transaction. */ assert( iOfst==p->endpoint.iOffset || iOfst==0 ); if( iOfst==0 && p->pFirst ){ assert( p->nChunkSize>iAmt ); memcpy((u8*)p->pFirst->zChunk, zBuf, iAmt); }else{ while( nWrite>0 ){ FileChunk *pChunk = p->endpoint.pChunk; int iChunkOffset = (int)(p->endpoint.iOffset%p->nChunkSize); int iSpace = MIN(nWrite, p->nChunkSize - iChunkOffset); if( iChunkOffset==0 ){ |
︙ | ︙ | |||
230 231 232 233 234 235 236 | }else{ assert( !p->pFirst ); p->pFirst = pNew; } p->endpoint.pChunk = pNew; } | | | 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 | }else{ assert( !p->pFirst ); p->pFirst = pNew; } p->endpoint.pChunk = pNew; } memcpy((u8*)p->endpoint.pChunk->zChunk + iChunkOffset, zWrite, iSpace); zWrite += iSpace; nWrite -= iSpace; p->endpoint.iOffset += iSpace; } p->nSize = iAmt + iOfst; } } |
︙ | ︙ |