1
0
mirror of https://github.com/irssi/irssi.git synced 2024-07-07 02:54:19 -04:00

Revert more of the netsplit print optimisation to fix crashes

Now iterating over all servers to avoid crashes on server_ischannel(),
which is a macro for server->ischannel(), so it dies horribly when it's
null. Doesn't help that IS_IRC_SERVER() always returns true on null.
This commit is contained in:
dequis 2018-01-20 19:58:05 -03:00
parent 243ae4be84
commit a4f99ae746
2 changed files with 13 additions and 18 deletions

View File

@ -245,20 +245,18 @@ static void print_netjoins(NETJOIN_SERVER_REC *server, const char *filter_channe
message before it. */ message before it. */
static void sig_print_starting(TEXT_DEST_REC *dest) static void sig_print_starting(TEXT_DEST_REC *dest)
{ {
NETJOIN_SERVER_REC *rec; GSList *tmp, *next;
if (printing_joins) if (printing_joins)
return; return;
if (!IS_IRC_SERVER(dest->server)) for (tmp = joinservers; tmp != NULL; tmp = next) {
return; NETJOIN_SERVER_REC *server = tmp->data;
if (!server_ischannel(dest->server, dest->target)) next = tmp->next;
return; if (server->netjoins != NULL)
print_netjoins(server, NULL);
rec = netjoin_find_server(IRC_SERVER(dest->server)); }
if (rec != NULL && rec->netjoins != NULL)
print_netjoins(rec, NULL);
} }
static int sig_check_netjoins(void) static int sig_check_netjoins(void)

View File

@ -247,20 +247,17 @@ static int check_server_splits(IRC_SERVER_REC *server)
message before it. */ message before it. */
static void sig_print_starting(TEXT_DEST_REC *dest) static void sig_print_starting(TEXT_DEST_REC *dest)
{ {
IRC_SERVER_REC *rec; GSList *tmp;
if (printing_splits) if (printing_splits)
return; return;
if (!IS_IRC_SERVER(dest->server)) for (tmp = servers; tmp != NULL; tmp = tmp->next) {
return; IRC_SERVER_REC *rec = tmp->data;
if (!server_ischannel(dest->server, dest->target)) if (IS_IRC_SERVER(rec) && rec->split_servers != NULL)
return; print_splits(rec, NULL);
}
rec = IRC_SERVER(dest->server);
if (rec->split_servers != NULL)
print_splits(rec, NULL);
} }
static int sig_check_splits(void) static int sig_check_splits(void)