Timeout for IMAP idle

Thomas Jarosch thomas.jarosch at intra2net.com
Thu Jul 28 11:34:43 EDT 2016


On Thursday, 28. July 2016 17:16:03 Carlos Velasco via Cyrus-devel wrote:
> Looking into idled.c from v2.5.8 there is a timeout:
> 
>      /* Set inactivity timer (convert from minutes to seconds) */
>      idle_timeout = config_getint(IMAPOPT_TIMEOUT);
>      if (idle_timeout < 30) idle_timeout = 30;
>      idle_timeout *= 60;
> ...
>      case IDLE_MSG_NOTIFY:
> ...
>          /* send a message to all clients idling on mboxname */
>          t = (struct ientry *) hash_lookup(msg->mboxname, &itable);
>          for ( ; t ; t = n) {
>              n = t->next;
>              if ((t->itime + idle_timeout) < time(NULL)) {
>                  /* This process has been idling for longer than the
> timeout * period, so it probably died.  Remove it from the list. */
>                  if (verbose || debugmode)
>                      syslog(LOG_DEBUG, "    TIMEOUT %s\n",
> idle_id_from_addr(&t->remote));
> 
>                  remove_ientry(msg->mboxname, &t->remote);

yes, we run idled.

I think that might be the problem here, the expire of idle clients
is done only if there is activity in the folder. The clients that
were idling for two weeks were doing it on the INBOX/Drafts folder.

So that's probably an area that needs improvement in idled.

@Bron: What about a "global" timeout check in the main loop of idled
ever XX minutes?

Cheers,
Thomas



More information about the Cyrus-devel mailing list