1
0
mirror of https://github.com/samba-team/samba.git synced 2025-03-27 22:50:26 +03:00

lib/tsocket: optimize syscalls in tstream_readv_pdu_send()

Once we've got the first part of a pdu we try to optimize
readv calls for the rest of the pdu.

Signed-off-by: Stefan Metzmacher <metze@samba.org>
This commit is contained in:
Stefan Metzmacher 2012-11-02 13:56:53 +01:00 committed by Volker Lendecke
parent e42889f83f
commit 719595b6f7

View File

@ -215,6 +215,20 @@ static void tstream_readv_pdu_ask_for_next_vector(struct tevent_req *req)
size_t to_read = 0;
size_t i;
struct tevent_req *subreq;
bool optimize = false;
bool save_optimize = false;
if (state->count > 0) {
/*
* This is not the first time we asked for a vector,
* which means parts of the pdu already arrived.
*
* In this case it make sense to enable
* a syscall/performance optimization if the
* low level tstream implementation supports it.
*/
optimize = true;
}
TALLOC_FREE(state->vector);
state->count = 0;
@ -258,11 +272,26 @@ static void tstream_readv_pdu_ask_for_next_vector(struct tevent_req *req)
return;
}
if (optimize) {
/*
* If the low level stream is a bsd socket
* we will get syscall optimization.
*
* If it is not a bsd socket
* tstream_bsd_optimize_readv() just returns.
*/
save_optimize = tstream_bsd_optimize_readv(state->caller.stream,
true);
}
subreq = tstream_readv_send(state,
state->caller.ev,
state->caller.stream,
state->vector,
state->count);
if (optimize) {
tstream_bsd_optimize_readv(state->caller.stream,
save_optimize);
}
if (tevent_req_nomem(subreq, req)) {
return;
}