X-Git-Url: https://git.saurik.com/apple/javascriptcore.git/blobdiff_plain/9dae56ea45a0f5f8136a5c93d6f3a7f99399ca73..f9bf01c6616d5ddcf65b13b33cedf9e387ff7a63:/interpreter/RegisterFile.cpp diff --git a/interpreter/RegisterFile.cpp b/interpreter/RegisterFile.cpp index 50698f5..510effe 100644 --- a/interpreter/RegisterFile.cpp +++ b/interpreter/RegisterFile.cpp @@ -36,10 +36,24 @@ RegisterFile::~RegisterFile() #if HAVE(MMAP) munmap(m_buffer, ((m_max - m_start) + m_maxGlobals) * sizeof(Register)); #elif HAVE(VIRTUALALLOC) +#if OS(WINCE) + VirtualFree(m_buffer, DWORD(m_commitEnd) - DWORD(m_buffer), MEM_DECOMMIT); +#endif VirtualFree(m_buffer, 0, MEM_RELEASE); #else - #error "Don't know how to release virtual memory on this platform." + fastFree(m_buffer); +#endif +} + +void RegisterFile::releaseExcessCapacity() +{ +#if HAVE(MMAP) && HAVE(MADV_FREE) && !HAVE(VIRTUALALLOC) + while (madvise(m_start, (m_max - m_start) * sizeof(Register), MADV_FREE) == -1 && errno == EAGAIN) { } +#elif HAVE(VIRTUALALLOC) + VirtualFree(m_start, (m_max - m_start) * sizeof(Register), MEM_DECOMMIT); + m_commitEnd = m_start; #endif + m_maxUsed = m_start; } } // namespace JSC