> * erik quanstrom ([EMAIL PROTECTED]) wrote:
>> in order for im to return nil, this test has to be true
>> 
>>      if((page < 0 || page >= doc->npage) && !doc->fwdonly)
>>              return nil;
>> 
>> i think the question is, why is page out of range and what's it's value?
>> 
>> - erik
> 
> That happens at startup with the -i option. Somewhere in main is a call of
> initgfx(nil, 0, nil, nil, 0) in that case. This leads to doc->npage being 0
> which puts any value of page out of range in this case. Essentially it's
> something of a timing issue. Page wants to display an image and looks for it
> in the cache. At that point the cache is empty because page gets the data
> via the plumber and the event loop hasn't yet started to process plumbing
> messages. At least that's as far as I have understood what's going on. And
> it probably isn't the cause for Greg's problem (which I couldn't reproduce).
> 
>       Martin

if this is a timing issue, then that should be addressed.  if your diagnosis is
correct, then if pagecache would slept until the event loop were running,
that would fix the timing problem.

maybe something like

int     eventdawn;              /* set after event loop is fired up */

Image*
cachedpage(Document *doc, int angle, int page)
{
        static int lastpage = -1;
        static int rabusy;
        Image *im;
        int ra;

+       while(eventdawn == 0)
+               sleep(1);

Reply via email to