• akodat's avatar
    Add Isolate::DiscardThreadSpecificMetadata method to embedder API. · aeb8073c
    akodat authored
    If many threads use the same Isolate (or many Isolates) and then
    terminate, their PerIsolateThreadData objects are never cleaned
    up, resulting in a slow memory leak and, worse, the
    PerIsolateThreadData chain getting larger and larger, adversely
    affecting performance.
    
    In this situation, embedders will now be encouraged to apply
    DiscardThreadSpecificMetadata against any Isolate a thread is
    done with, especially if the thread is about to terminate.
    
    Note that it is harmless to run DiscardThreadSpecificMetadata
    against an Isolate for which a thread has no thread data and
    per-Isolate thread data can be reestablished if a thread starts
    using an Isolate again after running DiscardThreadSpecificMetadata
    against it.
    
    It is, however, an embedder error to run
    DiscardThreadSpecificMetadata against an Isolate in thread with a
    Locker for the Isolate in the stack or against an Entered Isolate.
    
    This change cannot cause any change in behavior in existing apps
    as the only added coded can only be reached via the new
    DiscardThreadSpecificMetadata method.
    
    R=Jakob, jochen
    BUG=
    
    Review URL: https://codereview.chromium.org/1522703002
    
    Cr-Commit-Position: refs/heads/master@{#32909}
    aeb8073c
test-lockers.cc 22.7 KB