diff options
| author | Luke Bratch <luke@bratch.co.uk> | 2019-10-02 19:37:16 +0100 | 
|---|---|---|
| committer | Luke Bratch <luke@bratch.co.uk> | 2019-10-02 19:37:16 +0100 | 
| commit | 2385f7b944bb22acd85e6c089e509880a45a2cb1 (patch) | |
| tree | 149c7005acbcc3aeb663661ed4b45ef7eef35ade | |
| parent | be3913f22cc03a6d804d720fb0d3efcc337c4150 (diff) | |
Try to make removenickfromallchannels() much faster when another user QUITs by ignoring unused channel indexes.
| -rw-r--r-- | TODO | 2 | ||||
| -rw-r--r-- | functions.c | 4 | ||||
| -rw-r--r-- | message.c | 2 | 
3 files changed, 5 insertions, 3 deletions
| @@ -7,5 +7,3 @@ Add a make install/uninstall/etc., add an "INSTALL" file, include a dependency l  macOS compiler may need limits.h included in structures.h.  replaymode = "lastspoke" causes huge amounts of spam from extractnickfromprefix() and friends in full debug mode. - -Very slow processing of removenickfromallchannels() when another user QUITs (sometimes). diff --git a/functions.c b/functions.c index 730819f..c5e3cdc 100644 --- a/functions.c +++ b/functions.c @@ -1432,6 +1432,10 @@ int removenickfromallchannels(char *nickuserhost, struct channel *channels) {    // Go through all channels and remove nick if present    for (int i = 0; i < MAXCHANNELS; i++) { +    // Don't bother checking this channel index if it isn't used +    if (!channels[i].name[0]) { +      continue; +    }      // Go through all nicks in channel      for (int j = 0; j < MAXCHANNICKS; j++) {        // Remove the nick from the channel if present @@ -267,7 +267,7 @@ int processservermessage(SSL *server_ssl, char *str, struct client *clients, int      if (strncmp(tokens[1], "QUIT", strlen(tokens[1])) == 0) {        debugprint(DEBUG_FULL, "Server QUIT found and it is: %s with length %zd!  Next token is '%s'.\n", tokens[0], strlen(tokens[0]), tokens[2]); -      // And then send to all clients +      // Tell all clients        sendtoallclients(clients, str, sourcefd, settings);        // Write to replay log if replay logging enabled | 
