[Bugs] [Bug 1392289] gfapi clients crash while using async calls due to double fd_unref
bugzilla at redhat.com
bugzilla at redhat.com
Tue Nov 8 10:38:03 UTC 2016
https://bugzilla.redhat.com/show_bug.cgi?id=1392289
--- Comment #3 from Worker Ant <bugzilla-bot at gluster.org> ---
COMMIT: http://review.gluster.org/15780 committed in release-3.7 by Raghavendra
Talur (rtalur at redhat.com)
------
commit f593a4d7d1cd972e2fa65d1dac471d0bebee7235
Author: Raghavendra Talur <rtalur at redhat.com>
Date: Wed Nov 2 19:51:26 2016 +0530
gfapi: async fops should unref in callbacks
If fd is unref'd at the end of async call then the unref in cbks would
lead to double unref and possible crash. Removing duplicate unrefs.
Added unref only in failure cases.
This backport to 3.7 branch does not have tests because gfapi tests are
not configured properly on 3.7 branch.
Details:
All glfd based calls in libgfapi, except for glfs_open and glfs_close,
behave in the same way. At the start of the operation, they take a ref
on glfd and fd. At the end of the operation, they unref it. Async calls
are a little different as they unref in the cbk function. A successfull
open call does not unref either the glfd or fd, thereby functioning as a
reference for a OPEN file object. glfs_close makes a syncop_flush call
sandwiched between a fd ref and unref(this can be removed, more on this
below), followed by a call to glfs_mark_glfd_for_deletion which unrefs
glfd and also calls glfs_fd_destroy as a release function thereby doing
a unref on fd too.
Functionally, there is no problem with how everything works when as
described above. However, it is a little non-intuitive that we need to
perform a fd_unref as a consequence of a implicit fd_ref that happens
within glfs_resolve_fd. As we perform a GF_REF_GET(glfd) at the start of
every operation, it would be worthwhile to remove the fd_ref that
glfs_resovle_fd takes and do away with explicit fd_unref()s at the end
of every operation. This is the same reason why we don't need the fd_ref
in glfs_close. This is however not in the scope of this patch.
Change-Id: I86b1d3b2ad846b16ea527d541dc82b5e90b0ba85
BUG: 1392289
Signed-off-by: Raghavendra Talur <rtalur at redhat.com>
Reviewed-on: http://review.gluster.org/15768
Smoke: Gluster Build System <jenkins at build.gluster.org>
NetBSD-regression: NetBSD Build System <jenkins at build.gluster.org>
Reviewed-by: Rajesh Joseph <rjoseph at redhat.com>
Reviewed-by: Xavier Hernandez <xhernandez at datalab.es>
Reviewed-by: soumya k <skoduri at redhat.com>
Reviewed-by: Prasanna Kumar Kalever <pkalever at redhat.com>
CentOS-regression: Gluster Build System <jenkins at build.gluster.org>
Reviewed-by: Shyamsundar Ranganathan <srangana at redhat.com>
(cherry picked from commit e65738818dd22462ec00dda021566654d1c702b1)
Reviewed-on: http://review.gluster.org/15780
--
You are receiving this mail because:
You are on the CC list for the bug.
You are the assignee for the bug.
More information about the Bugs
mailing list