From 914642f65fcf35e48e77bd3c8ce377539af9045a Mon Sep 17 00:00:00 2001 From: Nalin Dahyabhai Date: Wed, 11 Jan 2012 19:30:06 -0500 Subject: - avoid using pblocks for more than one internal operation - the server allocates internal state each time but doesn't clean up any that's aready there if you reuse the block - correctly free values we use when constructing compat entries --- src/format.c | 33 ++++++++------------------------- 1 file changed, 8 insertions(+), 25 deletions(-) (limited to 'src/format.c') diff --git a/src/format.c b/src/format.c index 9f5b214..ba09b41 100644 --- a/src/format.c +++ b/src/format.c @@ -1578,13 +1578,6 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, attr = argv[2]; /* Set up to search for matches. */ - local_pb = slapi_pblock_new(); - if (local_pb == NULL) { - slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id, - "referred: out of memory\n"); - format_free_parsed_args(argv); - return -ENOMEM; - } cbdata.state = state; cbdata.attr = attr; cbdata.choices = NULL; @@ -1601,7 +1594,6 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, "no search bases defined for \"%s\"/\"%s\"?\n", group, other_set); backend_free_set_config(set_bases, set_filter); - slapi_pblock_destroy(local_pb); format_free_parsed_args(argv); return -ENOENT; } @@ -1626,7 +1618,6 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, state->plugin_desc->spd_id, "referred: out of memory\n"); backend_free_set_config(set_bases, set_filter); - slapi_pblock_destroy(local_pb); format_free_parsed_args(argv); return -ENOMEM; } @@ -1638,7 +1629,6 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, "referred: out of memory\n"); free(tndn); backend_free_set_config(set_bases, set_filter); - slapi_pblock_destroy(local_pb); format_free_parsed_args(argv); return -ENOMEM; } @@ -1650,6 +1640,7 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, attrs[1] = NULL; for (i = 0; (set_bases != NULL) && (set_bases[i] != NULL); i++) { /* Set up the search. */ + local_pb = slapi_pblock_new(); slapi_search_internal_set_pb(local_pb, set_bases[i], LDAP_SCOPE_SUBTREE, filter, attrs, FALSE, @@ -1664,11 +1655,11 @@ format_referred(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, NULL, format_referred_entry_cb, NULL); + slapi_pblock_destroy(local_pb); } free(filter); backend_free_set_config(set_bases, set_filter); - slapi_pblock_destroy(local_pb); format_free_parsed_args(argv); /* Return any values we found. */ @@ -1834,15 +1825,6 @@ format_referred_r(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, attr_links, NULL); free(attr_links); - /* Set up to search for referrers. */ - local_pb = slapi_pblock_new(); - if (local_pb == NULL) { - slapi_log_error(SLAPI_LOG_PLUGIN, state->plugin_desc->spd_id, - "referred_r: out of memory\n"); - format_free_parsed_args(argv); - return -ENOMEM; - } - /* Get the searching parameters for the set which contains the entry, * and all of the referred-to sets, and save them for use at the last * link in the chain. */ @@ -1914,6 +1896,7 @@ format_referred_r(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, "referred_r: searching under %s" " for \"%s\" (link=1.%d)\n", ndn, filter, i); + local_pb = slapi_pblock_new(); slapi_search_internal_set_pb(local_pb, ndn, LDAP_SCOPE_SUBTREE, @@ -1932,6 +1915,7 @@ format_referred_r(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, NULL, format_referred_r_entry_cb, NULL); + slapi_pblock_destroy(local_pb); } free(filter); /* Walk the set of search bases for the next link. */ @@ -1953,6 +1937,7 @@ format_referred_r(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, "referred_r: searching under %s" " for \"%s\" (link=2.%d)\n", ndn, filter, i); + local_pb = slapi_pblock_new(); slapi_search_internal_set_pb(local_pb, ndn, LDAP_SCOPE_SUBTREE, @@ -1971,6 +1956,7 @@ format_referred_r(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, NULL, format_referred_r_entry_cb, NULL); + slapi_pblock_destroy(local_pb); } free(filter); free(tndn); @@ -1984,7 +1970,6 @@ format_referred_r(struct plugin_state *state, Slapi_PBlock *pb, Slapi_Entry *e, } format_free_sdn_list(these_entries, these_entries2); - slapi_pblock_destroy(local_pb); format_free_parsed_args(argv); /* Return any values we found. */ @@ -3852,7 +3837,6 @@ format_format(struct plugin_state *state, Slapi_Entry *e, spd_id = state->plugin_desc->spd_id; buflen = DEFAULT_BUFFER_SIZE; - pb = slapi_pblock_new(); do { buf = malloc(buflen); if (buf == NULL) { @@ -3862,15 +3846,16 @@ format_format(struct plugin_state *state, Slapi_Entry *e, "for \"%s\" failing: out of memory\n", fmt, slapi_entry_get_ndn(e)); - slapi_pblock_destroy(pb); return NULL; } + pb = slapi_pblock_new(); i = format_expand(state, pb, e, group, set, fmt, disallowed, buf, buflen, choices, rel_attrs, ref_attrs, inref_attrs, ref_attr_list, inref_attr_list); + slapi_pblock_destroy(pb); if ((i >= 0) && (i < buflen)) { buf[i] = '\0'; ret = xmemdup(buf, i); @@ -3913,8 +3898,6 @@ format_format(struct plugin_state *state, Slapi_Entry *e, free(buf); } while (i == -ENOBUFS); - slapi_pblock_destroy(pb); - return ret; } -- cgit