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:
parent
e42889f83f
commit
719595b6f7
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user