X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Futcp.c;fp=src%2Futcp.c;h=8b3509ef0f5c376ee7b37640cb3c82dba1819df4;hb=0f5ab29d787c7fb444908797d5ea746cb4311be4;hp=c21e7067b89610c17182eae3dce57b58a9dfa274;hpb=57d7814d3c211a46f6a6fe7dd995307cb9a6f41e;p=meshlink diff --git a/src/utcp.c b/src/utcp.c index c21e7067..8b3509ef 100644 --- a/src/utcp.c +++ b/src/utcp.c @@ -470,8 +470,13 @@ static void set_buffer_storage(struct buffer *buf, char *data, size_t size) { buf->external = false; } else { + // Don't do anything if the buffer wraps + if(buffer_wraps(buf)) { + return; + } + // Realloc internal storage - size_t minsize = buf->used <= DEFAULT_SNDBUFSIZE ? DEFAULT_SNDBUFSIZE : buf->used; + size_t minsize = max(DEFAULT_SNDBUFSIZE, buf->offset + buf->used); if(minsize) { data = realloc(buf->data, minsize); @@ -2108,8 +2113,8 @@ static bool reset_connection(struct utcp_connection *c) { } static void set_reapable(struct utcp_connection *c) { - set_buffer_storage(&c->sndbuf, NULL, DEFAULT_MTU); - set_buffer_storage(&c->rcvbuf, NULL, DEFAULT_MTU); + set_buffer_storage(&c->sndbuf, NULL, min(c->sndbuf.maxsize, DEFAULT_MAXSNDBUFSIZE)); + set_buffer_storage(&c->rcvbuf, NULL, min(c->rcvbuf.maxsize, DEFAULT_MAXRCVBUFSIZE)); c->recv = NULL; c->poll = NULL;