G_LOCK_DEFINE_STATIC(job_list);
static GSList *job_list = NULL;
+static volatile EvJob *running_job = NULL;
+
static gpointer ev_job_thread_proxy (gpointer data);
static void ev_scheduler_thread_job_cancelled (EvSchedulerJob *job,
GCancellable *cancellable);
do {
if (g_cancellable_is_cancelled (job->cancellable))
result = FALSE;
- else
+ else {
+ g_atomic_pointer_set (&running_job, job);
result = ev_job_run (job);
+ }
} while (result);
+
+ g_atomic_pointer_set (&running_job, NULL);
}
static gboolean
}
}
+EvJob *
+ev_job_scheduler_get_running_thread_job (void)
+{
+ return g_atomic_pointer_get (&running_job);
+}
EV_JOB_N_PRIORITIES
} EvJobPriority;
-void ev_job_scheduler_push_job (EvJob *job,
- EvJobPriority priority);
-void ev_job_scheduler_update_job (EvJob *job,
- EvJobPriority priority);
+void ev_job_scheduler_push_job (EvJob *job,
+ EvJobPriority priority);
+void ev_job_scheduler_update_job (EvJob *job,
+ EvJobPriority priority);
+EvJob *ev_job_scheduler_get_running_thread_job (void);
G_END_DECLS