tier/create: Dynamically allocate gfid memory

Currently we are storing the memory as a static pointer.
There is a chance to go that variable in out of scope.
So we should allocate in Dynamic way.

Change-Id: I096876deb8055ac3a44681599591a0a032bc0c24
BUG: 1290677
Signed-off-by: Mohammed Rafi KC <rkavunga@redhat.com>
Reviewed-on: http://review.gluster.org/13102
Tested-by: NetBSD Build System <jenkins@build.gluster.org>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: N Balachandran <nbalacha@redhat.com>
Reviewed-by: Dan Lambright <dlambrig@redhat.com>
Tested-by: Dan Lambright <dlambrig@redhat.com>
This commit is contained in:
Mohammed Rafi KC 2015-12-28 19:31:36 +05:30 committed by Dan Lambright
parent 137b11d616
commit 4b52e6c0d7

View File

@ -135,6 +135,7 @@ tier_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,
xlator_t *cached_subvol = NULL;
dht_conf_t *conf = NULL;
int ret = -1;
unsigned char *gfid = NULL;
local = frame->local;
if (!local) {
@ -159,9 +160,19 @@ tier_create_linkfile_create_cbk (call_frame_t *frame, void *cookie,
if (local->params) {
dict_del (local->params, conf->link_xattr_name);
dict_del (local->params, GLUSTERFS_INTERNAL_FOP_KEY);
ret = dict_set_static_bin (local->params, TIER_LINKFILE_GFID,
stbuf->ia_gfid, 16);
gfid = GF_CALLOC (1, sizeof (uuid_t), gf_common_mt_char);
if (!gfid) {
local->op_errno = ENOMEM;
op_errno = ENOMEM;
goto err;
}
gf_uuid_copy (gfid, stbuf->ia_gfid);
ret = dict_set_dynptr (local->params, TIER_LINKFILE_GFID,
gfid, sizeof (uuid_t));
if (ret) {
GF_FREE (gfid);
gf_msg (this->name, GF_LOG_WARNING, 0,
DHT_MSG_DICT_SET_FAILED,
"Failed to set dictionary value"