/** * pk_backend_job_thread_create: * @func: (scope call): **/ gboolean pk_backend_job_thread_create (PkBackendJob *job, PkBackendJobThreadFunc func, gpointer user_data, GDestroyNotify destroy_func) { PkBackendJobThreadHelper *helper = NULL; g_return_val_if_fail (PK_IS_BACKEND_JOB (job), FALSE); g_return_val_if_fail (func != NULL, FALSE); g_return_val_if_fail (pk_is_thread_default (), FALSE); if (job->priv->thread != NULL) { g_warning ("already has thread"); return FALSE; } /* create a helper object to allow us to call a _setup() function */ helper = g_new0 (PkBackendJobThreadHelper, 1); helper->job = g_object_ref (job); helper->backend = job->priv->backend; helper->func = func; helper->user_data = user_data; /* create a thread */ job->priv->thread = g_thread_new ("PK-Backend", pk_backend_job_thread_setup, helper); if (job->priv->thread == NULL) { g_warning ("failed to create thread"); return FALSE; } return TRUE; }
/** * pk_backend_job_thread_create: * @func: (scope call): **/ gboolean pk_backend_job_thread_create (PkBackendJob *job, PkBackendJobThreadFunc func, gpointer user_data, GDestroyNotify destroy_func) { PkBackendJobThreadHelper *helper = NULL; g_return_val_if_fail (PK_IS_BACKEND_JOB (job), FALSE); g_return_val_if_fail (func != NULL, FALSE); g_return_val_if_fail (pk_is_thread_default (), FALSE); /* create a helper object to allow us to call a _setup() function */ helper = g_new0 (PkBackendJobThreadHelper, 1); helper->job = g_object_ref (job); helper->backend = job->priv->backend; helper->func = func; helper->user_data = user_data; /* create a thread and unref it immediately as we do not need to join() * this at any stage */ g_thread_unref (g_thread_new ("PK-Backend", pk_backend_job_thread_setup, helper)); return TRUE; }
/** * 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); }