commit 09c9cde8c0cfec3a5f4320ec10bf2e1b0f9b460f Author: Richard Hughes Date: Thu Jan 23 13:46:49 2014 +0000 hawkey: Fix installing i386 packages on a 64bit computer diff --git a/backends/hawkey/pk-backend-hawkey.c b/backends/hawkey/pk-backend-hawkey.c index f2ee746..b069396 100644 --- a/backends/hawkey/pk-backend-hawkey.c +++ b/backends/hawkey/pk-backend-hawkey.c @@ -3196,10 +3196,12 @@ out: } /** - * hif_is_installed_package_name: + * hif_is_installed_package_name_arch: */ static gboolean -hif_is_installed_package_name (HySack sack, const gchar *name) +hif_is_installed_package_name_arch (HySack sack, + const gchar *name, + const gchar *arch) { gboolean ret; HyPackageList pkglist = NULL; @@ -3208,6 +3210,7 @@ hif_is_installed_package_name (HySack sack, const gchar *name) /* run query */ query = hy_query_create (sack); hy_query_filter (query, HY_PKG_NAME, HY_EQ, name); + hy_query_filter (query, HY_PKG_ARCH, HY_EQ, arch); hy_query_filter (query, HY_PKG_REPONAME, HY_EQ, HY_SYSTEM_REPO_NAME); pkglist = hy_query_run (query); @@ -3228,7 +3231,9 @@ hif_is_installed_package_id (HySack sack, const gchar *package_id) gboolean ret; gchar **split; split = pk_package_id_split (package_id); - ret = hif_is_installed_package_name (sack, split[PK_PACKAGE_ID_NAME]); + ret = hif_is_installed_package_name_arch (sack, + split[PK_PACKAGE_ID_NAME], + split[PK_PACKAGE_ID_ARCH]); g_strfreev (split); return ret; } commit 5776000231f81f7d0d764038a9957439c35a7a5d Author: Richard Hughes Date: Thu Jan 23 14:25:55 2014 +0000 hawkey: Release locks early if the state fails diff --git a/backends/hawkey/hif-lock.c b/backends/hawkey/hif-lock.c index 97066f4..a644330 100644 --- a/backends/hawkey/hif-lock.c +++ b/backends/hawkey/hif-lock.c @@ -91,6 +91,19 @@ hif_lock_type_to_string (HifLockType lock_type) } /** + * hif_lock_mode_to_string: + **/ +static const gchar * +hif_lock_mode_to_string (HifLockMode lock_mode) +{ + if (lock_mode == HIF_LOCK_MODE_THREAD) + return "thread"; + if (lock_mode == HIF_LOCK_MODE_PROCESS) + return "process"; + return "unknown"; +} + +/** * hif_lock_get_item_by_type_mode: **/ static HifLockItem * @@ -337,7 +350,9 @@ hif_lock_take (HifLock *lock, g_set_error (error, HIF_ERROR, PK_ERROR_ENUM_CANNOT_GET_LOCK, - "already locked by %s", + "%s[%s] already locked by %s", + hif_lock_type_to_string (type), + hif_lock_mode_to_string (mode), cmdline); goto out; } @@ -520,7 +535,7 @@ hif_lock_finalize (GObject *object) if (item->refcount > 0) { g_warning ("held lock %s at shutdown", hif_lock_type_to_string (item->type)); - hif_lock_release (lock, item->type, NULL); + hif_lock_release (lock, item->id, NULL); } } diff --git a/backends/hawkey/hif-source.c b/backends/hawkey/hif-source.c index b79f525..fffcc31 100644 --- a/backends/hawkey/hif-source.c +++ b/backends/hawkey/hif-source.c @@ -695,6 +695,7 @@ hif_source_update (HifSource *src, if (!ret) goto out; out: + hif_state_release_locks (state); lr_handle_setopt (src->repo_handle, NULL, LRO_PROGRESSCB, NULL); lr_handle_setopt (src->repo_handle, NULL, LRO_PROGRESSDATA, 0xdeadbeef); return ret; diff --git a/backends/hawkey/hif-state.c b/backends/hawkey/hif-state.c index 6cd706f..fc6753c 100644 --- a/backends/hawkey/hif-state.c +++ b/backends/hawkey/hif-state.c @@ -273,13 +273,17 @@ hif_state_set_speed (HifState *state, guint64 speed) /** * hif_state_release_locks: **/ -static gboolean +gboolean hif_state_release_locks (HifState *state) { gboolean ret = TRUE; guint i; guint lock_id; + /* release children first */ + if (state->priv->child != NULL) + hif_state_release_locks (state->priv->child); + /* release each one */ for (i = 0; i < state->priv->lock_ids->len; i++) { lock_id = GPOINTER_TO_UINT (g_ptr_array_index (state->priv->lock_ids, i)); diff --git a/backends/hawkey/hif-state.h b/backends/hawkey/hif-state.h index ffd42e9..b7b26f4 100644 --- a/backends/hawkey/hif-state.h +++ b/backends/hawkey/hif-state.h @@ -131,6 +131,7 @@ gboolean hif_state_take_lock (HifState *state, HifLockType lock_type, HifLockMode lock_mode, GError **error); +gboolean hif_state_release_locks (HifState *state); G_END_DECLS diff --git a/backends/hawkey/pk-backend-hawkey.c b/backends/hawkey/pk-backend-hawkey.c index b069396..40831b9 100644 --- a/backends/hawkey/pk-backend-hawkey.c +++ b/backends/hawkey/pk-backend-hawkey.c @@ -521,8 +521,10 @@ pk_backend_stop_job (PkBackend *backend, PkBackendJob *job) PkBackendHifJobData *job_data = pk_backend_job_get_user_data (job); g_object_unref (job_data->cancellable); - if (job_data->state != NULL) + if (job_data->state != NULL) { + hif_state_release_locks (job_data->state); g_object_unref (job_data->state); + } if (job_data->sources != NULL) g_ptr_array_unref (job_data->sources); g_ptr_array_unref (job_data->packages_to_download); @@ -2954,6 +2956,7 @@ pk_backend_transaction_commit (PkBackendJob *job, HifState *state, GError **erro if (!ret) goto out; out: + hif_state_release_locks (state); g_free (verbosity_string); if (commit != NULL) { g_timer_destroy (commit->timer);