- shadow_node->node = node;
- pthread_mutex_init(&shadow_node->lock, NULL);
+ shadow_node->node = new_node;
+ /*
+ * Lock can be inherited from previous node at this position.
+ */
+ if (inherit_from) {
+ shadow_node->lock = inherit_from->lock;
+ } else {
+ shadow_node->lock = calloc(sizeof(*shadow_node->lock), 1);
+ if (!shadow_node->lock) {
+ free(shadow_node);
+ return -ENOMEM;
+ }
+ pthread_mutex_init(shadow_node->lock, NULL);
+ }