diff options
author | Sam Liddicott <sam@liddicott.com> | 2009-06-09 12:51:44 +0100 |
---|---|---|
committer | Stefan Metzmacher <metze@samba.org> | 2009-06-09 18:51:31 +0200 |
commit | ebf5523b6e2ae00d820d2c2d31c2f24aab020f91 (patch) | |
tree | 9590dbcd366b0d7756b604f7297e617b3b6f8707 /source4/libcli | |
parent | 38cd0e086f50ce54d88a19aa5a6803469af90489 (diff) | |
download | samba-ebf5523b6e2ae00d820d2c2d31c2f24aab020f91.tar.gz samba-ebf5523b6e2ae00d820d2c2d31c2f24aab020f91.tar.bz2 samba-ebf5523b6e2ae00d820d2c2d31c2f24aab020f91.zip |
s4: smbcli_transport_send hit the socket right away if possible
[Metze; "make test" on git master outputs exactly the same test summary
with our without this patch (apart from the "using seed" lines)]
If the transport socket is writable, then push the queue along
rather than wait until the caller returns back to the tevent loop.
This strategy keeps the sockets piping hot, and is particularly good
for cases where reading requests from one socket causes lots of
writes on another socket, or where lots of writes are made in a batch.
It doesn't matter if the socket is not writeable yet, packet_queue_run
will return quite cheaply in such a case.
Signed-off-by: Sam Liddicott <sam@liddicott.com>
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Diffstat (limited to 'source4/libcli')
-rw-r--r-- | source4/libcli/raw/clitransport.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/source4/libcli/raw/clitransport.c b/source4/libcli/raw/clitransport.c index 0ced607b1e..f5e81cd6f6 100644 --- a/source4/libcli/raw/clitransport.c +++ b/source4/libcli/raw/clitransport.c @@ -593,6 +593,13 @@ void smbcli_transport_send(struct smbcli_request *req) return; } + packet_queue_run(req->transport->packet); + if (req->transport->socket->sock == NULL) { + req->state = SMBCLI_REQUEST_ERROR; + req->status = NT_STATUS_NET_WRITE_FAULT; + return; + } + if (req->one_way_request) { req->state = SMBCLI_REQUEST_DONE; smbcli_request_destroy(req); |