From: Jeremy Allison Date: Fri, 28 Feb 2020 00:49:38 +0000 (-0800) Subject: s3: VFS: vfs_default. Pass in struct vfswrap_pwrite_state as the callback data to... X-Git-Tag: ldb-2.2.0~1506 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=13e25d68385aa951115e0e063ec6a9a281fea4a4;p=thirdparty%2Fsamba.git s3: VFS: vfs_default. Pass in struct vfswrap_pwrite_state as the callback data to the subreq. Find the req we're finishing off by looking inside vfswrap_pwrite_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 vfswrap_pwrite_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 --- diff --git a/source3/modules/vfs_default.c b/source3/modules/vfs_default.c index cbc8335cd12..641764e41f1 100644 --- a/source3/modules/vfs_default.c +++ b/source3/modules/vfs_default.c @@ -976,7 +976,7 @@ static struct tevent_req *vfswrap_pwrite_send(struct vfs_handle_struct *handle, if (tevent_req_nomem(subreq, req)) { return tevent_req_post(req, ev); } - tevent_req_set_callback(subreq, vfs_pwrite_done, req); + tevent_req_set_callback(subreq, vfs_pwrite_done, state); talloc_set_destructor(state, vfs_pwrite_state_destructor); @@ -1017,10 +1017,9 @@ static int vfs_pwrite_state_destructor(struct vfswrap_pwrite_state *state) static void vfs_pwrite_done(struct tevent_req *subreq) { - struct tevent_req *req = tevent_req_callback_data( - subreq, struct tevent_req); - struct vfswrap_pwrite_state *state = tevent_req_data( - req, struct vfswrap_pwrite_state); + struct vfswrap_pwrite_state *state = tevent_req_callback_data( + subreq, struct vfswrap_pwrite_state); + struct tevent_req *req = state->req; int ret; ret = pthreadpool_tevent_job_recv(subreq);