diff options
Diffstat (limited to 'libglusterfs')
-rw-r--r-- | libglusterfs/src/libglusterfs.sym | 1 | ||||
-rw-r--r-- | libglusterfs/src/xlator.c | 31 | ||||
-rw-r--r-- | libglusterfs/src/xlator.h | 2 |
3 files changed, 34 insertions, 0 deletions
diff --git a/libglusterfs/src/libglusterfs.sym b/libglusterfs/src/libglusterfs.sym index c8c42311c80..baf44de64ad 100644 --- a/libglusterfs/src/libglusterfs.sym +++ b/libglusterfs/src/libglusterfs.sym @@ -1121,6 +1121,7 @@ xlator_volume_option_get xlator_volume_option_get_list xlator_memrec_free xlator_mem_cleanup +gluster_graph_take_reference default_fops gf_fop_list gf_upcall_list diff --git a/libglusterfs/src/xlator.c b/libglusterfs/src/xlator.c index cbbe8cf7f12..dedce05d5c3 100644 --- a/libglusterfs/src/xlator.c +++ b/libglusterfs/src/xlator.c @@ -1555,3 +1555,34 @@ glusterfs_delete_volfile_checksum(glusterfs_ctx_t *ctx, const char *volfile_id) return 0; } + +/* + The function is required to take dict ref for every xlator at graph. + At the time of compare graph topology create a graph and populate + key values in the dictionary, after finished graph comparison we do destroy + the new graph.At the time of construct graph we don't take any reference + so to avoid dict leak at the of destroying graph due to ref counter underflow + we need to call dict_ref here. + +*/ + +void +gluster_graph_take_reference(xlator_t *tree) +{ + xlator_t *trav = tree; + xlator_t *prev = tree; + + if (!tree) { + gf_msg("parser", GF_LOG_ERROR, 0, LG_MSG_TREE_NOT_FOUND, + "Translator tree not found"); + return; + } + + while (prev) { + trav = prev->next; + if (prev->options) + dict_ref(prev->options); + prev = trav; + } + return; +} diff --git a/libglusterfs/src/xlator.h b/libglusterfs/src/xlator.h index 64a61ac0bed..30c9e5875e5 100644 --- a/libglusterfs/src/xlator.h +++ b/libglusterfs/src/xlator.h @@ -1082,4 +1082,6 @@ xlator_mem_cleanup(xlator_t *this); void handle_default_options(xlator_t *xl, dict_t *options); +void +gluster_graph_take_reference(xlator_t *tree); #endif /* _XLATOR_H */ |