about summary refs log tree commit
path: root/ext/rpatricia/rpatricia.c
diff options
context:
space:
mode:
Diffstat (limited to 'ext/rpatricia/rpatricia.c')
-rw-r--r--ext/rpatricia/rpatricia.c9
1 files changed, 6 insertions, 3 deletions
diff --git a/ext/rpatricia/rpatricia.c b/ext/rpatricia/rpatricia.c
index 1c81ba1..ae018af 100644
--- a/ext/rpatricia/rpatricia.c
+++ b/ext/rpatricia/rpatricia.c
@@ -33,10 +33,13 @@ p_node_mark (void *ptr)
 }
 
 static VALUE
-wrap_node(patricia_node_t *node)
+wrap_node(patricia_node_t *orig)
 {
-  /* node will be freed when parent is freed */
-  return Data_Wrap_Struct(cNode, p_node_mark, 0, node);
+  patricia_node_t *node = ALLOC(patricia_node_t);
+
+  memcpy(node, orig, sizeof(patricia_node_t));
+
+  return Data_Wrap_Struct(cNode, p_node_mark, -1, node);
 }
 
 static prefix_t *