[SCM] Samba Shared Repository - branch master updated - release-4-0-0alpha6-465-g94d1dbb

Volker Lendecke vlendec at samba.org
Wed Feb 4 21:37:19 GMT 2009


The branch, master has been updated
       via  94d1dbbaf01acff05dc0237470268ec85d02fdbb (commit)
      from  f24eecffde12937103dfce9bf91a69742eb75b29 (commit)

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 94d1dbbaf01acff05dc0237470268ec85d02fdbb
Author: Volker Lendecke <vl at samba.org>
Date:   Wed Feb 4 22:35:23 2009 +0100

    Restore correct handling of "is_data_available" for the socket transport
    
    This fixes a valgrind error reading an uninitialized variable

-----------------------------------------------------------------------

Summary of changes:
 source3/rpc_server/srv_pipe_hnd.c |   13 +++++++++++++
 1 files changed, 13 insertions(+), 0 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source3/rpc_server/srv_pipe_hnd.c b/source3/rpc_server/srv_pipe_hnd.c
index fa38176..30d0cf4 100644
--- a/source3/rpc_server/srv_pipe_hnd.c
+++ b/source3/rpc_server/srv_pipe_hnd.c
@@ -1221,6 +1221,7 @@ NTSTATUS np_write_recv(struct async_req *req, ssize_t *pnwritten)
 struct np_read_state {
 	ssize_t nread;
 	bool is_data_outstanding;
+	int fd;
 };
 
 static void np_read_done(struct async_req *subreq);
@@ -1255,6 +1256,7 @@ struct async_req *np_read_send(TALLOC_CTX *mem_ctx, struct event_context *ev,
 			handle->private_data, struct np_proxy_state);
 
 		state->nread = len;
+		state->fd = p->fd;
 
 		subreq = recvall_send(state, ev, p->fd, data, len, 0);
 		if (subreq == NULL) {
@@ -1279,13 +1281,24 @@ static void np_read_done(struct async_req *subreq)
 {
 	struct async_req *req = talloc_get_type_abort(
 		subreq->async.priv, struct async_req);
+	struct np_read_state *state = talloc_get_type_abort(
+		req->private_data, struct np_read_state);
 	NTSTATUS status;
+	int available = 0;
 
 	status = recvall_recv(subreq);
 	if (!NT_STATUS_IS_OK(status)) {
 		async_req_nterror(req, status);
 		return;
 	}
+
+	/*
+	 * We don't look at the ioctl result. We don't really care if there is
+	 * data available, because this is racy anyway.
+	 */
+	ioctl(state->fd, FIONREAD, &available);
+	state->is_data_outstanding = (available > 0);
+
 	async_req_done(req);
 }
 


-- 
Samba Shared Repository


More information about the samba-cvs mailing list