INN 2.5, inn-CURRENT-20090103 Issues

Julien ÉLIE julien at trigofacile.com
Mon Jan 5 21:47:35 UTC 2009


Hi William,

> When running: news.daily expireover lowmark I receive the following message:
> - Use of uninitialized value in string eq at (eval 139) line 3
> I don't know what that message means.

Yet, innreport does not have Perl warnings on in CURRENT.
I do not understand why you have that warning.  Maybe it is not
innreport, but I do not see what else it can be.



> Perl is enabled and running the same Cleanfeed as before.

By the way, is your innreport.conf file totally new and installed
from INN CURRENT?  It has changed since INN 2.4.2.



> The biggest reason for upgrading to INN 2.5 was to get rid of this assertion connection.c problem.  Well the assertion issue is 
> still a problem:
>
> 2009-01-04 19:39:50 innfeed: assertion -- cxn != NULL -- failed in file connection.c line 1171
> 2009-01-04 20:59:43 innfeed: assertion -- cxn != NULL -- failed in file connection.c line 1171

Oh, nice catch.  It is in cxnCheckstate() in connection.c,
called only once in host.c:

void hostSendArticle (Host host, Article article)
{
  if (host->queued == NULL)
    {
      Connection cxn = NULL ;

      if (host->params->minQueueCxn) {
        // for loops with cxn = host->connections[idx]
      } else {
        // for loops with cxn = host->connections[idx]
      }

      /* this'll happen if all connections are feeding and all
         their queues are full, or if those not feeding are asleep. */
      d_printf (1, "Couldn't give the article to a connection\n") ;

      if (!cxnCheckstate (cxn))  <--------- Here is the issue.
        {
        }
    }
}


I believe we should check whether the connection is still here.
It may not have been affected during a for loop.
I did not find a function which actually made cxn NULL in hostSendArticle().
However, in one of a possible branch, we have:

        for (idx = 0 ; idx < host->maxConnections ; idx++)
          if (!host->cxnActive [idx] && !host->cxnSleeping [idx] &&
              (cxn = host->connections[idx]) != host->notThisCxn)

I believe we could have a case where all the connections to a host
are inactive and sleeping.  Therefore, cxn will still be NULL
and passed to cxnCheckstate().


Of course, I suggest that patch:

Index: host.c
===================================================================
--- host.c      (révision 8263)
+++ host.c      (copie de travail)
@@ -1783,7 +1783,7 @@
       delArticle (extraRef) ;

       remArticle (article,&host->processed,&host->processedTail) ;
-      if (!cxnCheckstate (cxn))
+      if (cxn != NULL && !cxnCheckstate (cxn))
         {
           host->artsToTape++ ;
           host->gArtsToTape++ ;


Could you please try it and see if innfeed works fine?



> Except for the above it appears to be running very well so far.

Do you have other lines in connection.c where assertions are raised?

-- 
Julien ÉLIE

« Les amis de la vérité sont ceux qui la cherchent,
  et non ceux qui se vantent de l'avoir trouvée. » (Condorcet)




More information about the inn-workers mailing list