On Tue, 13 Aug 2013 11:05:01 +0200 (CEST)
Harald Barth <h...@kth.se> wrote:

> 2002                for (queue_Scan(&rx_incomingCallQueue, tcall, ncall, 
> rx_call)) {
> 2003                    service = tcall->conn->service;
> 2004                    if (!QuotaOK(service)) {
> 2005                        continue;
> 2006                    }
> (gdb) 
> 
> queue_Scan seems to be a hideous macro. So some assistance
> appreciated.

This should expand to something like

for (tcall = ((struct rx_queue*)(&rx_incomingCallQueue))->next,
     ncall = ((struct rx_queue*)tcall)->next;
     tcall != &rx_incomingCallQueue;
     tcall = ncall, ncall = ((struct rx_queue*)tcall)->next)

So I assume it's that last ncall assignment that's dereferencing a NULL
tcall. tcall shouldn't be able to be NULL there; even if we're at the
end of the queue, it should be &incomingCallQueue. So, traverse
incomingCallQueue and see if one of the pointers is NULL. I thought
there was a bug regarding this, but I must be thinking of
339438c8473110bebdd31b23706e2e387560723f. That commit is a bit curious
wrt this, though... maybe it is possible that a NULL gets on the queue
somehow.

-- 
Andrew Deason
adea...@sinenomine.net

_______________________________________________
OpenAFS-devel mailing list
OpenAFS-devel@openafs.org
https://lists.openafs.org/mailman/listinfo/openafs-devel

Reply via email to