summaryrefslogtreecommitdiffstats
path: root/ldap
diff options
context:
space:
mode:
authorEndi S. Dewata <edewata@redhat.com>2010-07-26 10:41:37 -0500
committerNoriko Hosoi <nhosoi@redhat.com>2010-08-19 17:00:15 -0700
commit9632226671eea6b8d6397f4560344d95136de45b (patch)
tree2eabfb8175a03a91dc6b0a77d3163b89074f8037 /ldap
parentbdcb8fe195ed386599a879961d6654a46266d3b2 (diff)
downloadds-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.c28
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;
}