Skip to content

Commit 78c5aa2

Browse files
committed
fix: fixes
1 parent 83f60b7 commit 78c5aa2

File tree

1 file changed

+11
-7
lines changed

1 file changed

+11
-7
lines changed

src/server/channel_store.cc

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ extern "C" {
1010
#include "redis/util.h"
1111
}
1212

13+
#include <absl/container/fixed_array.h>
14+
1315
#include "base/logging.h"
1416
#include "server/engine_shard_set.h"
1517
#include "server/server_state.h"
@@ -25,25 +27,27 @@ bool Matches(string_view pattern, string_view channel) {
2527

2628
// Build functor for sending messages to connection
2729
auto BuildSender(string_view channel, facade::ArgRange messages) {
30+
absl::FixedArray<string_view, 1> views(messages.Size());
2831
size_t messages_size = accumulate(messages.begin(), messages.end(), 0,
2932
[](int sum, string_view str) { return sum + str.size(); });
3033
auto buf = shared_ptr<char[]>{new char[channel.size() + messages_size]};
3134
{
3235
memcpy(buf.get(), channel.data(), channel.size());
3336
char* ptr = buf.get() + channel.size();
37+
38+
size_t i = 0;
3439
for (string_view message : messages) {
3540
memcpy(ptr, message.data(), message.size());
41+
views[i++] = {ptr, message.size()};
3642
ptr += message.size();
3743
}
3844
}
3945

40-
return [channel, buf = std::move(buf), messages](facade::Connection* conn, string pattern) {
41-
size_t offset = channel.size();
42-
for (std::string_view message : messages) {
43-
conn->SendPubMessageAsync({std::move(pattern), buf, string_view{buf.get(), channel.size()},
44-
string_view{buf.get() + offset, message.size()}});
45-
offset += message.size();
46-
}
46+
return [channel, buf = std::move(buf), views = std::move(views)](facade::Connection* conn,
47+
string pattern) {
48+
string_view channel_view{buf.get(), channel.size()};
49+
for (std::string_view message_view : views)
50+
conn->SendPubMessageAsync({std::move(pattern), buf, channel_view, message_view});
4751
};
4852
}
4953

0 commit comments

Comments
 (0)