s3:vfs: fix valgrind warning in SMB_VFS_{PREAD,PWRITE,FSYNC}_RECV()
authorStefan Metzmacher <metze@samba.org>
Wed, 29 Aug 2018 02:24:46 +0000 (04:24 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 4 Sep 2018 08:45:10 +0000 (10:45 +0200)
tevent_req_received() destroys 'state', so we need helper variables
to hold the return value.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
Autobuild-User(master): Stefan Metzmacher <metze@samba.org>
Autobuild-Date(master): Tue Sep  4 10:45:10 CEST 2018 on sn-devel-144

source3/smbd/vfs.c

index 2687e3540b89e916b05d942fa606fe88db68ba4b..a6c49cfad341428eed91a6771601520399e07a4b 100644 (file)
@@ -2579,14 +2579,16 @@ ssize_t SMB_VFS_PREAD_RECV(struct tevent_req *req,
 {
        struct smb_vfs_call_pread_state *state = tevent_req_data(
                req, struct smb_vfs_call_pread_state);
+       ssize_t retval;
 
        if (tevent_req_is_unix_error(req, &vfs_aio_state->error)) {
                tevent_req_received(req);
                return -1;
        }
        *vfs_aio_state = state->vfs_aio_state;
+       retval = state->retval;
        tevent_req_received(req);
-       return state->retval;
+       return retval;
 }
 
 ssize_t smb_vfs_call_pwrite(struct vfs_handle_struct *handle,
@@ -2653,14 +2655,16 @@ ssize_t SMB_VFS_PWRITE_RECV(struct tevent_req *req,
 {
        struct smb_vfs_call_pwrite_state *state = tevent_req_data(
                req, struct smb_vfs_call_pwrite_state);
+       ssize_t retval;
 
        if (tevent_req_is_unix_error(req, &vfs_aio_state->error)) {
                tevent_req_received(req);
                return -1;
        }
        *vfs_aio_state = state->vfs_aio_state;
+       retval = state->retval;
        tevent_req_received(req);
-       return state->retval;
+       return retval;
 }
 
 off_t smb_vfs_call_lseek(struct vfs_handle_struct *handle,
@@ -2748,14 +2752,16 @@ int SMB_VFS_FSYNC_RECV(struct tevent_req *req, struct vfs_aio_state *vfs_aio_sta
 {
        struct smb_vfs_call_fsync_state *state = tevent_req_data(
                req, struct smb_vfs_call_fsync_state);
+       ssize_t retval;
 
        if (tevent_req_is_unix_error(req, &vfs_aio_state->error)) {
                tevent_req_received(req);
                return -1;
        }
        *vfs_aio_state = state->vfs_aio_state;
+       retval = state->retval;
        tevent_req_received(req);
-       return state->retval;
+       return retval;
 }
 
 /*