diff options
author | Endi S. Dewata <edewata@redhat.com> | 2010-07-26 10:41:37 -0500 |
---|---|---|
committer | Noriko Hosoi <nhosoi@redhat.com> | 2010-08-19 17:00:15 -0700 |
commit | 9632226671eea6b8d6397f4560344d95136de45b (patch) | |
tree | 2eabfb8175a03a91dc6b0a77d3163b89074f8037 /ldap | |
parent | bdcb8fe195ed386599a879961d6654a46266d3b2 (diff) | |
download | ds-9632226671eea6b8d6397f4560344d95136de45b.tar.gz ds-9632226671eea6b8d6397f4560344d95136de45b.tar.xz ds-9632226671eea6b8d6397f4560344d95136de45b.zip |
Bug 617630 - fix coverify Defect Type: Resource leaks issues CID 12052 - 12093
https://bugzilla.redhat.com/show_bug.cgi?id=617630
Resolves: bug 617630
Bug description: fix coverify Defect Type: Resource leaks issues CID 12075, 12076.
description: import_merge_make_new_queue_entry() and import_merge_one_file() have been modified to release resources when error occurs.
Diffstat (limited to 'ldap')
-rw-r--r-- | ldap/servers/slapd/back-ldbm/import-merge.c | 28 |
1 files changed, 14 insertions, 14 deletions
diff --git a/ldap/servers/slapd/back-ldbm/import-merge.c b/ldap/servers/slapd/back-ldbm/import-merge.c index 477320da..9d7af3eb 100644 --- a/ldap/servers/slapd/back-ldbm/import-merge.c +++ b/ldap/servers/slapd/back-ldbm/import-merge.c @@ -128,17 +128,11 @@ static import_merge_queue_entry *import_merge_make_new_queue_entry(import_merge_ /* Make a new entry */ import_merge_queue_entry *new_entry = (import_merge_queue_entry *)slapi_ch_calloc(1, sizeof(import_merge_queue_entry)); - if (NULL == new_entry) { - return NULL; - } new_entry->key = *key; new_entry->thang = *thang; new_entry->file_referenced_list = (int *)slapi_ch_calloc(passes, sizeof(fileno)); - if (NULL == new_entry->file_referenced_list) { - return NULL; - } (new_entry->file_referenced_list)[fileno] = 1; return new_entry; } @@ -403,6 +397,7 @@ static int import_merge_one_file(ImportWorkerInfo *worker, int passes, int preclose_ret = 0; int number_found = 0; int pass_number = 0; + DB **input_files = NULL; PR_ASSERT(NULL != inst); @@ -446,7 +441,6 @@ static int import_merge_one_file(ImportWorkerInfo *worker, int passes, } else { /* We really need to merge */ import_merge_queue_entry *merge_queue = NULL; - DB **input_files = NULL; DBC **input_cursors = NULL; DBT key = {0}; import_merge_thang thang = {0}; @@ -463,17 +457,17 @@ static int import_merge_one_file(ImportWorkerInfo *worker, int passes, } else { import_log_notice(worker->job, "MERGE FAIL 8 %d", ret); } - return ret; + goto error; } ret = dblayer_start(inst->inst_li, DBLAYER_IMPORT_MODE); if (0 != ret) { import_log_notice(worker->job, "MERGE FAIL 9"); - return ret; + goto error; } ret = dblayer_instance_start(be, DBLAYER_IMPORT_MODE); if (0 != ret) { import_log_notice(worker->job, "MERGE FAIL 9A"); - return ret; + goto error; } #else /* we have reason to believe that it's okay to leave the region files @@ -485,12 +479,12 @@ static int import_merge_one_file(ImportWorkerInfo *worker, int passes, ret = dblayer_instance_close(be); if (0 != ret) { import_log_notice(worker->job, "MERGE FAIL 8i %d\n", ret); - return ret; + goto error; } ret = dblayer_instance_start(be, DBLAYER_IMPORT_MODE); if (0 != ret) { import_log_notice(worker->job, "MERGE FAIL 8j %d\n", ret); - return ret; + goto error; } #endif @@ -498,7 +492,7 @@ static int import_merge_one_file(ImportWorkerInfo *worker, int passes, passes, &input_files, &number_found, &pass_number); if (0 != ret) { import_log_notice(worker->job, "MERGE FAIL 10"); - return ret; + goto error; } ret = dblayer_open_file(be, worker->index_info->name, 1, @@ -635,7 +629,6 @@ static int import_merge_one_file(ImportWorkerInfo *worker, int passes, } } if (preclose_ret != 0) ret = preclose_ret; - slapi_ch_free( (void**)&input_files); slapi_ch_free( (void**)&input_cursors); } if (EOF == ret) { @@ -643,6 +636,13 @@ static int import_merge_one_file(ImportWorkerInfo *worker, int passes, } error: + slapi_ch_free((void**)&input_files); + if (ret) { + import_log_notice(worker->job, "%s: Import merge failed. " + "If this is an online-import, shutdown the server " + "and try the offline command line import (ldif2db)", + inst->inst_name); + } return ret; } |