Gentoo Websites Logo
Go to: Gentoo Home Documentation Forums Lists Bugs Planet Store Wiki Get Gentoo!
View | Details | Raw Unified | Return to bug 471624
Collapse All | Expand All

(-)a/js/src/jsgc.cpp (-6 / +14 lines)
Lines 92-107 Link Here
92
#include "vm/Debugger.h"
92
#include "vm/Debugger.h"
93
#include "vm/String.h"
93
#include "vm/String.h"
94
94
95
#include "jsobjinlines.h"
95
#include "jsobjinlines.h"
96
96
97
#include "vm/CallObject-inl.h"
97
#include "vm/CallObject-inl.h"
98
#include "vm/String-inl.h"
98
#include "vm/String-inl.h"
99
99
100
#include "yarr/PageBlock.h" /* for pageSize() */
101
100
#ifdef MOZ_VALGRIND
102
#ifdef MOZ_VALGRIND
101
# define JS_VALGRIND
103
# define JS_VALGRIND
102
#endif
104
#endif
103
#ifdef JS_VALGRIND
105
#ifdef JS_VALGRIND
104
# include <valgrind/memcheck.h>
106
# include <valgrind/memcheck.h>
105
#endif
107
#endif
106
108
107
using namespace mozilla;
109
using namespace mozilla;
Lines 2380-2395 ReleaseObservedTypes(JSContext *cx) Link Here
2380
    }
2382
    }
2381
2383
2382
    return releaseTypes;
2384
    return releaseTypes;
2383
}
2385
}
2384
2386
2385
static void
2387
static void
2386
DecommitFreePages(JSContext *cx)
2388
DecommitFreePages(JSContext *cx)
2387
{
2389
{
2390
    /*
2391
     * If the ArenaSize is smaller than a memory page, we don't attempt to
2392
     * decommit anything because DecommitMemory() would always fail.
2393
     */
2394
    if (ArenaSize < pageSize())
2395
        return;
2396
2388
    JSRuntime *rt = cx->runtime;
2397
    JSRuntime *rt = cx->runtime;
2389
2398
2390
    for (GCChunkSet::Range r(rt->gcChunkSet.all()); !r.empty(); r.popFront()) {
2399
    for (GCChunkSet::Range r(rt->gcChunkSet.all()); !r.empty(); r.popFront()) {
2391
        Chunk *chunk = r.front();
2400
        Chunk *chunk = r.front();
2392
        while (chunk) {
2401
        while (chunk) {
2393
            ArenaHeader *aheader = static_cast<ArenaHeader*>(chunk->info.freeArenasHead);
2402
            ArenaHeader *aheader = static_cast<ArenaHeader*>(chunk->info.freeArenasHead);
2394
2403
2395
            /*
2404
            /*
Lines 2402-2425 DecommitFreePages(JSContext *cx) Link Here
2402
            while (aheader) {
2411
            while (aheader) {
2403
                /* Store aside everything we will need after decommit. */
2412
                /* Store aside everything we will need after decommit. */
2404
                ArenaHeader *next = aheader->next;
2413
                ArenaHeader *next = aheader->next;
2405
2414
2406
                bool success = DecommitMemory(aheader, ArenaSize);
2415
                bool success = DecommitMemory(aheader, ArenaSize);
2407
                if (!success) {
2416
                if (!success) {
2408
                    aheader->next = chunk->info.freeArenasHead;
2417
                    aheader->next = chunk->info.freeArenasHead;
2409
                    chunk->info.freeArenasHead = aheader;
2418
                    chunk->info.freeArenasHead = aheader;
2410
                    continue;
2419
                } else {
2420
                    size_t arenaOffset = Chunk::arenaIndex(reinterpret_cast<uintptr_t>(aheader));
2421
                    chunk->decommittedArenas.set(arenaOffset);
2422
                    --chunk->info.numArenasFreeCommitted;
2423
                    --rt->gcNumFreeArenas;
2411
                }
2424
                }
2412
2425
2413
                size_t arenaOffset = Chunk::arenaIndex(reinterpret_cast<uintptr_t>(aheader));
2414
                chunk->decommittedArenas.set(arenaOffset);
2415
                --chunk->info.numArenasFreeCommitted;
2416
                --rt->gcNumFreeArenas;
2417
2418
                aheader = next;
2426
                aheader = next;
2419
            }
2427
            }
2420
2428
2421
            chunk = chunk->info.next;
2429
            chunk = chunk->info.next;
2422
        }
2430
        }
2423
    }
2431
    }
2424
}
2432
}
2425
2433

Return to bug 471624