1. 20 Jun, 2017 1 commit
    • Clemens Hammacher's avatar
      Implement managed objects with phantom handles · f244f0c5
      Clemens Hammacher authored
      For each Managed<T> (which is a Foreign), we create a weak global handle
      with a finalizer which deletes the referenced C++ object once the
      Foreign is dead.
      Before calling this finalizer, the garbage collector needs to mark the
      referenced object black (i.e. live), because the finalizer might
      resurrect it.
      Since this is never done for managed objects, we can use the more
      lightweight phantom handle semantics, which allows the referenced
      object to be garbage collected right away.
      
      However, we can't access the global handle via the WeakCallbackInfo,
      because the global handle will already be garbage collected. So we need
      to store it explicitly. This is solved by storing the global handle
      together with the finalizer.
      In order to implement this, ownership of the ManagedObjectFinalizer
      is moved from the isolate to the managed object.
      
      R=ulan@chromium.org, mtrofin@chromium.org
      BUG=v8:6505, chromium:734345
      
      Change-Id: I94a245df601f70e19355d82439d30099e159231b
      Reviewed-on: https://chromium-review.googlesource.com/539578
      Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
      Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#46036}
      f244f0c5
  2. 04 Apr, 2017 1 commit
    • Clemens Hammacher's avatar
      [wasm] [interpreter] Fix GC issue · d1b4d4fe
      Clemens Hammacher authored
      Make sure that we call the destructors on all embedded object by
      replacing the WasmInterpreterInternals::Delete method by an actual
      destructor. This way, the compiler automatically calls destructors on
      all embedded objects, in particular the IdentityMap in the CodeMap.
      
      This change also requires to release managed objects *before*
      tearing down the heap, because the wasm interpreter, referenced via
      Managed<>, contains global handles. When those are destroyed, the
      isolate still needs to be intact.
      
      Drive-by: Fix include guard in managed.h.
      
      R=ahaas@chromium.org, ulan@chromium.org, mvstanton@chromium.org
      BUG=v8:5822
      
      Change-Id: I9a067f037e013c84e4d697a1e913b27c683bb529
      Reviewed-on: https://chromium-review.googlesource.com/466187Reviewed-by: 's avatarUlan Degenbaev <ulan@chromium.org>
      Reviewed-by: 's avatarMichael Stanton <mvstanton@chromium.org>
      Reviewed-by: 's avatarAndreas Haas <ahaas@chromium.org>
      Commit-Queue: Clemens Hammacher <clemensh@chromium.org>
      Cr-Commit-Position: refs/heads/master@{#44368}
      d1b4d4fe
  3. 21 Feb, 2017 1 commit
    • mtrofin's avatar
      [wasm] Managed<T> ensures T's lifetime does not leak past Isolate's · caa1d4b2
      mtrofin authored
      Native resources allocated by v8, as internal implementation detail,
      and held by a Foreign object, must be released when the Isolate is
      torn down. Example: wasm::WasmModule allocated by wasm compile, and
      held throughout the lifetime of the WebAssembly.Module object.
      
      This change:
      - Extends Managed<CppType> with a mechanism for doing just that
      - Separates the role of Managed<CppType> to be strictly an owner of
      the lifetime of the native resource. For cases where that's not
      desirable, we can polymorphically use Foregin.
      - moves managed.h out of wasm, since it's not wasm-specific.
      
      BUG=680065
      
      Review-Url: https://codereview.chromium.org/2676513008
      Cr-Commit-Position: refs/heads/master@{#43350}
      caa1d4b2