1
Author: jilles vim:ft=diff:
2
Description: Allow increasing the send buffer to 1MB/connection, and
3
warn if that is exceeded, BTS #308673 (upstream svn r4840)
5
Index: irssi-0.8.12/src/core/net-sendbuffer.c
6
===================================================================
7
--- irssi-0.8.12.orig/src/core/net-sendbuffer.c
8
+++ irssi-0.8.12/src/core/net-sendbuffer.c
9
@@ -37,6 +37,7 @@ NET_SENDBUF_REC *net_sendbuffer_create(G
12
rec->bufsize = bufsize > 0 ? bufsize : DEFAULT_BUFFER_SIZE;
13
+ rec->def_bufsize = rec->bufsize;
15
buffers = g_slist_append(buffers, rec);
17
@@ -61,7 +62,9 @@ static int buffer_send(NET_SENDBUF_REC *
18
ret = net_transmit(rec->handle, rec->buffer, rec->bufpos);
19
if (ret < 0 || rec->bufpos == ret) {
20
/* error/all sent - don't try to send it anymore */
21
- g_free_and_null(rec->buffer);
22
+ rec->bufsize = rec->def_bufsize;
23
+ rec->buffer = g_realloc(rec->buffer, rec->bufsize);
28
@@ -91,8 +94,16 @@ static int buffer_add(NET_SENDBUF_REC *r
32
- if (rec->bufpos+size > rec->bufsize)
34
+ while (rec->bufpos+size > rec->bufsize) {
35
+ if (rec->bufsize >= MAX_BUFFER_SIZE) {
37
+ g_warning("Dropping some data on an outgoing connection");
42
+ rec->buffer = g_realloc(rec->buffer, rec->bufsize);
45
memcpy(rec->buffer+rec->bufpos, data, size);
47
@@ -110,7 +121,7 @@ int net_sendbuffer_send(NET_SENDBUF_REC
48
g_return_val_if_fail(data != NULL, -1);
49
if (size <= 0) return 0;
51
- if (rec->buffer == NULL) {
52
+ if (rec->buffer == NULL || rec->bufpos == 0) {
53
/* nothing in buffer - transmit immediately */
54
ret = net_transmit(rec->handle, data, size);
55
if (ret < 0) return -1;
56
Index: irssi-0.8.12/src/core/net-sendbuffer.h
57
===================================================================
58
--- irssi-0.8.12.orig/src/core/net-sendbuffer.h
59
+++ irssi-0.8.12/src/core/net-sendbuffer.h
61
#define __NET_SENDBUFFER_H
63
#define DEFAULT_BUFFER_SIZE 8192
64
+#define MAX_BUFFER_SIZE 1048576
66
struct _NET_SENDBUF_REC {
68
@@ -10,6 +11,8 @@ struct _NET_SENDBUF_REC {
71
char *buffer; /* Buffer is NULL until it's actually needed. */
73
+ unsigned int dead:1;
76
/* Create new buffer - if `bufsize' is zero or less, DEFAULT_BUFFER_SIZE