Skip to content

Commit

Permalink
pass "leftover" explicitly
Browse files Browse the repository at this point in the history
  • Loading branch information
alandekok committed Feb 13, 2018
1 parent d09ddc9 commit 27b8d0c
Show file tree
Hide file tree
Showing 3 changed files with 8 additions and 8 deletions.
11 changes: 5 additions & 6 deletions src/lib/io/message.c
Original file line number Diff line number Diff line change
Expand Up @@ -1057,16 +1057,16 @@ fr_message_t *fr_message_alloc(fr_message_set_t *ms, fr_message_t *m, size_t act
* @param[in] ms the message set
* @param[in] m the message message to allocate packet data for
* @param[in] actual_packet_size to use
* @param[in] leftover "dirty" bytes in the buffer
* @param[in] reserve_size to reserve for new message
* @return
* - NULL on error, and input message m is left alone
* - fr_message_t* on success. Will always be a new message.
*/
fr_message_t *fr_message_alloc_reserve(fr_message_set_t *ms, fr_message_t *m, size_t actual_packet_size,
size_t reserve_size)
size_t leftover, size_t reserve_size)
{
bool cleaned_up;
size_t data_size;
uint8_t *p;
fr_message_t *m2;
size_t m_rb_size;
Expand All @@ -1090,7 +1090,6 @@ fr_message_t *fr_message_alloc_reserve(fr_message_set_t *ms, fr_message_t *m, si
rad_assert(p == m->data);

m_rb_size = m->rb_size; /* for ring buffer cleanups */
data_size = m->rb_size - actual_packet_size;

/*
* The caller can change m->data size to something a bit
Expand All @@ -1103,7 +1102,7 @@ fr_message_t *fr_message_alloc_reserve(fr_message_set_t *ms, fr_message_t *m, si
* If we've allocated all of the reserved ring buffer
* data, then just reserve a brand new reservation.
*/
if (!data_size) return fr_message_reserve(ms, reserve_size);
if (!leftover) return fr_message_reserve(ms, reserve_size);

/*
* Allocate a new message.
Expand All @@ -1115,7 +1114,7 @@ fr_message_t *fr_message_alloc_reserve(fr_message_set_t *ms, fr_message_t *m, si
* Track how much data there is in the packet.
*/
m2->rb = m->rb;
m2->data_size = data_size;
m2->data_size = leftover;
m2->rb_size = reserve_size;

/*
Expand Down Expand Up @@ -1149,7 +1148,7 @@ fr_message_t *fr_message_alloc_reserve(fr_message_set_t *ms, fr_message_t *m, si
* one. And ensure that the old message will properly
* clean up the ring buffer.
*/
memcpy(m2->data, m->data + actual_packet_size, data_size);
memcpy(m2->data, m->data + actual_packet_size, leftover);
m->rb_size = m_rb_size;
return m2;
}
Expand Down
2 changes: 1 addition & 1 deletion src/lib/io/message.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ fr_message_set_t *fr_message_set_create(TALLOC_CTX *ctx, int num_messages, size_
fr_message_t *fr_message_reserve(fr_message_set_t *ms, size_t reserve_size) CC_HINT(nonnull);
fr_message_t *fr_message_alloc(fr_message_set_t *ms, fr_message_t *m, size_t actual_packet_size) CC_HINT(nonnull(1));
fr_message_t *fr_message_alloc_reserve(fr_message_set_t *ms, fr_message_t *m, size_t actual_packet_size,
size_t reserve_size) CC_HINT(nonnull);
size_t leftover, size_t reserve_size) CC_HINT(nonnull);
fr_message_t *fr_message_alloc_aligned(fr_message_set_t *ms, fr_message_t *m, size_t actual_packet_size) CC_HINT(nonnull(1));
int fr_message_done(fr_message_t *m) CC_HINT(nonnull);

Expand Down
3 changes: 2 additions & 1 deletion src/lib/io/network.c
Original file line number Diff line number Diff line change
Expand Up @@ -470,7 +470,8 @@ static void fr_network_read(UNUSED fr_event_list_t *el, UNUSED int sockfd, UNUSE
* There are leftover bytes in the buffer, feed
* them to the next round of reading.
*/
next = (fr_channel_data_t *) fr_message_alloc_reserve(s->ms, &cd->m, data_size, s->listen->default_message_size);
next = (fr_channel_data_t *) fr_message_alloc_reserve(s->ms, &cd->m, data_size, s->leftover,
s->listen->default_message_size);
if (!next) {
fr_log(nr->log, L_ERR, "Failed reserving partial packet.");
// @todo - probably close the socket...
Expand Down

0 comments on commit 27b8d0c

Please sign in to comment.