Use io_prio as mainloop prio for async-emulation (#579449)
authorAlexander Larsson <alexl@redhat.com>
Thu, 18 Jun 2009 17:43:46 +0000 (19:43 +0200)
committerAlexander Larsson <alexl@redhat.com>
Thu, 18 Jun 2009 17:43:46 +0000 (19:43 +0200)
I'm not sure why we used the elaborate formula to convert the io-priority
to the priority of the mainloop idle when emulating async i/o with idles.
However, it causes the default io priority to be less than the normal
idle prio, so the i/o won't be scheduled if there is an idle outstanding.

There is really no great mapping to use here, doing blocking i/o in an
idle of any prio is generally bad and apps doing a lot of async i/o should
initialize threads. However, if we use the io-priority directly we at least
avoid the starvation problem above and make things easier to understand.

gio/gioscheduler.c

index 14b59fe..8d97a56 100644 (file)
@@ -257,7 +257,7 @@ g_io_scheduler_push_job (GIOSchedulerJobFunc  job_func,
       /* Threads not available, instead do the i/o sync inside a
        * low prio idle handler
        */
-      job->idle_tag = g_idle_add_full (G_PRIORITY_DEFAULT_IDLE + 1 + io_priority / 10,
+      job->idle_tag = g_idle_add_full (io_priority,
                                       run_job_at_idle,
                                       job, job_destroy);
     }