Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Performance improvement in sqlite3DbMallocRaw(). |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: |
ff8eadbed5004ab03438f737492387de |
User & Date: | drh 2016-01-20 03:36:32.428 |
Context
2016-01-20
| ||
08:47 | Improve performance of sqlite3VtabImportErrmsg(). (check-in: 18d61c8e40 user: dan tags: trunk) | |
03:36 | Performance improvement in sqlite3DbMallocRaw(). (check-in: ff8eadbed5 user: drh tags: trunk) | |
02:36 | Suppress the display of the P4 operand in EXPLAIN output when an opcode has been converted into a No-op. (check-in: 9f8297f862 user: drh tags: trunk) | |
Changes
Changes to src/malloc.c.
︙ | ︙ | |||
579 580 581 582 583 584 585 | if( p ){ memset(p, 0, (size_t)n); } return p; } /* | > | | > < | 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 | if( p ){ memset(p, 0, (size_t)n); } return p; } /* ** Allocate memory, either lookaside (if possible) or heap. ** If the allocation fails, set the mallocFailed flag in ** the connection pointer. ** ** If db!=0 and db->mallocFailed is true (indicating a prior malloc ** failure on the same database connection) then always return 0. ** Hence for a particular database connection, once malloc starts ** failing, it fails consistently until mallocFailed is reset. ** This is an important assumption. There are many places in the ** code that do things like this: ** ** int *a = (int*)sqlite3DbMallocRaw(db, 100); ** int *b = (int*)sqlite3DbMallocRaw(db, 200); ** if( b ) a[10] = 9; ** ** In other words, if a subsequent malloc (ex: "b") worked, it is assumed ** that all prior mallocs (ex: "a") worked too. */ static SQLITE_NOINLINE void *dbMallocRawFinish(sqlite3 *db, u64 n); void *sqlite3DbMallocRaw(sqlite3 *db, u64 n){ assert( db==0 || sqlite3_mutex_held(db->mutex) ); assert( db==0 || db->pnBytesFreed==0 ); #ifndef SQLITE_OMIT_LOOKASIDE if( db ){ LookasideSlot *pBuf; if( db->mallocFailed ){ return 0; |
︙ | ︙ | |||
627 628 629 630 631 632 633 | } } #else if( db && db->mallocFailed ){ return 0; } #endif | > > > | | 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 | } } #else if( db && db->mallocFailed ){ return 0; } #endif return dbMallocRawFinish(db, n); } static SQLITE_NOINLINE void *dbMallocRawFinish(sqlite3 *db, u64 n){ void *p = sqlite3Malloc(n); if( !p && db ){ db->mallocFailed = 1; } sqlite3MemdebugSetType(p, (db && db->lookaside.bEnabled) ? MEMTYPE_LOOKASIDE : MEMTYPE_HEAP); return p; } |
︙ | ︙ |