/** * pk_backend_stop_job: * * Always run for each transaction, *even* when the job_start() * vfunc fails. * * This method has no return value as the ErrorCode should have already * been set. */ void pk_backend_stop_job (PkBackend *backend, PkBackendJob *job) { g_return_if_fail (PK_IS_BACKEND (backend)); if (!pk_backend_job_get_started (job)) { g_warning ("trying to stop job, but never started it before"); return; } pk_backend_job_set_started (job, FALSE); /* optional */ if (backend->priv->desc->job_stop != NULL) backend->priv->desc->job_stop (backend, job); }
/** * pk_backend_start_job: * * This is called just before the threaded transaction method, and in * the newly created thread context. e.g. * * >>> desc->job_start(backend) * (locked backend) * >>> desc->backend_method_we_want_to_run(backend) * <<< ::Package(PK_INFO_ENUM_INSTALLING,"hal;0.1.1;i386;fedora","Hardware Stuff") * >>> desc->job_stop(backend) * (unlocked backend) * <<< ::Finished() * * or in the case of backend_method_we_want_to_run() failure: * >>> desc->job_start(backend) * (locked backend) * >>> desc->backend_method_we_want_to_run(backend) * <<< ::ErrorCode(PK_ERROR_ENUM_FAILED_TO_FIND,"no package") * >>> desc->job_stop(backend) * (unlocked backend) * <<< ::Finished() * * or in the case of job_start() failure: * >>> desc->job_start(backend) * (failed to lock backend) * <<< ::ErrorCode(PK_ERROR_ENUM_FAILED_TO_LOCK,"no pid file") * >>> desc->job_stop(backend) * <<< ::Finished() * * It is *not* called for non-threaded backends, as multiple processes * would be inherently racy. */ void pk_backend_start_job (PkBackend *backend, PkBackendJob *job) { g_return_if_fail (PK_IS_BACKEND (backend)); /* common stuff */ pk_backend_job_set_backend (job, backend); if (pk_backend_job_get_started (job)) { g_warning ("trying to start an already started job again"); return; } pk_backend_job_set_started (job, TRUE); /* optional */ if (backend->priv->desc->job_start != NULL) backend->priv->desc->job_start (backend, job); }
/** * pk_backend_reset_job: **/ void pk_backend_reset_job (PkBackend *backend, PkBackendJob *job) { g_return_if_fail (PK_IS_BACKEND (backend)); if (!pk_backend_job_get_started (job)) { g_warning ("trying to reset job, but never started it before"); return; } /* optional */ if (backend->priv->desc->job_reset != NULL) { backend->priv->desc->job_reset (backend, job); } else { if (backend->priv->desc->job_stop != NULL) backend->priv->desc->job_stop (backend, job); if (backend->priv->desc->job_start != NULL) backend->priv->desc->job_start (backend, job); } /* bubble up */ pk_backend_job_reset (job); }
/** * pk_backend_job_finalize: **/ static void pk_backend_job_finalize (GObject *object) { PkBackendJob *job; g_return_if_fail (object != NULL); g_return_if_fail (PK_IS_BACKEND_JOB (object)); g_return_if_fail (pk_is_thread_default ()); job = PK_BACKEND_JOB (object); if (pk_backend_job_get_started (job)) { g_warning ("finalized job without stopping it before"); pk_backend_stop_job (job->priv->backend, job); } g_free (job->priv->proxy_http); g_free (job->priv->proxy_https); g_free (job->priv->proxy_ftp); g_free (job->priv->proxy_socks); g_free (job->priv->no_proxy); g_free (job->priv->pac); g_free (job->priv->cmdline); g_free (job->priv->locale); g_free (job->priv->frontend_socket); if (job->priv->last_package != NULL) { g_object_unref (job->priv->last_package); job->priv->last_package = NULL; } if (job->priv->params != NULL) g_variant_unref (job->priv->params); g_timer_destroy (job->priv->timer); g_key_file_unref (job->priv->conf); g_object_unref (job->priv->cancellable); G_OBJECT_CLASS (pk_backend_job_parent_class)->finalize (object); }