| Index: util/mach/exception_ports.h
 | 
| diff --git a/util/mach/exception_ports.h b/util/mach/exception_ports.h
 | 
| index d82ac2dcf5d48aa886cb149020bd5ec1888f7c42..7f23c5e57fc6c98b2a08fc4820c2d3bc63aa586b 100644
 | 
| --- a/util/mach/exception_ports.h
 | 
| +++ b/util/mach/exception_ports.h
 | 
| @@ -85,6 +85,38 @@ class ExceptionPorts {
 | 
|      thread_state_flavor_t flavor;
 | 
|    };
 | 
|  
 | 
| +  //! \brief Wraps `std::vector<ExceptionHandler>`, providing proper cleanup of
 | 
| +  //!     the send rights contained in each element’s ExceptionHandler::port.
 | 
| +  //!
 | 
| +  //! Upon destruction or clear(), an object of this class will deallocate all
 | 
| +  //! send rights it contains. Otherwise, it is an interface-compatible drop-in
 | 
| +  //! replacement for `std::vector<ExceptionHandler>`. Note that non-`const`
 | 
| +  //! mutators are not provided to avoid accidental Mach right leaks.
 | 
| +  class ExceptionHandlerVector {
 | 
| +   public:
 | 
| +    using VectorType = std::vector<ExceptionHandler>;
 | 
| +
 | 
| +    ExceptionHandlerVector();
 | 
| +    ~ExceptionHandlerVector();
 | 
| +
 | 
| +    VectorType::const_iterator begin() const { return vector_.begin(); }
 | 
| +    VectorType::const_iterator end() const { return vector_.end(); }
 | 
| +    VectorType::size_type size() const { return vector_.size(); }
 | 
| +    bool empty() const { return vector_.empty(); }
 | 
| +    VectorType::const_reference operator[](VectorType::size_type index) const {
 | 
| +      return vector_[index];
 | 
| +    }
 | 
| +    void push_back(VectorType::value_type& value) { vector_.push_back(value); }
 | 
| +    void clear();
 | 
| +
 | 
| +   private:
 | 
| +    void Deallocate();
 | 
| +
 | 
| +    VectorType vector_;
 | 
| +
 | 
| +    DISALLOW_COPY_AND_ASSIGN(ExceptionHandlerVector);
 | 
| +  };
 | 
| +
 | 
|    //! \brief Constructs an interface object to get or set exception ports on a
 | 
|    //!     host, task, or thread port.
 | 
|    //!
 | 
| @@ -111,19 +143,18 @@ class ExceptionPorts {
 | 
|    //! \param[in] mask The exception mask, containing the `EXC_MASK_*` values to
 | 
|    //!     be looked up and returned in \a handlers.
 | 
|    //! \param[out] handlers The exception handlers registered for \a target_port
 | 
| -  //!     to handle exceptions indicated in \a mask. The caller must take
 | 
| -  //!     ownership of the \a port members of the returned ExceptionHandler
 | 
| -  //!     objects. If no execption port is registered for a bit in \a mask, \a
 | 
| -  //!     handlers will not contain an entry corresponding to that bit. This is
 | 
| -  //!     a departure from the `*_get_exception_ports()` functions, which may
 | 
| -  //!     return a handler whose port is set to `EXCEPTION_PORT_NULL` in this
 | 
| -  //!     case. On failure, this argument is untouched.
 | 
| +  //!     to handle exceptions indicated in \a mask. If no execption port is
 | 
| +  //!     registered for a bit in \a mask, \a handlers will not contain an entry
 | 
| +  //!     corresponding to that bit. This is a departure from the
 | 
| +  //!     `*_get_exception_ports()` functions, which may return a handler whose
 | 
| +  //!     port is set to `EXCEPTION_PORT_NULL` in this case. On failure, this
 | 
| +  //!     argument is untouched.
 | 
|    //!
 | 
|    //! \return `true` if `*_get_exception_ports()` returned `KERN_SUCCESS`, with
 | 
|    //!     \a handlers set appropriately. `false` otherwise, with an appropriate
 | 
|    //!     message logged.
 | 
|    bool GetExceptionPorts(exception_mask_t mask,
 | 
| -                         std::vector<ExceptionHandler>* handlers) const;
 | 
| +                         ExceptionHandlerVector* handlers) const;
 | 
|  
 | 
|    //! \brief Calls `*_set_exception_ports()` on the target.
 | 
|    //!
 | 
| 
 |