- /* bump the reference.count first */
- if (reference) {
- assert(p_atomic_read(&reference->count) != 0);
- p_atomic_inc(&reference->count);
- }
-
- if (*ptr) {
- assert(p_atomic_read(&(*ptr)->count) != 0);
- if (p_atomic_dec_zero(&(*ptr)->count)) {
- destroy = TRUE;
+ if(*ptr != reference) {
+ /* bump the reference.count first */
+ if (reference) {
+ assert(pipe_is_referenced(reference));
+ p_atomic_inc(&reference->count);
+ }
+
+ if (*ptr) {
+ assert(pipe_is_referenced(*ptr));
+ if (p_atomic_dec_zero(&(*ptr)->count)) {
+ destroy = TRUE;
+ }