Question about crossbeam epoch

this example is from doc
in that use unlinked but in new version not
exist , i use defer_destroy
but raise : double free error

pub fn pop(&self) -> Option<T> {

        // become active
        let guard = &epoch::pin();


       loop {
            // snapshot current head
            let shared = self.head.load(Ordering::Acquire, guard);

            // match over head.as_ref
            match unsafe { shared.as_ref() }  {
                Some(head) => {

                    // read through the snapshot, *safely*!
                    let next = head.next.load(Ordering::Relaxed, guard);

                    if let Ok(_) = self.head.compare_exchange(shared, 
                                                              next, 
                                                              Ordering::Release, 
                                                              Ordering::Relaxed, 
                                                              guard) 
                    {
                        unsafe {
                            guard.defer_destroy(shared);

                            return Some(ptr::read(&(head).value))
                        }

                    }
                
                }
                None => return None
            }
       }
    }