Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Move the allocation of the memsys5 mutex into the initializer. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
4e377a09c194e90581ef00fd3a213e93 |
User & Date: | drh 2009-08-18 15:33:44.000 |
Context
2009-08-18
| ||
16:05 | Unknown functions in the DEFAULT clause of a table cause an error when the DEFAULT value is needed. Ticket [2d401a94287b5]. (check-in: 093917d7fd user: drh tags: trunk) | |
15:33 | Move the allocation of the memsys5 mutex into the initializer. (check-in: 4e377a09c1 user: drh tags: trunk) | |
14:48 | Fix obscure issues with the memsys5 memory allocator. Arrange that the xRealloc() interface to memory allocators is only called with a value that has been through xRoundup(). (check-in: 577bd6f155 user: drh tags: trunk) | |
Changes
Changes to src/mem5.c.
︙ | ︙ | |||
184 185 186 187 188 189 190 | /* ** If the STATIC_MEM mutex is not already held, obtain it now. The mutex ** will already be held (obtained by code in malloc.c) if ** sqlite3GlobalConfig.bMemStat is true. */ static void memsys5Enter(void){ | < < < | 184 185 186 187 188 189 190 191 192 193 194 195 196 197 | /* ** If the STATIC_MEM mutex is not already held, obtain it now. The mutex ** will already be held (obtained by code in malloc.c) if ** sqlite3GlobalConfig.bMemStat is true. */ static void memsys5Enter(void){ sqlite3_mutex_enter(mem5.mutex); } static void memsys5Leave(void){ sqlite3_mutex_leave(mem5.mutex); } /* |
︙ | ︙ | |||
443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 | int iLog; for(iLog=0; (1<<iLog)<iValue; iLog++); return iLog; } /* ** Initialize the memory allocator. */ static int memsys5Init(void *NotUsed){ int ii; /* Loop counter */ int nByte; /* Number of bytes of memory available to this allocator */ u8 *zByte; /* Memory usable by this allocator */ int nMinLog; /* Log base 2 of minimum allocation size in bytes */ int iOffset; /* An offset into mem5.aCtrl[] */ UNUSED_PARAMETER(NotUsed); /* The size of a Mem5Link object must be a power of two. Verify that ** this is case. */ assert( (sizeof(Mem5Link)&(sizeof(Mem5Link)-1))==0 ); nByte = sqlite3GlobalConfig.nHeap; | > > > > > > | 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 | int iLog; for(iLog=0; (1<<iLog)<iValue; iLog++); return iLog; } /* ** Initialize the memory allocator. ** ** This routine is not threadsafe. The caller must be holding a mutex ** to prevent multiple threads from entering at the same time. */ static int memsys5Init(void *NotUsed){ int ii; /* Loop counter */ int nByte; /* Number of bytes of memory available to this allocator */ u8 *zByte; /* Memory usable by this allocator */ int nMinLog; /* Log base 2 of minimum allocation size in bytes */ int iOffset; /* An offset into mem5.aCtrl[] */ UNUSED_PARAMETER(NotUsed); /* For the purposes of this routine, disable the mutex */ mem5.mutex = 0; /* The size of a Mem5Link object must be a power of two. Verify that ** this is case. */ assert( (sizeof(Mem5Link)&(sizeof(Mem5Link)-1))==0 ); nByte = sqlite3GlobalConfig.nHeap; |
︙ | ︙ | |||
486 487 488 489 490 491 492 493 494 495 496 497 498 499 | if( (iOffset+nAlloc)<=mem5.nBlock ){ mem5.aCtrl[iOffset] = ii | CTRL_FREE; memsys5Link(iOffset, ii); iOffset += nAlloc; } assert((iOffset+nAlloc)>mem5.nBlock); } return SQLITE_OK; } /* ** Deinitialize this module. */ | > > > > > | 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 | if( (iOffset+nAlloc)<=mem5.nBlock ){ mem5.aCtrl[iOffset] = ii | CTRL_FREE; memsys5Link(iOffset, ii); iOffset += nAlloc; } assert((iOffset+nAlloc)>mem5.nBlock); } /* If a mutex is required for normal operation, allocate one */ if( sqlite3GlobalConfig.bMemstat==0 && mem5.mutex==0 ){ mem5.mutex = sqlite3MutexAlloc(SQLITE_MUTEX_STATIC_MEM); } return SQLITE_OK; } /* ** Deinitialize this module. */ |
︙ | ︙ |