urcu,defer_rcu: Make defer_rcu encoding more compact for marker
[urcu.git] / urcu-call-rcu-impl.h
index f9250e8b4129b925aeb7b47f609d3e91dd3f790d..d5b75c076de22de777244cc26fb86f0791f898a5 100644 (file)
@@ -609,6 +609,8 @@ void call_rcu_data_free(struct call_rcu_data *crdp)
                _CMM_STORE_SHARED(crdp->cbs.head, NULL);
                cbs_tail = (struct cds_wfq_node **)
                        uatomic_xchg(&crdp->cbs.tail, &crdp->cbs.head);
+               /* Create default call rcu data if need be */
+               (void) get_default_call_rcu_data();
                cbs_endprev = (struct cds_wfq_node **)
                        uatomic_xchg(&default_call_rcu_data, cbs_tail);
                *cbs_endprev = cbs;
@@ -617,7 +619,10 @@ void call_rcu_data_free(struct call_rcu_data *crdp)
                wake_call_rcu_thread(default_call_rcu_data);
        }
 
+       call_rcu_lock(&call_rcu_mutex);
        cds_list_del(&crdp->list);
+       call_rcu_unlock(&call_rcu_mutex);
+
        free(crdp);
 }
 
This page took 0.023757 seconds and 4 git commands to generate.