Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Fix a problem that occurs with transactions that use more than 32MB of shared memory. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
bc0f61fc3bb258b26e2d11217aa0fc73 |
User & Date: | dan 2013-01-01 10:24:42.359 |
Context
2013-01-01
| ||
18:24 | Add files "mem.h" and "mem.c". These are not currently linked into the build and have never been tested. At the moment they should be considered working notes, not real code. The code contained in these files might get folded into the build, or it might be deleted. check-in: e9efc61a51 user: drh tags: trunk | |
10:24 | Fix a problem that occurs with transactions that use more than 32MB of shared memory. check-in: bc0f61fc3b user: dan tags: trunk | |
09:07 | Avoid leaking shared-memory pages when rolling back a large transaction. check-in: d9a06d9403 user: dan tags: trunk | |
Changes
Changes to src/lsmInt.h.
︙ | ︙ | |||
457 458 459 460 461 462 463 464 | ** chunk except the first (which is the header chunk - see above). */ struct ShmChunk { u32 iShmid; u32 iNext; }; /* Return true if shm-sequence "a" is larger than or equal to "b" */ | > > > > > > | | 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 | ** chunk except the first (which is the header chunk - see above). */ struct ShmChunk { u32 iShmid; u32 iNext; }; /* ** Maximum number of shared-memory chunks allowed in the *-shm file. Since ** each shared-memory chunk is 32KB in size, this is a theoretical limit only. */ #define LSM_MAX_SHMCHUNKS (1<<30) /* Return true if shm-sequence "a" is larger than or equal to "b" */ #define shm_sequence_ge(a, b) (((u32)a-(u32)b) < LSM_MAX_SHMCHUNKS) #define LSM_APPLIST_SZ 4 /* ** An instance of the following structure stores the in-memory part of ** the current free block list. This structure is to the free block list ** as the in-memory tree is to the users database content. The contents |
︙ | ︙ |
Changes to src/lsm_shared.c.
︙ | ︙ | |||
799 800 801 802 803 804 805 | /* Take a read-lock on the tree and snapshot just loaded. Then check ** that the shared-memory still contains the same values. If so, proceed. ** Otherwise, relinquish the read-lock and retry the whole procedure ** (starting with loading the in-memory tree header). */ if( rc==LSM_OK ){ u32 iShmMax = pDb->treehdr.iUsedShmid; | | | 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 | /* Take a read-lock on the tree and snapshot just loaded. Then check ** that the shared-memory still contains the same values. If so, proceed. ** Otherwise, relinquish the read-lock and retry the whole procedure ** (starting with loading the in-memory tree header). */ if( rc==LSM_OK ){ u32 iShmMax = pDb->treehdr.iUsedShmid; u32 iShmMin = pDb->treehdr.iNextShmid+1-LSM_MAX_SHMCHUNKS; rc = lsmReadlock( pDb, lsmCheckpointId(pDb->aSnapshot, 0), iShmMin, iShmMax ); if( rc==LSM_OK ){ if( lsmTreeLoadHeaderOk(pDb, iTreehdr) && lsmCheckpointLoadOk(pDb, iSnap) ){ |
︙ | ︙ |