mirror of
https://github.com/matrix-construct/construct
synced 2024-09-28 19:58:53 +02:00
modules/client/sync: Reuse scratch buffer on longpoll handles.
This commit is contained in:
parent
5d06042140
commit
0e6e556d50
2 changed files with 11 additions and 11 deletions
|
@ -611,6 +611,11 @@ ircd::m::sync::longpoll::poll(data &data,
|
||||||
const args &args)
|
const args &args)
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
const unique_buffer<mutable_buffer> scratch
|
||||||
|
{
|
||||||
|
96_KiB
|
||||||
|
};
|
||||||
|
|
||||||
const scope_count polling{longpoll::polling}; do
|
const scope_count polling{longpoll::polling}; do
|
||||||
{
|
{
|
||||||
if(!dock.wait_until(args.timesout))
|
if(!dock.wait_until(args.timesout))
|
||||||
|
@ -636,7 +641,7 @@ try
|
||||||
if(polylog_only)
|
if(polylog_only)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if(handle(data, args, accepted))
|
if(handle(data, args, accepted, scratch))
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
while(1);
|
while(1);
|
||||||
|
@ -669,7 +674,8 @@ catch(const std::exception &e)
|
||||||
bool
|
bool
|
||||||
ircd::m::sync::longpoll::handle(data &data,
|
ircd::m::sync::longpoll::handle(data &data,
|
||||||
const args &args,
|
const args &args,
|
||||||
const accepted &event)
|
const accepted &event,
|
||||||
|
const mutable_buffer &scratch)
|
||||||
{
|
{
|
||||||
const scope_restore their_event
|
const scope_restore their_event
|
||||||
{
|
{
|
||||||
|
@ -686,15 +692,9 @@ ircd::m::sync::longpoll::handle(data &data,
|
||||||
data.client_txnid, event.client_txnid
|
data.client_txnid, event.client_txnid
|
||||||
};
|
};
|
||||||
|
|
||||||
const unique_buffer<mutable_buffer> buf
|
|
||||||
{
|
|
||||||
// must be at least worst-case size of m::event plus some.
|
|
||||||
std::max(size_t(linear_buffer_size), size_t(96_KiB))
|
|
||||||
};
|
|
||||||
|
|
||||||
const size_t consumed
|
const size_t consumed
|
||||||
{
|
{
|
||||||
linear_proffer_event(data, buf)
|
linear_proffer_event(data, scratch)
|
||||||
};
|
};
|
||||||
|
|
||||||
if(!consumed)
|
if(!consumed)
|
||||||
|
@ -704,7 +704,7 @@ ircd::m::sync::longpoll::handle(data &data,
|
||||||
{
|
{
|
||||||
string_view
|
string_view
|
||||||
{
|
{
|
||||||
buffer::data(buf), consumed
|
buffer::data(scratch), consumed
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -41,7 +41,7 @@ namespace ircd::m::sync::longpoll
|
||||||
std::deque<accepted> queue;
|
std::deque<accepted> queue;
|
||||||
ctx::dock dock;
|
ctx::dock dock;
|
||||||
|
|
||||||
static bool handle(data &, const args &, const accepted &);
|
static bool handle(data &, const args &, const accepted &, const mutable_buffer &scratch);
|
||||||
static bool poll(data &, const args &);
|
static bool poll(data &, const args &);
|
||||||
static void handle_notify(const m::event &, m::vm::eval &);
|
static void handle_notify(const m::event &, m::vm::eval &);
|
||||||
extern m::hookfn<m::vm::eval &> notified;
|
extern m::hookfn<m::vm::eval &> notified;
|
||||||
|
|
Loading…
Reference in a new issue