diff options
author | Simo Sorce <ssorce@redhat.com> | 2011-04-13 15:21:32 -0400 |
---|---|---|
committer | Stephen Gallagher <sgallagh@redhat.com> | 2011-04-14 11:51:28 -0400 |
commit | ee5d3b527b4f7272e59fa630f4511aa1e84bf674 (patch) | |
tree | d1d1c061c49d0b0939ac7880b47be66391c395ed /src | |
parent | 967b1b595f61986ecc0e7d84448333d8264bcc2b (diff) | |
download | sssd_unused-ee5d3b527b4f7272e59fa630f4511aa1e84bf674.tar.gz sssd_unused-ee5d3b527b4f7272e59fa630f4511aa1e84bf674.tar.xz sssd_unused-ee5d3b527b4f7272e59fa630f4511aa1e84bf674.zip |
memberof: free delete operation payload once donesssd-1.5.1-29.el6
memberof: fix calculation of replaced members
We were skipping the check on the next value in the added list when a match
was found for the currentr value being checked.
memberof: free delete operation apyload once done
Large memberof delete operations can cause quite a number of searches
and the results are attached to a delop operation structure.
Make sure we free this payload once the operation is done and these
results are not used anymore so that we get a smaller total memory footprint.
Diffstat (limited to 'src')
-rw-r--r-- | src/ldb_modules/memberof.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/ldb_modules/memberof.c b/src/ldb_modules/memberof.c index 372aa544..31547464 100644 --- a/src/ldb_modules/memberof.c +++ b/src/ldb_modules/memberof.c @@ -1156,6 +1156,7 @@ static int mbof_del_fill_muop(struct mbof_del_ctx *del_ctx, static int mbof_del_muop(struct mbof_del_ctx *ctx); static int mbof_del_muop_callback(struct ldb_request *req, struct ldb_reply *ares); +static void free_delop_contents(struct mbof_del_operation *delop); static int memberof_del(struct ldb_module *module, struct ldb_request *req) @@ -2184,6 +2185,8 @@ static int mbof_del_progeny(struct mbof_del_operation *delop) return ret; } + free_delop_contents(delop); + if (nextop) { return mbof_del_execute_op(nextop); } @@ -2407,7 +2410,16 @@ static int mbof_del_muop_callback(struct ldb_request *req, return LDB_SUCCESS; } - +/* delop may carry on a lot of memory, so we need a function to clean up + * the payload without breaking the delop chain */ +static void free_delop_contents(struct mbof_del_operation *delop) +{ + talloc_zfree(delop->entry); + talloc_zfree(delop->parents); + talloc_zfree(delop->anc_ctx); + delop->num_parents = 0; + delop->cur_parent = 0; +} /* mod operation */ @@ -2729,6 +2741,7 @@ static int mbof_mod_process(struct mbof_mod_ctx *mod_ctx, bool *done) added->dns[j] = added->dns[j+1]; } added->num--; + i--; } } } |