Opened 18 years ago
Closed 18 years ago
#286 closed Bugs (Invalid)
intrusive_ptr may cause dungling ptr access
| Reported by: | nobody | Owned by: | Peter Dimov | 
|---|---|---|---|
| Milestone: | Component: | smart_ptr | |
| Version: | None | Severity: | |
| Keywords: | Cc: | 
Description
I think intrusive_ptr may cause dungling ptr access in 
multithreaded environment.
Currently, it's constructor is:
    intrusive_ptr(T * p, bool add_ref = true)
    : p_(p)  /* the object may be deleted by other 
thread 
                because this thread does not increment 
reference counter yet. */
    {
        if(p_ != 0 && add_ref)
            intrusive_ptr_add_ref(p_); /* this may occur 
dungling ptr operation. */
    }
We can avoid this problem by "addref-before-use" policy.
    intrusive_ptr(T * p, bool add_ref = true)
    {
        if(p != 0 && add_ref)
            intrusive_ptr_add_ref(p_); /* other thread 
never delete the object */
        p_ = p;
    }
      
  Note:
 See   TracTickets
 for help on using tickets.
    
