1
0
mirror of https://github.com/irssi/irssi.git synced 2024-12-04 14:46:39 -05:00

Some small adjustments to the netsplit code.

By making the signal handler hooked to the "print starting" event
smarter we can avoid dumping the whole netsplit stats for every
server/channel when a message arrives.

Issue #420
This commit is contained in:
LemonBoy 2016-04-02 16:14:01 +02:00
parent fd371cc345
commit ed06e43ec8

View File

@ -164,7 +164,7 @@ static void print_channel_netjoins(char *channel, TEMP_PRINT_REC *rec,
g_free(channel); g_free(channel);
} }
static void print_netjoins(NETJOIN_SERVER_REC *server) static void print_netjoins(NETJOIN_SERVER_REC *server, const char *channel)
{ {
TEMP_PRINT_REC *temp; TEMP_PRINT_REC *temp;
GHashTable *channels; GHashTable *channels;
@ -186,6 +186,9 @@ static void print_netjoins(NETJOIN_SERVER_REC *server)
char *channel = rec->now_channels->data; char *channel = rec->now_channels->data;
char *realchannel = channel + 1; char *realchannel = channel + 1;
if (channel != NULL && strcasecmp(realchannel, channel) != 0)
continue;
temp = g_hash_table_lookup(channels, realchannel); temp = g_hash_table_lookup(channels, realchannel);
if (temp == NULL) { if (temp == NULL) {
temp = g_new0(TEMP_PRINT_REC, 1); temp = g_new0(TEMP_PRINT_REC, 1);
@ -235,20 +238,31 @@ static void print_netjoins(NETJOIN_SERVER_REC *server)
/* something is going to be printed to screen, print our current netsplit /* something is going to be printed to screen, print our current netsplit
message before it. */ message before it. */
static void sig_print_starting(void) static void sig_print_starting(TEXT_DEST_REC *dest)
{ {
GSList *tmp, *next; NETJOIN_SERVER_REC *rec;
if (printing_joins) if (printing_joins)
return; return;
for (tmp = joinservers; tmp != NULL; tmp = next) { /* Do not dump the netsplit stats unless:
NETJOIN_SERVER_REC *server = tmp->data; * a) This is an IRC server
* b) The message level is high enough
* b) The message belongs to a channel
* c) There's a NETJOIN record for this server
*/
if (!IS_IRC_SERVER(dest->server))
return;
next = tmp->next; if (dest->level != MSGLEVEL_MSGS)
if (server->netjoins != NULL) return;
print_netjoins(server);
} if (!server_ischannel(dest->server, dest->target))
return;
rec = netjoin_find_server(IRC_SERVER(dest->server));
if (rec != NULL && rec->netjoins != NULL)
print_netjoins(rec, dest->target);
} }
static int sig_check_netjoins(void) static int sig_check_netjoins(void)
@ -272,7 +286,7 @@ static int sig_check_netjoins(void)
} }
if (server->netjoins != NULL) if (server->netjoins != NULL)
print_netjoins(server); print_netjoins(server, NULL);
} }
/* now remove all netjoins which haven't had any new joins /* now remove all netjoins which haven't had any new joins