Skip to content

Commit

Permalink
Fix error handling logic in try_setting_buffer_size (#5631)
Browse files Browse the repository at this point in the history
* Refs #22208. Fix error handling logic in `try_setting_buffer_size`.

Signed-off-by: Miguel Company <[email protected]>

* Refs #22756. Apply suggestion.

Signed-off-by: Miguel Company <[email protected]>

---------

Signed-off-by: Miguel Company <[email protected]>
(cherry picked from commit 7259840)

# Conflicts:
#	src/cpp/rtps/transport/asio_helpers.hpp
  • Loading branch information
MiguelCompany authored and mergify[bot] committed Feb 10, 2025
1 parent 657c521 commit 8275651
Showing 1 changed file with 39 additions and 0 deletions.
39 changes: 39 additions & 0 deletions src/cpp/rtps/transport/asio_helpers.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -50,21 +50,60 @@ struct asio_helpers
{
asio::error_code ec;

assert(initial_buffer_value >= minimum_buffer_value);

final_buffer_value = initial_buffer_value;
while (final_buffer_value >= minimum_buffer_value)
{
socket.set_option(BufferOptionType(static_cast<int32_t>(final_buffer_value)), ec);
if (!ec)
{
<<<<<<< HEAD
return true;
=======
BufferOptionType option;
socket.get_option(option, ec);
if (!ec)
{
if (option.value() == value_to_set)
{
// Option actually set to the desired value
return true;
}
// Try again with the value actually set
final_buffer_value = option.value();
continue;
}
// Could not determine the actual value, even though the option was set successfully.
// The current buffer size is not defined.
return false;
>>>>>>> 72598404 (Fix error handling logic in `try_setting_buffer_size` (#5631))
}

final_buffer_value /= 2;
}

final_buffer_value = minimum_buffer_value;
<<<<<<< HEAD
socket.set_option(BufferOptionType(final_buffer_value), ec);
return !ec;
=======
int32_t value_to_set = static_cast<int32_t>(final_buffer_value);
socket.set_option(BufferOptionType(value_to_set), ec);
if (!ec)
{
// Last attempt was successful. Get the actual value set.
int32_t max_value = static_cast<int32_t>(initial_buffer_value);
BufferOptionType option;
socket.get_option(option, ec);
if (!ec && (option.value() >= value_to_set) && (option.value() <= max_value))
{
final_buffer_value = option.value();
return true;
}
}
return false;
>>>>>>> 72598404 (Fix error handling logic in `try_setting_buffer_size` (#5631))
}

/**
Expand Down

0 comments on commit 8275651

Please sign in to comment.