Skip to content
  • Josh Kunz's avatar
    Re-work the old ops to use the new CDT interface · fe68b750
    Josh Kunz authored
    This commit does three main things:
      1. Full CDT reference counting. When CDT locks are acquired, all
         intermediate root's reference counts are update safely.
      2. Re-factor's the operations to use two generic locking routines with
         special handlers (binop, and unop). This removes a lot of code duplication
         which made adding the locking code much easier, and should help
         prevent bugs.
      3. Removes the `delete` callback, now `delete` will be called whenever
         a cnode is created. It's the object's decision if this requires a
         memory free or not. Also adds three new callbacks:
           * `grant(src, dst)`: called when a grant from src -> dst happens.
              Only the handler for `src` is called.
           * `derive_src(src, dst)`: called on `src` when dst is derived from src.
           * `derive_dst(src, dst)`: called on `dst` when dst is derived from src.
        Objects are now responsible for doing some sort of reference
        counting in the grant and delete callbacks to prevent leaks. The
        grant and derive callbacks will also be the main hooks for capnet.
    fe68b750