Comment 18 for bug 256048

Revision history for this message
Christian Ramseier (cramseier) wrote :

I'm new to the evince code but I thought I should share what I found out.
I noticed that the rendering job somehow gets cancelled and the page then just shows that it is "Loading..."

here's my stacktrace:
ev-jobs.c: ev_job_cancel
ev-pixbuf-cache.c: copy_job_to_job_info
ev-pixbuf-cache.c: ev_pixbuf_cache_get_link_mapping
ev-view.c: ev_view_get_link_at_location
ev-view.c: ev_view_handle_cursor_over_xy
ev-view.c: ev_view_motion_notify_event <- gets called when the mouse moves, here we go...

copy_job_to_job_info cancels the job because the "job_info->job" object still exists. it normally gets destroyed the moment the idle calls emit_finished (ev-jobs.c), but this hasn't happend yet.

In the ev-pixbuf-cache.c you'll find several comments like this: /* We don't need to wait for the idle to handle the callback */.
I think you do have to wait for the callback or you have to clean the job_info->job before calling copy_info_to_job. Otherwise the job gets cancelled and that's what causes this bug.

I don't have the big picture so I won't commit anything but I hope this helps resolving this annoying bug..

Cheers, Chris