diff options
author | Shyam <srangana@redhat.com> | 2014-09-16 13:56:39 -0400 |
---|---|---|
committer | Vijay Bellur <vbellur@redhat.com> | 2014-09-16 21:29:09 -0700 |
commit | 9c7baab43b6e00a62bfa155df5d61f5ad49c652a (patch) | |
tree | 6dabeb64a15d7aaf147a30b4edb2b4321442b314 | |
parent | a6499d32292ca5a1418e1c785d617317226b2f53 (diff) |
cluster/dht: Fixed double UNWIND in lookup everywhere code
In dht_lookup_everywhere_done:
Line: 1194 we call DHT_STACK_UNWIND
and in the same if condition we go ahead and call, goto
unwind_hashed_and_cached; which at Line 1371 calls another UNWIND.
As is obvious, higher frames could cleanup their locals and on
receiving the next unwind could cause a coredump of the process.
Fixed the same by calling the required return post the first unwind
Change-Id: Ic5d57da98255b8616a65b4caaedabeba9144fd49
BUG: 1142409
Signed-off-by: Shyam <srangana@redhat.com>
Reviewed-on-master: http://review.gluster.org/8666
Reviewed-by: N Balachandran <nbalacha@redhat.com>
Reviewed-by: Vijay Bellur <vbellur@redhat.com>
Reviewed-by: Jeff Darcy <jdarcy@redhat.com>
Tested-by: Gluster Build System <jenkins@build.gluster.com>
Reviewed-by: susant palai <spalai@redhat.com>
Reviewed-on: http://review.gluster.org/8751
-rw-r--r-- | xlators/cluster/dht/src/dht-common.c | 8 |
1 files changed, 4 insertions, 4 deletions
diff --git a/xlators/cluster/dht/src/dht-common.c b/xlators/cluster/dht/src/dht-common.c index d6fe0ffc0ec..0b799932931 100644 --- a/xlators/cluster/dht/src/dht-common.c +++ b/xlators/cluster/dht/src/dht-common.c @@ -1191,11 +1191,11 @@ dht_lookup_everywhere_done (call_frame_t *frame, xlator_t *this) local->skip_unlink.hashed_gfid)){ /*GFID different, return error*/ - DHT_STACK_UNWIND (lookup, frame, -1, - ESTALE, NULL, NULL, NULL, - NULL); - + DHT_STACK_UNWIND (lookup, frame, -1, + ESTALE, NULL, NULL, + NULL, NULL); + return 0; } ret = dht_layout_preset (this, cached_subvol, |