Skip to content

Commit 4d9fbbf

Browse files
authored
fix/sslclient-spinlock (#1339)
1 parent feee595 commit 4d9fbbf

File tree

2 files changed

+17
-5
lines changed

2 files changed

+17
-5
lines changed

src/dpp/sslclient.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -373,11 +373,6 @@ void ssl_client::on_read(socket fd, const struct socket_events& ev) {
373373
}
374374

375375
void ssl_client::on_write(socket fd, const struct socket_events& e) {
376-
/* We wanted to write before so keep it */
377-
socket_events new_se{e};
378-
new_se.flags |= WANT_WRITE;
379-
owner->socketengine->update_socket(new_se);
380-
381376
if (!tcp_connect_done) {
382377
tcp_connect_done = true;
383378
}

src/dpp/wsclient.cpp

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,23 @@ void websocket_client::write(const std::string_view data, ws_opcode _opcode)
129129
ssl_client::socket_write(header);
130130
ssl_client::socket_write(data);
131131
}
132+
133+
bool should_append_want_write = false;
134+
socket_events *new_se = nullptr;
135+
{
136+
std::lock_guard lk(owner->socketengine->fds_mutex);
137+
auto i = owner->socketengine->fds.find(sfd);
138+
139+
should_append_want_write = i != owner->socketengine->fds.end() && (i->second->flags & WANT_WRITE) != WANT_WRITE;
140+
if (should_append_want_write) {
141+
new_se = i->second.get();
142+
new_se->flags |= WANT_WRITE;
143+
}
144+
}
145+
146+
if (should_append_want_write) {
147+
owner->socketengine->update_socket(*new_se);
148+
}
132149
}
133150

134151
bool websocket_client::handle_buffer(std::string& buffer)

0 commit comments

Comments
 (0)