From c6c4e2de22cd3d84f45f5c21e6b09b09274f7f7b Mon Sep 17 00:00:00 2001 From: Jeremy Allison Date: Fri, 28 Feb 2020 15:35:46 -0800 Subject: [PATCH] s3: VFS: vfs_glusterfs. Pass in struct vfs_gluster_pread_state as the callback data to the subreq. Find the req we're finishing off by looking inside vfs_gluster_pread_state. In a shutdown close the caller calls talloc_free(req), so we can't access it directly as callback data. The next commit will NULL out the vfs_gluster_pread_state->req pointer when a caller calls talloc_free(req), and the request is still in flight. BUG: https://bugzilla.samba.org/show_bug.cgi?id=14301 Signed-off-by: Jeremy Allison Reviewed-by: Volker Lendecke --- source3/modules/vfs_glusterfs.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/source3/modules/vfs_glusterfs.c b/source3/modules/vfs_glusterfs.c index 6598aadad17..84b284152c6 100644 --- a/source3/modules/vfs_glusterfs.c +++ b/source3/modules/vfs_glusterfs.c @@ -766,7 +766,7 @@ static struct tevent_req *vfs_gluster_pread_send(struct vfs_handle_struct if (tevent_req_nomem(subreq, req)) { return tevent_req_post(req, ev); } - tevent_req_set_callback(subreq, vfs_gluster_pread_done, req); + tevent_req_set_callback(subreq, vfs_gluster_pread_done, state); talloc_set_destructor(state, vfs_gluster_pread_state_destructor); @@ -812,10 +812,9 @@ static int vfs_gluster_pread_state_destructor(struct vfs_gluster_pread_state *st static void vfs_gluster_pread_done(struct tevent_req *subreq) { - struct tevent_req *req = tevent_req_callback_data( - subreq, struct tevent_req); - struct vfs_gluster_pread_state *state = tevent_req_data( - req, struct vfs_gluster_pread_state); + struct vfs_gluster_pread_state *state = tevent_req_callback_data( + subreq, struct vfs_gluster_pread_state); + struct tevent_req *req = state->req; int ret; ret = pthreadpool_tevent_job_recv(subreq); -- 2.47.2