diff options
-rw-r--r-- | libopkg/pkg.c | 3 | ||||
-rw-r--r-- | libopkg/pkg_hash.c | 3 | ||||
-rw-r--r-- | libopkg/void_list.c | 9 |
3 files changed, 13 insertions, 2 deletions
diff --git a/libopkg/pkg.c b/libopkg/pkg.c index 10427ed..d662664 100644 --- a/libopkg/pkg.c +++ b/libopkg/pkg.c @@ -1737,8 +1737,7 @@ int pkg_info_preinstall_check(opkg_conf_t *conf) // opkg_message(conf, OPKG_DEBUG2, "pkg %s: file=%s\n", pkg->name, installed_file); file_hash_set_file_owner(conf, installed_file, pkg); } - //FIXME: mark this line. Thid avoid crash, But the reference count shall be balanced. (If there are some delay after file_hash_set_file_owner, it wont crash (Pondering why?)) - //pkg_free_installed_files(pkg); + pkg_free_installed_files(pkg); } pkg_vec_free(installed_pkgs); diff --git a/libopkg/pkg_hash.c b/libopkg/pkg_hash.c index 97613e5..c63847b 100644 --- a/libopkg/pkg_hash.c +++ b/libopkg/pkg_hash.c @@ -648,10 +648,13 @@ int file_hash_set_file_owner(opkg_conf_t *conf, const char *file_name, pkg_t *ow // opkg_message(conf, OPKG_DEBUG2, "owning_pkg=%s filename=%s\n", owning_pkg->name, file_name); hash_table_insert(file_hash, file_name, owning_pkg); if (old_owning_pkg) { + pkg_get_installed_files(old_owning_pkg); str_list_remove_elt(old_owning_pkg->installed_files, file_name); + pkg_free_installed_files(old_owning_pkg); /* mark this package to have its filelist written */ old_owning_pkg->state_flag |= SF_FILELIST_CHANGED; owning_pkg->state_flag |= SF_FILELIST_CHANGED; + } return 0; } diff --git a/libopkg/void_list.c b/libopkg/void_list.c index f749016..8d61fbb 100644 --- a/libopkg/void_list.c +++ b/libopkg/void_list.c @@ -160,6 +160,15 @@ void *void_list_remove_elt(void_list_t *list, const void *target_data, void_list void_list_elt_t *old_elt = NULL; void *old_data = NULL; + if (!list) { + fprintf(stderr, "Error: void_list_remove_elt list is NULL\n"); + return NULL; + } + if (!target_data) { + fprintf(stderr, "Error: void_list_remove_elt target_data is NULL\n"); + return NULL; + } + /* first element */ if (list->head && list->head->data && (cmp(list->head->data, target_data) == 0)) { old_elt = list->head; |