mirror of
https://github.com/moonlight-stream/moonlight-common-c.git
synced 2025-07-01 23:35:58 +00:00
Fix propagation of errors from enet_host_service() in sendMessageEnet()
This commit is contained in:
parent
e8113f0e66
commit
fb2b103e51
@ -722,15 +722,16 @@ static bool sendMessageEnet(short ptype, short paylen, const void* payload, uint
|
|||||||
|
|
||||||
// Queue the packet to be sent
|
// Queue the packet to be sent
|
||||||
err = enet_peer_send(peer, channelId, enetPacket);
|
err = enet_peer_send(peer, channelId, enetPacket);
|
||||||
|
bool packetQueued = (err == 0);
|
||||||
|
|
||||||
// If there is no more data coming soon, send the packet now
|
// If there is no more data coming soon, send the packet now
|
||||||
if (!moreData) {
|
if (!moreData && packetQueued) {
|
||||||
enet_host_service(client, NULL, 0);
|
err = enet_host_service(client, NULL, 0);
|
||||||
|
|
||||||
// Wait until the packet is actually sent to provide backpressure on senders
|
// Wait until the packet is actually sent to provide backpressure on senders
|
||||||
if (err == 0 && (flags & ENET_PACKET_FLAG_RELIABLE)) {
|
if (flags & ENET_PACKET_FLAG_RELIABLE) {
|
||||||
// Don't wait longer than 10 milliseconds to avoid blocking callers for too long
|
// Don't wait longer than 10 milliseconds to avoid blocking callers for too long
|
||||||
for (int i = 0; i < 10; i++) {
|
for (int i = 0; err >= 0 && i < 10; i++) {
|
||||||
// Break on disconnected, acked/freed, or sent (pending ack).
|
// Break on disconnected, acked/freed, or sent (pending ack).
|
||||||
if (peer->state != ENET_PEER_STATE_CONNECTED || packetFreed || isPacketSentWaitingForAck(enetPacket)) {
|
if (peer->state != ENET_PEER_STATE_CONNECTED || packetFreed || isPacketSentWaitingForAck(enetPacket)) {
|
||||||
break;
|
break;
|
||||||
@ -742,10 +743,10 @@ static bool sendMessageEnet(short ptype, short paylen, const void* payload, uint
|
|||||||
PltLockMutex(&enetMutex);
|
PltLockMutex(&enetMutex);
|
||||||
|
|
||||||
// Try to send the packet again
|
// Try to send the packet again
|
||||||
enet_host_service(client, NULL, 0);
|
err = enet_host_service(client, NULL, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (peer->state == ENET_PEER_STATE_CONNECTED && !packetFreed && !isPacketSentWaitingForAck(enetPacket)) {
|
if (err >= 0 && peer->state == ENET_PEER_STATE_CONNECTED && !packetFreed && !isPacketSentWaitingForAck(enetPacket)) {
|
||||||
Limelog("Control message took over 10 ms to send (net latency: %u ms | packet loss: %f%%)\n",
|
Limelog("Control message took over 10 ms to send (net latency: %u ms | packet loss: %f%%)\n",
|
||||||
peer->roundTripTime, peer->packetLoss / (float)ENET_PEER_PACKET_LOSS_SCALE);
|
peer->roundTripTime, peer->packetLoss / (float)ENET_PEER_PACKET_LOSS_SCALE);
|
||||||
}
|
}
|
||||||
@ -762,7 +763,9 @@ static bool sendMessageEnet(short ptype, short paylen, const void* payload, uint
|
|||||||
|
|
||||||
if (err < 0) {
|
if (err < 0) {
|
||||||
Limelog("Failed to send ENet control packet\n");
|
Limelog("Failed to send ENet control packet\n");
|
||||||
enet_packet_destroy(enetPacket);
|
if (!packetQueued) {
|
||||||
|
enet_packet_destroy(enetPacket);
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user