ldap/servers/plugins/acl/aclparse.c | 7 -
ldap/servers/plugins/memberof/memberof.c | 6
ldap/servers/plugins/referint/referint.c | 4
ldap/servers/plugins/retrocl/retrocl_cn.c | 3
ldap/servers/plugins/rever/pbe.c | 7 -
ldap/servers/plugins/rootdn_access/rootdn_access.c | 6
ldap/servers/slapd/add.c | 1
ldap/servers/slapd/attrsyntax.c | 15 --
ldap/servers/slapd/back-ldbm/import-threads.c | 7 -
ldap/servers/slapd/back-ldbm/ldbm_config.c | 3
ldap/servers/slapd/back-ldbm/ldbm_modrdn.c | 9 -
ldap/servers/slapd/connection.c | 15 --
ldap/servers/slapd/daemon.c | 21 +--
ldap/servers/slapd/defbackend.c | 15 --
ldap/servers/slapd/delete.c | 4
ldap/servers/slapd/entry.c | 14 --
ldap/servers/slapd/fedse.c | 4
ldap/servers/slapd/filter.c | 5
ldap/servers/slapd/generation.c | 8 -
ldap/servers/slapd/getsocketpeer.c | 4
ldap/servers/slapd/ldaputil.c | 12 -
ldap/servers/slapd/libglobs.c | 79 ++++++-----
ldap/servers/slapd/log.c | 3
ldap/servers/slapd/main.c | 27 +---
ldap/servers/slapd/mapping_tree.c | 12 -
ldap/servers/slapd/modify.c | 4
ldap/servers/slapd/modrdn.c | 4
ldap/servers/slapd/operation.c | 3
ldap/servers/slapd/pblock.c | 2
ldap/servers/slapd/plugin.c | 19 +-
ldap/servers/slapd/plugin_internal_op.c | 4
ldap/servers/slapd/plugin_mr.c | 3
ldap/servers/slapd/proto-slap.h | 2
ldap/servers/slapd/sasl_map.c | 4
ldap/servers/slapd/schema.c | 6
ldap/servers/slapd/slap.h | 6
ldap/servers/slapd/slapi-private.h | 7 +
ldap/servers/slapd/ssl.c | 3
ldap/servers/slapd/task.c | 17 --
ldap/servers/slapd/time.c | 3
ldap/servers/slapd/uniqueid.c | 11 -
ldap/servers/slapd/uniqueidgen.c | 11 -
ldap/servers/slapd/util.c | 59 +++++++-
ldap/servers/slapd/uuid.c | 9 -
ldap/servers/slapd/valueset.c | 141 +++++++++++----------
lib/ldaputil/certmap.c | 14 --
46 files changed, 298 insertions(+), 325 deletions(-)
New commits:
commit b1f434e3f5b8d699909bc1e54465718641a296d3
Author: William Brown <firstyear(a)redhat.com>
Date: Mon Nov 28 11:41:54 2016 +1000
Ticket 49002 - Remove memset on allocation
Bug Description: Memset is slow, and has cause us some issues. c99 supports
allocing 0 structs with {0}, and we can also use calloc when needed. Calloc is
signifigantly faster that malloc + memset.
Fix Description: Remove memset where possible. We can't remove it universally
due to some struct reuse, and some libraries needing it, but this reduction
cleans the code greatly, and should give us a perf improvement.
https://fedorahosted.org/389/ticket/49002
Author: wibrown
Review by: mreynolds (Thanks!)
diff --git a/ldap/servers/plugins/acl/aclparse.c b/ldap/servers/plugins/acl/aclparse.c
index a1dae19..d4cecfa 100644
--- a/ldap/servers/plugins/acl/aclparse.c
+++ b/ldap/servers/plugins/acl/aclparse.c
@@ -1562,9 +1562,7 @@ __aclp__init_targetattr (aci_t *aci, char *attr_val, char **errbuf)
*
* The attribute goes in the attrTarget list.
*/
- attr = (Targetattr *) slapi_ch_malloc (sizeof (Targetattr));
- memset (attr, 0, sizeof(Targetattr));
-
+ attr = (Targetattr *) slapi_ch_calloc (1, sizeof (Targetattr));
/* strip double quotes */
lenstr = strlen(str);
if (*str == '"' && *(str + lenstr - 1) == '"') {
@@ -2150,8 +2148,7 @@ static int process_filter_list( Targetattrfilter
***input_attrFilterArray,
*
*/
- attrfilter = (Targetattrfilter *) slapi_ch_malloc (sizeof (Targetattrfilter));
- memset (attrfilter, 0, sizeof(Targetattrfilter));
+ attrfilter = (Targetattrfilter *) slapi_ch_calloc (1, sizeof (Targetattrfilter));
if (strstr( str,":") != NULL) {
if ( __acl_init_targetattrfilter( attrfilter, str ) != 0 ) {
diff --git a/ldap/servers/plugins/memberof/memberof.c
b/ldap/servers/plugins/memberof/memberof.c
index 9af9082..3b38559 100644
--- a/ldap/servers/plugins/memberof/memberof.c
+++ b/ldap/servers/plugins/memberof/memberof.c
@@ -2267,12 +2267,10 @@ int memberof_test_membership_callback(Slapi_Entry *e, void
*callback_data)
candidate_array =
(Slapi_Value**)
- slapi_ch_malloc(sizeof(Slapi_Value*)*total);
- memset(candidate_array, 0, sizeof(Slapi_Value*)*total);
+ slapi_ch_calloc(1, sizeof(Slapi_Value*)*total);
member_array =
(Slapi_Value**)
- slapi_ch_malloc(sizeof(Slapi_Value*)*total);
- memset(member_array, 0, sizeof(Slapi_Value*)*total);
+ slapi_ch_calloc(1, sizeof(Slapi_Value*)*total);
hint = slapi_attr_first_value(attr, &val);
diff --git a/ldap/servers/plugins/referint/referint.c
b/ldap/servers/plugins/referint/referint.c
index e6af414..9feb91b 100644
--- a/ldap/servers/plugins/referint/referint.c
+++ b/ldap/servers/plugins/referint/referint.c
@@ -1500,7 +1500,8 @@ referint_thread_func(void *arg)
int my_fgetc(PRFileDesc *stream)
{
- static char buf[READ_BUFSIZE] = "\0";
+ /* This is equivalent to memset of 0, but statically defined. */
+ static char buf[READ_BUFSIZE] = {0};
static int position = READ_BUFSIZE;
int retval;
int err;
@@ -1508,7 +1509,6 @@ int my_fgetc(PRFileDesc *stream)
/* check if we need to load the buffer */
if( READ_BUFSIZE == position )
{
- memset(buf, '\0', READ_BUFSIZE);
if( ( err = PR_Read(stream, buf, READ_BUFSIZE) ) >= 0)
{
/* it read some data */;
diff --git a/ldap/servers/plugins/retrocl/retrocl_cn.c
b/ldap/servers/plugins/retrocl/retrocl_cn.c
index ec81bc5..98c14b3 100644
--- a/ldap/servers/plugins/retrocl/retrocl_cn.c
+++ b/ldap/servers/plugins/retrocl/retrocl_cn.c
@@ -171,7 +171,7 @@ int retrocl_get_changenumbers(void)
*/
time_t retrocl_getchangetime( int type, int *err )
{
- cnumRet cr;
+ cnumRet cr = {0};
time_t ret;
if ( type != SLAPI_SEQ_FIRST && type != SLAPI_SEQ_LAST ) {
@@ -180,7 +180,6 @@ time_t retrocl_getchangetime( int type, int *err )
}
return NO_TIME;
}
- memset( &cr, '\0', sizeof( cnumRet ));
slapi_seq_callback( RETROCL_CHANGELOG_DN, type,
(char *)attr_changenumber, /* cast away const */
NULL,
diff --git a/ldap/servers/plugins/rever/pbe.c b/ldap/servers/plugins/rever/pbe.c
index 45b1f97..16982c4 100644
--- a/ldap/servers/plugins/rever/pbe.c
+++ b/ldap/servers/plugins/rever/pbe.c
@@ -184,12 +184,13 @@ genKey(struct pk11ContextStore **out, char *path, int mech,
PRArenaPool *arena,
SECItem *pwitem = NULL;
SECItem *result = NULL;
SECItem *salt = NULL;
- SECItem der_algid;
+ SECItem der_algid = {0};
SECAlgorithmID *algid = NULL;
SECOidTag algoid;
CK_MECHANISM pbeMech;
CK_MECHANISM cryptoMech;
- SECAlgorithmID my_algid;
+ /* Have to use long form init due to internal structs */
+ SECAlgorithmID my_algid = {{0}, {0}};
char *configdir = NULL;
char *der_ascii = NULL;
char *iv = NULL;
@@ -262,7 +263,6 @@ genKey(struct pk11ContextStore **out, char *path, int mech,
PRArenaPool *arena,
strcpy((char*)salt->data, iv);
salt->len = strlen(iv) + 1;
- PORT_Memset(&der_algid, 0, sizeof(der_algid));
if(!alg){
/*
* This is DES, or we are encoding AES - the process is the same.
@@ -285,7 +285,6 @@ genKey(struct pk11ContextStore **out, char *path, int mech,
PRArenaPool *arena,
/*
* We are decoding AES - use the supplied algid
*/
- PORT_Memset(&my_algid, 0, sizeof(my_algid));
/* Decode the base64 der encoding */
der_ascii = PL_Base64Decode(alg, strlen(alg), NULL);
diff --git a/ldap/servers/plugins/rootdn_access/rootdn_access.c
b/ldap/servers/plugins/rootdn_access/rootdn_access.c
index e5ebb13..3b65900 100644
--- a/ldap/servers/plugins/rootdn_access/rootdn_access.c
+++ b/ldap/servers/plugins/rootdn_access/rootdn_access.c
@@ -483,11 +483,10 @@ rootdn_check_access(Slapi_PBlock *pb){
*/
if(daysAllowed){
char *timestr;
- char day[4];
+ char day[4] = {0};
char *today = day;
timestr = asctime(timeinfo); // DDD MMM dd hh:mm:ss YYYY
- memset(day, 0 ,sizeof(day));
memmove(day, timestr, 3); // we only want the day
today = strToLower(today);
daysAllowed = strToLower(daysAllowed);
@@ -600,8 +599,7 @@ rootdn_check_access(Slapi_PBlock *pb){
* Check if we are IPv4, so we can grab the correct IP addr for
"ip_str"
*/
if ( PR_IsNetAddrType( client_addr, PR_IpAddrV4Mapped ) ) {
- PRNetAddr v4addr;
- memset( &v4addr, 0, sizeof( v4addr ) );
+ PRNetAddr v4addr = {{0}};
v4addr.inet.family = PR_AF_INET;
v4addr.inet.ip = client_addr->ipv6.ip.pr_s6_addr32[3];
if( PR_NetAddrToString( &v4addr, ip_str, sizeof( ip_str )) !=
PR_SUCCESS){
diff --git a/ldap/servers/slapd/add.c b/ldap/servers/slapd/add.c
index 240fa41..8e671bb 100644
--- a/ldap/servers/slapd/add.c
+++ b/ldap/servers/slapd/add.c
@@ -268,7 +268,6 @@ done:
if(result_pb==NULL)
{
result_pb = slapi_pblock_new();
- pblock_init(result_pb);
slapi_pblock_set(result_pb, SLAPI_PLUGIN_INTOP_RESULT, &opresult);
}
diff --git a/ldap/servers/slapd/attrsyntax.c b/ldap/servers/slapd/attrsyntax.c
index 956c7b8..9b5be46 100644
--- a/ldap/servers/slapd/attrsyntax.c
+++ b/ldap/servers/slapd/attrsyntax.c
@@ -1010,11 +1010,10 @@ attr_syntax_create(
)
{
char *s;
- struct asyntaxinfo a;
+ struct asyntaxinfo a = {0};
int rc = LDAP_SUCCESS;
/* XXXmcs: had to cast away const in many places below */
- memset(&a, 0, sizeof(a));
*asip = NULL;
a.asi_name = slapi_ch_strdup(attr_names[0]);
if ( NULL != attr_names[1] ) {
@@ -1403,9 +1402,8 @@ attr_syntax_force_to_delete(struct asyntaxinfo *asip, void *arg)
void
attr_syntax_all_clear_flag( unsigned long flag )
{
- struct attr_syntax_enum_flaginfo fi;
+ struct attr_syntax_enum_flaginfo fi = {0};
- memset( &fi, 0, sizeof(fi));
fi.asef_flag = flag;
attr_syntax_enumerate_attrs( attr_syntax_clear_flag_callback,
(void *)&fi, PR_TRUE );
@@ -1419,9 +1417,8 @@ attr_syntax_all_clear_flag( unsigned long flag )
void
attr_syntax_delete_all_not_flagged( unsigned long flag )
{
- struct attr_syntax_enum_flaginfo fi;
+ struct attr_syntax_enum_flaginfo fi = {0};
- memset( &fi, 0, sizeof(fi));
fi.asef_flag = flag;
attr_syntax_enumerate_attrs( attr_syntax_delete_if_not_flagged,
(void *)&fi, PR_TRUE );
@@ -1433,9 +1430,8 @@ attr_syntax_delete_all_not_flagged( unsigned long flag )
void
attr_syntax_delete_all()
{
- struct attr_syntax_enum_flaginfo fi;
+ struct attr_syntax_enum_flaginfo fi = {0};
- memset( &fi, 0, sizeof(fi));
attr_syntax_enumerate_attrs( attr_syntax_force_to_delete,
(void *)&fi, PR_TRUE );
}
@@ -1447,9 +1443,8 @@ attr_syntax_delete_all()
void
attr_syntax_delete_all_for_schemareload(unsigned long flag)
{
- struct attr_syntax_enum_flaginfo fi;
+ struct attr_syntax_enum_flaginfo fi = {0};
- memset(&fi, 0, sizeof(fi));
fi.asef_flag = flag;
attr_syntax_enumerate_attrs_ext(oid2asi, attr_syntax_delete_if_not_flagged,
(void *)&fi);
diff --git a/ldap/servers/slapd/back-ldbm/import-threads.c
b/ldap/servers/slapd/back-ldbm/import-threads.c
index 1cc7b42..0557778 100644
--- a/ldap/servers/slapd/back-ldbm/import-threads.c
+++ b/ldap/servers/slapd/back-ldbm/import-threads.c
@@ -3670,7 +3670,7 @@ dse_conf_verify_core(struct ldbminfo *li, char *src_dir, char
*file_name, char *
Slapi_Entry **backup_entries = NULL;
Slapi_Entry **bep = NULL;
Slapi_Entry **curr_entries = NULL;
- Slapi_PBlock srch_pb;
+ Slapi_PBlock srch_pb = {0};
filename = slapi_ch_smprintf("%s/%s", src_dir, file_name);
@@ -3732,10 +3732,9 @@ dse_conf_verify_core(struct ldbminfo *li, char *src_dir, char
*file_name, char *
bep++;
}
/* 623986: terminate the list if we reallocated backup_entries */
- if (backup_entry_len > 256)
+ if (backup_entry_len > 256) {
*bep = NULL;
-
- pblock_init(&srch_pb);
+ }
if (entry_filter != NULL)
{ /* Single instance restoration */
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_config.c
b/ldap/servers/slapd/back-ldbm/ldbm_config.c
index 4b612db..cc570d4 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_config.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_config.c
@@ -2230,10 +2230,9 @@ void ldbm_config_internal_set(struct ldbminfo *li, char *attrname,
char *value)
*/
void replace_ldbm_config_value(char *conftype, char *val, struct ldbminfo *li)
{
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
Slapi_Mods smods;
- pblock_init(&pb);
slapi_mods_init(&smods, 1);
slapi_mods_add(&smods, LDAP_MOD_REPLACE, conftype, strlen(val), val);
slapi_modify_internal_set_pb(&pb, CONFIG_LDBM_DN,
diff --git a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
index c2d0eca..a78d850 100644
--- a/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
+++ b/ldap/servers/slapd/back-ldbm/ldbm_modrdn.c
@@ -1037,9 +1037,9 @@ ldbm_back_modrdn( Slapi_PBlock *pb )
for ( i = 0; rdns[i] != NULL; i++ )
{
char *type;
- Slapi_Value *svp[2];
- Slapi_Value sv;
- memset(&sv,0,sizeof(Slapi_Value));
+ Slapi_Value *svp[2] = {0};
+ /* Have to use long form init due to presence of internal struct */
+ Slapi_Value sv = {{0}, 0, 0};
if ( slapi_rdn2typeval( rdns[i], &type, &sv.bv ) != 0 )
{
slapi_log_err(SLAPI_LOG_ERR, "ldbm_back_modrdn",
@@ -2020,9 +2020,8 @@ moddn_rename_child_entry(
entry_set_maxcsn(e->ep_entry, opcsn);
}
{
- Slapi_Mods smods;
+ Slapi_Mods smods = {0};
Slapi_Mods *smodsp = NULL;
- memset(&smods, 0, sizeof(smods));
slapi_mods_init(&smods, 2);
slapi_mods_add( &smods, LDAP_MOD_DELETE, LDBM_ENTRYDN_STR,
strlen( backentry_get_ndn(e) ), backentry_get_ndn(e) );
diff --git a/ldap/servers/slapd/connection.c b/ldap/servers/slapd/connection.c
index 51eb694..9e68a59 100644
--- a/ldap/servers/slapd/connection.c
+++ b/ldap/servers/slapd/connection.c
@@ -104,7 +104,7 @@ connection_get_operation(void)
{
struct Slapi_op_stack *stack_obj = (struct Slapi_op_stack *)PR_StackPop(op_stack);
if (!stack_obj) {
- stack_obj = (struct Slapi_op_stack *)slapi_ch_malloc(sizeof(struct Slapi_op_stack));
+ stack_obj = (struct Slapi_op_stack *)slapi_ch_calloc(1, sizeof(struct
Slapi_op_stack));
stack_obj->op = operation_new( plugin_build_operation_action_bitmap( 0,
plugin_get_server_plg() ));
} else {
@@ -282,8 +282,7 @@ connection_reset(Connection* conn, int ns, PRNetAddr * from, int
fromLen, int is
memcpy( conn->cin_addr, from, sizeof( PRNetAddr ) );
if ( PR_IsNetAddrType( conn->cin_addr, PR_IpAddrV4Mapped ) ) {
- PRNetAddr v4addr;
- memset( &v4addr, 0, sizeof( v4addr ) );
+ PRNetAddr v4addr = {{0}};
v4addr.inet.family = PR_AF_INET;
v4addr.inet.ip = conn->cin_addr->ipv6.ip.pr_s6_addr32[3];
PR_NetAddrToString( &v4addr, buf_ip, sizeof( buf_ip ) );
@@ -295,7 +294,7 @@ connection_reset(Connection* conn, int ns, PRNetAddr * from, int
fromLen, int is
} else {
/* try syscall since "from" was not given and PR_GetPeerName failed */
/* a corner case */
- struct sockaddr_in addr; /* assuming IPv4 */
+ struct sockaddr_in addr = {0}; /* assuming IPv4 */
#if ( defined( hpux ) )
int addrlen;
#else
@@ -303,7 +302,6 @@ connection_reset(Connection* conn, int ns, PRNetAddr * from, int
fromLen, int is
#endif
addrlen = sizeof( addr );
- memset( &addr, 0, addrlen );
if ( (conn->c_prfd == NULL) &&
(getpeername( conn->c_sd, (struct sockaddr *)&addr, &addrlen ) == 0)
)
@@ -344,8 +342,7 @@ connection_reset(Connection* conn, int ns, PRNetAddr * from, int
fromLen, int is
PL_strncpyz(buf_destip, "unknown local file",
sizeof(buf_destip));
}
} else if ( PR_IsNetAddrType( conn->cin_destaddr, PR_IpAddrV4Mapped ) ) {
- PRNetAddr v4destaddr;
- memset( &v4destaddr, 0, sizeof( v4destaddr ) );
+ PRNetAddr v4destaddr = {{0}};
v4destaddr.inet.family = PR_AF_INET;
v4destaddr.inet.ip = conn->cin_destaddr->ipv6.ip.pr_s6_addr32[3];
PR_NetAddrToString( &v4destaddr, buf_destip, sizeof( buf_destip ) );
@@ -360,7 +357,7 @@ connection_reset(Connection* conn, int ns, PRNetAddr * from, int
fromLen, int is
} else {
/* try syscall since c_prfd == NULL */
/* a corner case */
- struct sockaddr_in destaddr; /* assuming IPv4 */
+ struct sockaddr_in destaddr = {0}; /* assuming IPv4 */
#if ( defined( hpux ) )
int destaddrlen;
#else
@@ -368,7 +365,7 @@ connection_reset(Connection* conn, int ns, PRNetAddr * from, int
fromLen, int is
#endif
destaddrlen = sizeof( destaddr );
- memset( &destaddr, 0, destaddrlen );
+
if ( (getsockname( conn->c_sd, (struct sockaddr *)&destaddr,
&destaddrlen ) == 0) ) {
conn->cin_destaddr = (PRNetAddr *)slapi_ch_malloc( sizeof( PRNetAddr ));
memset( conn->cin_destaddr, 0, sizeof( PRNetAddr ));
diff --git a/ldap/servers/slapd/daemon.c b/ldap/servers/slapd/daemon.c
index 6da658e..1ea5a84 100644
--- a/ldap/servers/slapd/daemon.c
+++ b/ldap/servers/slapd/daemon.c
@@ -2464,7 +2464,7 @@ handle_new_connection(Connection_Table *ct, int tcps, PRFileDesc
*pr_acceptfd, i
int ns = 0;
Connection *conn = NULL;
/* struct sockaddr_in from;*/
- PRNetAddr from;
+ PRNetAddr from = {{0}};
PRFileDesc *pr_clonefd = NULL;
ber_len_t maxbersize;
slapdFrontendConfig_t *fecfg = getFrontendConfig();
@@ -2472,7 +2472,6 @@ handle_new_connection(Connection_Table *ct, int tcps, PRFileDesc
*pr_acceptfd, i
if (newconn) {
*newconn = NULL;
}
- memset(&from, 0, sizeof(from)); /* reset to nulls so we can see what was set */
if ( (ns = accept_and_configure( tcps, pr_acceptfd, &from,
sizeof(from), secure, local, &pr_clonefd)) == SLAPD_INVALID_SOCKET ) {
return -1;
@@ -2519,8 +2518,7 @@ handle_new_connection(Connection_Table *ct, int tcps, PRFileDesc
*pr_acceptfd, i
LBER_SBIOD_LEVEL_PROVIDER, conn );
#else /* !USE_OPENLDAP */
{
- struct lber_x_ext_io_fns func_pointers;
- memset(&func_pointers, 0, sizeof(func_pointers));
+ struct lber_x_ext_io_fns func_pointers = {0};
func_pointers.lbextiofn_size = LBER_X_EXTIO_FNS_SIZE;
func_pointers.lbextiofn_read = NULL; /* see connection_read_function */
func_pointers.lbextiofn_write = write_function;
@@ -3044,7 +3042,6 @@ slapd_listenhost2addr(const char *listenhost, PRNetAddr ***addr)
void *iter = NULL;
int addrcnt = 0;
int i = 0;
- memset( netaddr, 0, sizeof( PRNetAddr ));
/* need to count the address, first */
while ( (iter = PR_EnumerateAddrInfo( iter, infop, 0, netaddr ))
!= NULL ) {
@@ -3391,17 +3388,17 @@ static void
get_loopback_by_addr( void )
{
#ifdef GETHOSTBYADDR_BUF_T
- struct hostent hp;
- GETHOSTBYADDR_BUF_T hbuf;
+ struct hostent hp = {0};
+ GETHOSTBYADDR_BUF_T hbuf;
#endif
- unsigned long ipaddr;
- struct in_addr ia;
- int herrno, rc = 0;
+ unsigned long ipaddr;
+ struct in_addr ia;
+ int herrno = 0;
+ int rc = 0;
- memset( (char *)&hp, 0, sizeof(hp));
ipaddr = htonl( INADDR_LOOPBACK );
(void) GETHOSTBYADDR( (char *)&ipaddr, sizeof( ipaddr ),
- AF_INET, &hp, hbuf, sizeof(hbuf), &herrno );
+ AF_INET, &hp, hbuf, sizeof(hbuf), &herrno );
}
#endif /* RESOLVER_NEEDS_LOW_FILE_DESCRIPTORS */
diff --git a/ldap/servers/slapd/defbackend.c b/ldap/servers/slapd/defbackend.c
index a07fddb..9a9bc98 100644
--- a/ldap/servers/slapd/defbackend.c
+++ b/ldap/servers/slapd/defbackend.c
@@ -32,8 +32,8 @@
/*
* ---------------- Static Variables -----------------------------------------
*/
-static struct slapdplugin defbackend_plugin;
-static Slapi_Backend *defbackend_backend = NULL;
+static struct slapdplugin defbackend_plugin = {0};
+static Slapi_Backend *defbackend_backend = NULL;
/*
@@ -58,26 +58,23 @@ defbackend_init( void )
{
int rc;
char *errmsg;
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
slapi_log_err(SLAPI_LOG_TRACE, "defbackend_init", "<==\n");
/*
* create a new backend
*/
- pblock_init( &pb );
defbackend_backend = slapi_be_new( DEFBACKEND_TYPE , DEFBACKEND_TYPE, 1 /* Private
*/, 0 /* Do Not Log Changes */ );
- if (( rc = slapi_pblock_set( &pb, SLAPI_BACKEND, defbackend_backend ))
- != 0 ) {
- errmsg = "slapi_pblock_set SLAPI_BACKEND failed";
- goto cleanup_and_return;
+ if (( rc = slapi_pblock_set( &pb, SLAPI_BACKEND, defbackend_backend )) != 0 ) {
+ errmsg = "slapi_pblock_set SLAPI_BACKEND failed";
+ goto cleanup_and_return;
}
/*
* create a plugin structure for this backend since the
* slapi_pblock_set()/slapi_pblock_get() functions assume there is one.
*/
- memset( &defbackend_plugin, '\0', sizeof( struct slapdplugin ));
defbackend_plugin.plg_type = SLAPI_PLUGIN_DATABASE;
defbackend_backend->be_database = &defbackend_plugin;
if (( rc = slapi_pblock_set( &pb, SLAPI_PLUGIN, &defbackend_plugin ))
diff --git a/ldap/servers/slapd/delete.c b/ldap/servers/slapd/delete.c
index 37f5317..a16718a 100644
--- a/ldap/servers/slapd/delete.c
+++ b/ldap/servers/slapd/delete.c
@@ -107,12 +107,10 @@ free_and_return:;
Slapi_PBlock *
slapi_delete_internal(const char *idn, LDAPControl **controls, int dummy)
{
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
Slapi_PBlock *result_pb;
int opresult;
- pblock_init (&pb);
-
slapi_delete_internal_set_pb (&pb, idn, controls, NULL,
plugin_get_default_component_id(), 0);
delete_internal_pb (&pb);
diff --git a/ldap/servers/slapd/entry.c b/ldap/servers/slapd/entry.c
index 3d0723c..51ca3cc 100644
--- a/ldap/servers/slapd/entry.c
+++ b/ldap/servers/slapd/entry.c
@@ -4102,7 +4102,6 @@ slapi_entry_diff(Slapi_Mods *smods, Slapi_Entry *e1, Slapi_Entry
*e2, int diff_c
static void
delete_subtree(Slapi_PBlock *pb, const char *dn, void *plg_id)
{
- Slapi_PBlock mypb;
int ret = 0;
int opresult;
@@ -4117,11 +4116,11 @@ delete_subtree(Slapi_PBlock *pb, const char *dn, void *plg_id)
Slapi_DN *rootDN = slapi_sdn_new_dn_byval(dn);
slapi_pblock_get(pb, SLAPI_PLUGIN_INTOP_SEARCH_ENTRIES, &entries);
for (ep = entries; ep && *ep; ep++) {
+ Slapi_PBlock mypb = {0};
const Slapi_DN *sdn = slapi_entry_get_sdn_const(*ep);
-
- if (slapi_sdn_compare(sdn, rootDN) == 0)
+ if (slapi_sdn_compare(sdn, rootDN) == 0) {
continue;
- pblock_init(&mypb);
+ }
slapi_delete_internal_set_pb(&mypb, slapi_sdn_get_dn(sdn),
NULL, NULL, plg_id, 0);
slapi_delete_internal_pb(&mypb);
@@ -4157,7 +4156,6 @@ slapi_entries_diff(Slapi_Entry **old_entries, Slapi_Entry
**curr_entries,
char *my_logging_prestr = "";
Slapi_Entry **oep, **cep;
int rval = 0;
- Slapi_PBlock pb;
#define SLAPI_ENTRY_FLAG_DIFF_IN_BOTH 0x80
if (NULL != logging_prestr && '\0' != *logging_prestr)
@@ -4222,7 +4220,7 @@ slapi_entries_diff(Slapi_Entry **old_entries, Slapi_Entry
**curr_entries,
}
if (0 == isfirst && force_update && testall)
{
- pblock_init(&pb);
+ Slapi_PBlock pb = {0};
slapi_modify_internal_set_pb_ext(&pb,
slapi_entry_get_sdn_const(*oep),
slapi_mods_get_ldapmods_byref(smods),
@@ -4250,9 +4248,9 @@ slapi_entries_diff(Slapi_Entry **old_entries, Slapi_Entry
**curr_entries,
{
if (force_update)
{
+ Slapi_PBlock pb = {0};
LDAPMod **mods;
slapi_entry2mods(*oep, NULL, &mods);
- pblock_init(&pb);
slapi_add_internal_set_pb(&pb, slapi_entry_get_dn_const(*oep),
mods, NULL, plg_id, 0);
slapi_add_internal_pb(&pb);
@@ -4279,7 +4277,7 @@ slapi_entries_diff(Slapi_Entry **old_entries, Slapi_Entry
**curr_entries,
if (testall)
{
if (force_update) {
- pblock_init(&pb);
+ Slapi_PBlock pb = {0};
delete_subtree(&pb, slapi_entry_get_dn_const(*cep), plg_id);
pblock_done(&pb);
}
diff --git a/ldap/servers/slapd/fedse.c b/ldap/servers/slapd/fedse.c
index f02c4f6..d64e7c6 100644
--- a/ldap/servers/slapd/fedse.c
+++ b/ldap/servers/slapd/fedse.c
@@ -1556,9 +1556,7 @@ static int
init_dse_file(const char *configdir, Slapi_DN *config)
{
int rc= 1; /* OK */
- Slapi_PBlock pb;
-
- memset(&pb, 0, sizeof(pb));
+ Slapi_PBlock pb = {0};
if(pfedse==NULL)
{
diff --git a/ldap/servers/slapd/filter.c b/ldap/servers/slapd/filter.c
index 085a8d9..77c369f 100644
--- a/ldap/servers/slapd/filter.c
+++ b/ldap/servers/slapd/filter.c
@@ -774,10 +774,9 @@ slapi_filter_free( struct slapi_filter *f, int recurse )
slapi_ch_free((void**)&f->f_mr_type);
slapi_ber_bvdone(&f->f_mr_value);
if (f->f_mr.mrf_destroy != NULL) {
- Slapi_PBlock pb;
- pblock_init (&pb);
+ Slapi_PBlock pb = {0};
if ( ! slapi_pblock_set (&pb, SLAPI_PLUGIN_OBJECT, f->f_mr.mrf_object)) {
- f->f_mr.mrf_destroy (&pb);
+ f->f_mr.mrf_destroy (&pb);
}
}
break;
diff --git a/ldap/servers/slapd/generation.c b/ldap/servers/slapd/generation.c
index bd1690b..76dffda 100644
--- a/ldap/servers/slapd/generation.c
+++ b/ldap/servers/slapd/generation.c
@@ -59,13 +59,11 @@ get_database_dataversion(const char *dn)
void
set_database_dataversion(const char *dn, const char *dataversion)
{
- LDAPMod gen_mod;
- LDAPMod *mods[2];
+ LDAPMod gen_mod = {0};
+ LDAPMod *mods[2] = {0};
struct berval* gen_vals[2];
struct berval gen_val;
- Slapi_PBlock *pb;
-
- memset (&gen_mod, 0, sizeof(gen_mod));
+ Slapi_PBlock *pb;
gen_mod.mod_op = LDAP_MOD_REPLACE | LDAP_MOD_BVALUES;
gen_mod.mod_type = "nsslapd-dataversion"; /* JCMREPL - Shouldn't be a
Netscape specific attribute name */
diff --git a/ldap/servers/slapd/getsocketpeer.c b/ldap/servers/slapd/getsocketpeer.c
index 255322b..2a738a1 100644
--- a/ldap/servers/slapd/getsocketpeer.c
+++ b/ldap/servers/slapd/getsocketpeer.c
@@ -82,7 +82,7 @@ int slapd_get_socket_peer(PRFileDesc *nspr_fd, uid_t *uid, gid_t *gid)
#include <sys/types.h>
#include <sys/stat.h>
#include <errno.h>
- struct msghdr msg;
+ struct msghdr msg = {0};
struct iovec iov;
char dummy[8];
int pass_sd[2];
@@ -90,8 +90,6 @@ int slapd_get_socket_peer(PRFileDesc *nspr_fd, uid_t *uid, gid_t *gid)
unsigned int retrycnt = 0xffffffff; /* safety net */
int myerrno = 0;
- memset((void *)&msg, 0, sizeof(msg));
-
iov.iov_base = dummy;
iov.iov_len = sizeof(dummy);
msg.msg_iov = &iov;
diff --git a/ldap/servers/slapd/ldaputil.c b/ldap/servers/slapd/ldaputil.c
index 090b613..e5b7c56 100644
--- a/ldap/servers/slapd/ldaputil.c
+++ b/ldap/servers/slapd/ldaputil.c
@@ -1776,8 +1776,8 @@ credentials_are_valid(
{
char *logname = "credentials_are_valid";
int myrc = 0;
- krb5_creds mcreds; /* match these values */
- krb5_creds creds; /* returned creds */
+ krb5_creds mcreds = {0}; /* match these values */
+ krb5_creds creds = {0}; /* returned creds */
char *tgs_princ_name = NULL;
krb5_timestamp currenttime;
int authtracelevel = SLAPI_LOG_SHELL; /* special auth tracing */
@@ -1786,8 +1786,6 @@ credentials_are_valid(
int time_buffer = 30; /* seconds - go ahead and renew if creds are
about to expire */
- memset(&mcreds, 0, sizeof(mcreds));
- memset(&creds, 0, sizeof(creds));
*rc = 0;
if (!cc) {
/* ok - no error */
@@ -1890,7 +1888,7 @@ set_krb5_creds(
krb5_principal princ = NULL;
char *princ_name = NULL;
krb5_error_code rc = 0;
- krb5_creds creds;
+ krb5_creds creds = {0};
krb5_keytab kt = NULL;
char *cc_name = NULL;
char ktname[MAX_KEYTAB_NAME_LEN];
@@ -1902,10 +1900,6 @@ set_krb5_creds(
appear to be used
currently */
- /* wipe this out so we can safely free it later if we
- short circuit */
- memset(&creds, 0, sizeof(creds));
-
/*
* we are using static variables and sharing an in-memory credentials cache
* so we put a lock around all kerberos interactions
diff --git a/ldap/servers/slapd/log.c b/ldap/servers/slapd/log.c
index 1e456c8..1195c54 100644
--- a/ldap/servers/slapd/log.c
+++ b/ldap/servers/slapd/log.c
@@ -3705,7 +3705,7 @@ log__delete_error_logfile(int locked)
int rv = 0;
char *logstr;
char buffer[BUFSIZ];
- char tbuf[TBUFSIZE];
+ char tbuf[TBUFSIZE] = {0};
/* If we have only one log, then will delete this one */
if (loginfo.log_error_maxnumlogs == 1) {
@@ -3826,7 +3826,6 @@ delete_logfile:
return 0;
}
}
- memset(tbuf, 0, sizeof(tbuf));
log_convert_time (delete_logp->l_ctime, tbuf, 1 /*short */);
if (!locked) {
/* if locked, we should not call slapi_log_err,
diff --git a/ldap/servers/slapd/main.c b/ldap/servers/slapd/main.c
index 158d49d..a59b7d5 100644
--- a/ldap/servers/slapd/main.c
+++ b/ldap/servers/slapd/main.c
@@ -1167,9 +1167,8 @@ cleanup:
void
signal2sigaction( int s, void *a )
{
- struct sigaction act;
+ struct sigaction act = {0};
- memset(&act, 0, sizeof(struct sigaction));
act.sa_handler = (VFP)a;
act.sa_flags = 0;
(void)sigemptyset( &act.sa_mask );
@@ -2003,7 +2002,7 @@ static int
slapd_exemode_ldif2db(void)
{
int return_value= 0;
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
struct slapdplugin *plugin;
slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
@@ -2094,7 +2093,6 @@ slapd_exemode_ldif2db(void)
if (!(slapd_ldap_debug & LDAP_DEBUG_BACKLDBM)) {
g_set_detached(1);
}
- memset( &pb, '\0', sizeof(pb) );
pb.pb_backend = NULL;
pb.pb_plugin = plugin;
pb.pb_removedupvals = ldif2db_removedupvals;
@@ -2126,7 +2124,7 @@ static int
slapd_exemode_db2ldif(int argc, char** argv)
{
int return_value= 0;
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
struct slapdplugin *plugin;
slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
char *my_ldiffile;
@@ -2218,7 +2216,6 @@ slapd_exemode_db2ldif(int argc, char** argv)
if (!(slapd_ldap_debug & LDAP_DEBUG_BACKLDBM)) {
g_set_detached(1);
}
- memset( &pb, '\0', sizeof(pb) );
pb.pb_backend = NULL;
pb.pb_plugin = plugin;
pb.pb_ldif_include = db2ldif_include;
@@ -2344,7 +2341,7 @@ static int slapd_exemode_db2index(void)
{
int return_value= 0;
struct slapdplugin *plugin;
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
mapping_tree_init();
@@ -2414,7 +2411,6 @@ static int slapd_exemode_db2index(void)
usage( myname, extraname );
return 1;
}
- memset( &pb, '\0', sizeof(pb) );
pb.pb_backend = NULL;
pb.pb_plugin = plugin;
pb.pb_db2index_attrs = db2index_attrs;
@@ -2432,7 +2428,7 @@ static int
slapd_exemode_db2archive(void)
{
int return_value= 0;
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
struct slapdplugin *backend_plugin;
slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
@@ -2469,7 +2465,6 @@ slapd_exemode_db2archive(void)
g_set_detached(1);
}
- memset( &pb, '\0', sizeof(pb) );
pb.pb_backend = NULL;
pb.pb_plugin = backend_plugin;
pb.pb_instance_name = NULL;
@@ -2484,7 +2479,7 @@ static int
slapd_exemode_archive2db(void)
{
int return_value= 0;
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
struct slapdplugin *backend_plugin;
slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
@@ -2522,7 +2517,6 @@ slapd_exemode_archive2db(void)
g_set_detached(1);
}
- memset( &pb, '\0', sizeof(pb) );
pb.pb_backend = NULL;
pb.pb_plugin = backend_plugin;
pb.pb_instance_name = cmd_line_instance_name;
@@ -2541,7 +2535,7 @@ static int
slapd_exemode_upgradedb(void)
{
int return_value= 0;
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
struct slapdplugin *backend_plugin;
slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
@@ -2579,7 +2573,6 @@ slapd_exemode_upgradedb(void)
return 1;
}
- memset( &pb, '\0', sizeof(pb) );
pb.pb_backend = NULL;
pb.pb_plugin = backend_plugin;
pb.pb_seq_val = archive_name;
@@ -2608,7 +2601,7 @@ static int
slapd_exemode_upgradednformat(void)
{
int rc = -1; /* error, by default */
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
struct slapdplugin *backend_plugin;
slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
@@ -2650,7 +2643,6 @@ slapd_exemode_upgradednformat(void)
goto bail;
}
- memset( &pb, '\0', sizeof(pb) );
pb.pb_backend = NULL;
pb.pb_plugin = backend_plugin;
pb.pb_instance_name = cmd_line_instance_name;
@@ -2686,7 +2678,7 @@ static int
slapd_exemode_dbverify(void)
{
int return_value = 0;
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
struct slapdplugin *backend_plugin;
/* this should be the first time to be called! if the init order
@@ -2706,7 +2698,6 @@ slapd_exemode_dbverify(void)
return 1;
}
- memset( &pb, '\0', sizeof(pb) );
pb.pb_backend = NULL;
pb.pb_seq_type = dbverify_verbose;
pb.pb_plugin = backend_plugin;
diff --git a/ldap/servers/slapd/mapping_tree.c b/ldap/servers/slapd/mapping_tree.c
index e0f1ffe..4e91757 100644
--- a/ldap/servers/slapd/mapping_tree.c
+++ b/ldap/servers/slapd/mapping_tree.c
@@ -3318,7 +3318,7 @@ slapi_get_suffix_by_dn(const Slapi_DN *dn)
int
slapi_mtn_set_referral(const Slapi_DN *sdn, char ** referral)
{
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
Slapi_Mods smods;
int rc = LDAP_SUCCESS,i = 0, j = 0;
Slapi_DN* node_sdn;
@@ -3390,7 +3390,6 @@ slapi_mtn_set_referral(const Slapi_DN *sdn, char ** referral)
if ( do_modify )
{
- pblock_init (&pb);
slapi_modify_internal_set_pb_ext (&pb, node_sdn,
slapi_mods_get_ldapmods_byref(&smods), NULL,
NULL, (void *) plugin_get_default_component_id(), 0);
@@ -3416,7 +3415,7 @@ slapi_mtn_set_referral(const Slapi_DN *sdn, char ** referral)
int
slapi_mtn_set_state(const Slapi_DN *sdn, char *state)
{
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
Slapi_Mods smods;
int rc = LDAP_SUCCESS;
Slapi_DN *node_sdn;
@@ -3444,7 +3443,6 @@ slapi_mtn_set_state(const Slapi_DN *sdn, char *state)
/* Otherwise, means that the state has changed, modify it */
slapi_mods_init (&smods, 1);
slapi_mods_add(&smods, LDAP_MOD_REPLACE, "nsslapd-state",
strlen(state), state);
- pblock_init (&pb);
slapi_modify_internal_set_pb_ext (&pb, node_sdn,
slapi_mods_get_ldapmods_byref(&smods), NULL,
NULL, (void *) plugin_get_default_component_id(), 0);
@@ -3466,7 +3464,7 @@ bail:
Slapi_Attr *
mtn_get_attr(char* node_dn, char * type)
{
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
int res = 0;
Slapi_Entry **entries = NULL;
Slapi_Attr *attr = NULL;
@@ -3475,7 +3473,6 @@ mtn_get_attr(char* node_dn, char * type)
attrs = (char **)slapi_ch_calloc(2, sizeof(char *));
attrs[0] = slapi_ch_strdup(type);
- pblock_init(&pb);
slapi_search_internal_set_pb(&pb, node_dn, LDAP_SCOPE_BASE,
"objectclass=nsMappingTree", attrs, 0, NULL, NULL,
(void *) plugin_get_default_component_id(), 0);
@@ -3856,13 +3853,12 @@ static void dump_mapping_tree(mapping_tree_node *parent, int
depth)
static int
_mtn_update_config_param(int op, char *type, char *strvalue)
{
- Slapi_PBlock confpb;
+ Slapi_PBlock confpb = {0};
Slapi_DN sdn;
Slapi_Mods smods;
LDAPMod **mods;
int rc = LDAP_PARAM_ERROR;
- pblock_init (&confpb);
slapi_mods_init (&smods, 0);
switch (op) {
case LDAP_MOD_DELETE:
diff --git a/ldap/servers/slapd/modify.c b/ldap/servers/slapd/modify.c
index 3aa4359..51bf057 100644
--- a/ldap/servers/slapd/modify.c
+++ b/ldap/servers/slapd/modify.c
@@ -406,12 +406,10 @@ slapi_modify_internal(const char *idn,
LDAPControl **controls,
int dummy)
{
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
Slapi_PBlock *result_pb = NULL;
int opresult;
- pblock_init(&pb);
-
slapi_modify_internal_set_pb (&pb, idn, (LDAPMod**)mods, controls, NULL,
(void *)plugin_get_default_component_id(), 0);
diff --git a/ldap/servers/slapd/modrdn.c b/ldap/servers/slapd/modrdn.c
index 8b77539..15f5210 100644
--- a/ldap/servers/slapd/modrdn.c
+++ b/ldap/servers/slapd/modrdn.c
@@ -245,14 +245,12 @@ slapi_modrdn_internal(const char *iodn, const char *inewrdn, int
deloldrdn, LDAP
Slapi_PBlock *
slapi_rename_internal(const char *iodn, const char *inewrdn, const char *inewsuperior,
int deloldrdn, LDAPControl **controls, int dummy)
{
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
Slapi_PBlock *result_pb = NULL;
int opresult= 0;
Slapi_DN sdn;
Slapi_DN newsuperiorsdn;
- pblock_init (&pb);
-
slapi_sdn_init_dn_byref(&sdn, iodn);
slapi_sdn_init_dn_byref(&newsuperiorsdn, inewsuperior);
diff --git a/ldap/servers/slapd/operation.c b/ldap/servers/slapd/operation.c
index 19e572a..ccbc549 100644
--- a/ldap/servers/slapd/operation.c
+++ b/ldap/servers/slapd/operation.c
@@ -148,6 +148,7 @@ operation_init(Slapi_Operation *o, int flags)
if (NULL != o)
{
BerElement *ber = o->o_ber; /* may have already been set */
+ /* We can't get rid of this til we remove the operation stack. */
memset(o,0,sizeof(Slapi_Operation));
o->o_ber = ber;
o->o_msgid = -1;
@@ -195,7 +196,7 @@ operation_new(int flags)
BerElement *ber = NULL;
if(flags & OP_FLAG_INTERNAL)
{
- o = (Slapi_Operation *) slapi_ch_malloc(sizeof(Slapi_Operation));
+ o = (Slapi_Operation *) slapi_ch_calloc(1, sizeof(Slapi_Operation));
}
else
{
diff --git a/ldap/servers/slapd/pblock.c b/ldap/servers/slapd/pblock.c
index dcac322..52b8cf5 100644
--- a/ldap/servers/slapd/pblock.c
+++ b/ldap/servers/slapd/pblock.c
@@ -35,7 +35,7 @@ pblock_init_common(
)
{
PR_ASSERT( NULL != pb );
- memset( pb, '\0', sizeof(Slapi_PBlock) );
+ /* No need to memset, this is only called in backend_manager, and it uses {0} */
pb->pb_backend = be;
pb->pb_conn = conn;
pb->pb_op = op;
diff --git a/ldap/servers/slapd/plugin.c b/ldap/servers/slapd/plugin.c
index 4cdd567..7744aa6 100644
--- a/ldap/servers/slapd/plugin.c
+++ b/ldap/servers/slapd/plugin.c
@@ -1753,10 +1753,9 @@ plugin_dependency_startall(int argc, char** argv, char *errmsg, int
operation, c
if(!config[plugin_index].entry_created)
{
int plugin_actions = 0;
- Slapi_PBlock newpb;
+ Slapi_PBlock newpb = {0};
Slapi_Entry *newe;
- pblock_init(&newpb);
newe = slapi_entry_dup( config[plugin_index].e );
slapi_add_entry_internal_set_pb(&newpb, newe, NULL,
plugin_get_default_component_id(), plugin_actions);
@@ -2776,8 +2775,9 @@ plugin_free(struct slapdplugin *plugin)
}
release_componentid(plugin->plg_identity);
slapi_counter_destroy(&plugin->plg_op_counter);
- if (!plugin->plg_group)
+ if (!plugin->plg_group) {
plugin_config_cleanup(&plugin->plg_conf);
+ }
slapi_ch_free((void**)&plugin);
}
@@ -2844,7 +2844,7 @@ plugin_setup(Slapi_Entry *plugin_entry, struct slapi_componentid
*group,
struct slapi_componentid *cid = NULL;
const char *existname = 0;
slapi_plugin_init_fnptr initfunc = p_initfunc;
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
int status = 0;
int enabled = 1;
char *configdir = 0;
@@ -3067,7 +3067,6 @@ plugin_setup(Slapi_Entry *plugin_entry, struct slapi_componentid
*group,
PR_snprintf(attrname, sizeof(attrname), "%s%d", ATTR_PLUGIN_ARG, ++ii);
} while (skipped < MAXSKIPPED);
- memset((char *)&pb, '\0', sizeof(pb));
slapi_pblock_set(&pb, SLAPI_PLUGIN, plugin);
slapi_pblock_set(&pb, SLAPI_PLUGIN_VERSION, (void *)SLAPI_PLUGIN_CURRENT_VERSION);
@@ -3472,9 +3471,7 @@ plugin_remove_plugins(struct slapdplugin *plugin_entry, char
*plugin_type)
/*
* Call the close function, cleanup the hashtable & the global
shutdown list
*/
- Slapi_PBlock pb;
-
- pblock_init(&pb);
+ Slapi_PBlock pb = {0};
plugin_set_stopped(plugin);
if (slapi_counter_get_value(plugin->plg_op_counter) > 0){
/*
@@ -4328,7 +4325,7 @@ bail:
int
slapi_set_plugin_default_config(const char *type, Slapi_Value *value)
{
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
Slapi_Entry **entries = NULL;
int rc = LDAP_SUCCESS;
char **search_attrs = NULL; /* used by search */
@@ -4340,7 +4337,6 @@ slapi_set_plugin_default_config(const char *type, Slapi_Value
*value)
charray_add(&search_attrs, slapi_ch_strdup(type));
/* cn=plugin default config,cn=config */
- pblock_init(&pb);
slapi_search_internal_set_pb(&pb,
SLAPI_PLUGIN_DEFAULT_CONFIG, /* Base DN (normalized) */
LDAP_SCOPE_BASE,
@@ -4432,7 +4428,7 @@ slapi_set_plugin_default_config(const char *type, Slapi_Value
*value)
int
slapi_get_plugin_default_config(char *type, Slapi_ValueSet **valueset)
{
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
Slapi_Entry **entries = NULL;
int rc = LDAP_PARAM_ERROR;
char **search_attrs = NULL; /* used by search */
@@ -4444,7 +4440,6 @@ slapi_get_plugin_default_config(char *type, Slapi_ValueSet
**valueset)
charray_add(&search_attrs, slapi_ch_strdup(type));
/* cn=plugin default config,cn=config */
- pblock_init(&pb);
slapi_search_internal_set_pb(&pb,
SLAPI_PLUGIN_DEFAULT_CONFIG, /* Base DN (normalized) */
LDAP_SCOPE_BASE,
diff --git a/ldap/servers/slapd/plugin_internal_op.c
b/ldap/servers/slapd/plugin_internal_op.c
index 05ee90d..8cbdf06 100644
--- a/ldap/servers/slapd/plugin_internal_op.c
+++ b/ldap/servers/slapd/plugin_internal_op.c
@@ -205,7 +205,7 @@ slapi_seq_callback( const char *ibase,
plugin_referral_entry_callback ref_callback)
{
int r;
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
if (ibase == NULL)
{
@@ -214,8 +214,6 @@ slapi_seq_callback( const char *ibase,
return -1;
}
- pblock_init(&pb);
-
slapi_seq_internal_set_pb(&pb, (char *)ibase, type, attrname, val, attrs,
attrsonly, controls,
plugin_get_default_component_id(), 0);
diff --git a/ldap/servers/slapd/plugin_mr.c b/ldap/servers/slapd/plugin_mr.c
index 35874ec..d216d12 100644
--- a/ldap/servers/slapd/plugin_mr.c
+++ b/ldap/servers/slapd/plugin_mr.c
@@ -574,7 +574,7 @@ plugin_mr_filter_create (mr_filter_t* f)
{
int rc = LDAP_UNAVAILABLE_CRITICAL_EXTENSION;
struct slapdplugin* mrp = plugin_mr_find_registered (f->mrf_oid);
- Slapi_PBlock pb;
+ Slapi_PBlock pb = {0};
if (mrp != NULL)
{
@@ -599,7 +599,6 @@ plugin_mr_filter_create (mr_filter_t* f)
if (mrp)
{
/* set the default index create fn */
- pblock_init(&pb);
slapi_pblock_set(&pb, SLAPI_PLUGIN, mrp);
slapi_pblock_set(&pb, SLAPI_PLUGIN_MR_FILTER_CREATE_FN,
default_mr_filter_create);
slapi_pblock_set(&pb, SLAPI_PLUGIN_MR_INDEXER_CREATE_FN,
default_mr_indexer_create);
diff --git a/ldap/servers/slapd/schema.c b/ldap/servers/slapd/schema.c
index ff77c92..f50f573 100644
--- a/ldap/servers/slapd/schema.c
+++ b/ldap/servers/slapd/schema.c
@@ -1807,8 +1807,7 @@ schema_list_attributes_callback(struct asyntaxinfo *asi, void *arg)
char **
slapi_schema_list_attribute_names(unsigned long flag)
{
- struct listargs aew;
- memset(&aew,0,sizeof(struct listargs));
+ struct listargs aew = {0};
aew.flag=flag;
attr_syntax_enumerate_attrs(schema_list_attributes_callback, &aew,
@@ -5339,8 +5338,7 @@ init_schema_dse_ext(char *schemadir, Slapi_Backend *be,
int dont_write = 1;
int merge = 1;
int dont_dup_check = 1;
- Slapi_PBlock pb;
- memset(&pb, 0, sizeof(pb));
+ Slapi_PBlock pb = {0};
/* don't write out the file when reading */
slapi_pblock_set(&pb, SLAPI_DSE_DONT_WRITE_WHEN_ADDING, (void*)&dont_write);
/* duplicate entries are allowed */
diff --git a/ldap/servers/slapd/ssl.c b/ldap/servers/slapd/ssl.c
index 5ad22fd..f6da414 100644
--- a/ldap/servers/slapd/ssl.c
+++ b/ldap/servers/slapd/ssl.c
@@ -938,7 +938,7 @@ freeChildren( char **list ) {
static void
entrySetValue(Slapi_DN *sdn, char *type, char *value)
{
- Slapi_PBlock mypb;
+ Slapi_PBlock mypb = {0};
LDAPMod attr;
LDAPMod *mods[2];
char *values[2];
@@ -954,7 +954,6 @@ entrySetValue(Slapi_DN *sdn, char *type, char *value)
mods[0] = &attr;
mods[1] = NULL;
- pblock_init(&mypb);
slapi_modify_internal_set_pb_ext(&mypb, sdn, mods, NULL, NULL, (void
*)plugin_get_default_component_id(), 0);
slapi_modify_internal_pb(&mypb);
pblock_done(&mypb);
diff --git a/ldap/servers/slapd/task.c b/ldap/servers/slapd/task.c
index 0305ec8..ad52e9d 100644
--- a/ldap/servers/slapd/task.c
+++ b/ldap/servers/slapd/task.c
@@ -701,15 +701,13 @@ static Slapi_Entry *get_internal_entry(Slapi_PBlock *pb, char *dn)
static void modify_internal_entry(char *dn, LDAPMod **mods)
{
- Slapi_PBlock pb;
Slapi_Operation *op;
int ret = 0;
int tries = 0;
int dont_write_file = 1;
do {
-
- pblock_init(&pb);
+ Slapi_PBlock pb = {0};
slapi_modify_internal_set_pb(&pb, dn, mods, NULL, NULL,
(void *)plugin_get_default_component_id(), 0);
@@ -836,7 +834,7 @@ static int task_import_add(Slapi_PBlock *pb, Slapi_Entry *e,
int idx, rv = 0;
const char *do_attr_indexes, *uniqueid_kind_str;
int uniqueid_kind = SLAPI_UNIQUEID_GENERATE_TIME_BASED;
- Slapi_PBlock mypb;
+ Slapi_PBlock mypb = {0};
Slapi_Task *task;
char *nameFrombe_name = NULL;
const char *encrypt_on_import = NULL;
@@ -978,7 +976,6 @@ static int task_import_add(Slapi_PBlock *pb, Slapi_Entry *e,
goto out;
}
- memset(&mypb, 0, sizeof(mypb));
mypb.pb_backend = be;
mypb.pb_plugin = be->be_database;
mypb.pb_removedupvals = atoi(fetch_attr(e, "nsImportChunkSize",
"0"));
@@ -1797,7 +1794,7 @@ task_upgradedb_add(Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Entry
*eAfter,
int rv = SLAPI_DSE_CALLBACK_OK;
Slapi_Backend *be = NULL;
Slapi_Task *task = NULL;
- Slapi_PBlock mypb;
+ Slapi_PBlock mypb = {0};
const char *archive_dir = NULL;
const char *force = NULL;
const char *database_type = "ldbm database";
@@ -1864,7 +1861,6 @@ task_upgradedb_add(Slapi_PBlock *pb, Slapi_Entry *e, Slapi_Entry
*eAfter,
task->task_work = 1;
task->task_progress = 0;
- memset(&mypb, 0, sizeof(mypb));
mypb.pb_backend = be;
mypb.pb_plugin = be->be_database;
if (force && 0 == strcasecmp(force, "true"))
@@ -1956,17 +1952,14 @@ task_sysconfig_reload_add(Slapi_PBlock *pb, Slapi_Entry *e,
Slapi_Entry *eAfter,
/* skip comments */
continue;
} else {
- char env_value[sizeof(line)];
- char env_var[sizeof(line)];
+ char env_value[sizeof(line)] = {0};
+ char env_var[sizeof(line)] = {0};
int using_setenv = 0;
int value_index = 0;
int start_value = 0;
int var_index = 0;
int inquotes = 0;
- memset(env_var, 0, sizeof(env_var));
- memset(env_value, 0, sizeof(env_value));
-
/*
* Remove leading spaces and tabs
*/
diff --git a/ldap/servers/slapd/time.c b/ldap/servers/slapd/time.c
index 89bc91d..db17bab 100644
--- a/ldap/servers/slapd/time.c
+++ b/ldap/servers/slapd/time.c
@@ -364,12 +364,11 @@ write_genTime (time_t from, struct berval* into)
time_t
read_genTime(struct berval*from)
{
- struct tm t;
+ struct tm t = {0};
time_t retTime;
time_t diffsec = 0;
int i, gflag = 0, havesec = 0;
- memset (&t, 0, sizeof(t));
t.tm_isdst = -1;
t.tm_year = strntoul (from->bv_val , 4, 10) - 1900L;
t.tm_mon = strntoul (from->bv_val + 4, 2, 10) - 1;
diff --git a/ldap/servers/slapd/uniqueid.c b/ldap/servers/slapd/uniqueid.c
index c878a8f..3f1f6a8 100644
--- a/ldap/servers/slapd/uniqueid.c
+++ b/ldap/servers/slapd/uniqueid.c
@@ -37,16 +37,7 @@ static int isValidFormat (const char * buff);
Slapi_UniqueID *slapi_uniqueIDNew ()
{
Slapi_UniqueID *uId;
- uId = (Slapi_UniqueID*)slapi_ch_malloc (sizeof (Slapi_UniqueID));
-
- if (uId == NULL)
- {
- slapi_log_err(SLAPI_LOG_ERR, MODULE, "uniqueIDNew: "
- "failed to allocate new id.\n");
- return NULL;
- }
-
- memset (uId, 0, sizeof (Slapi_UniqueID));
+ uId = (Slapi_UniqueID*)slapi_ch_calloc (1, sizeof (Slapi_UniqueID));
return uId;
}
diff --git a/ldap/servers/slapd/uniqueidgen.c b/ldap/servers/slapd/uniqueidgen.c
index a6c03d7..6ac0799 100644
--- a/ldap/servers/slapd/uniqueidgen.c
+++ b/ldap/servers/slapd/uniqueidgen.c
@@ -176,16 +176,11 @@ int slapi_uniqueIDGenerateFromNameString (char **uId,
const void *name, int namelen)
{
int rc;
- Slapi_UniqueID idBase;
- Slapi_UniqueID idGen;
+ Slapi_UniqueID idBase = {0};
+ Slapi_UniqueID idGen = {0};
/* just use Id of all 0 as base id */
- if (uIdBase == NULL)
- {
- memset (&idBase, 0, sizeof (idBase));
- memset (&idGen, 0, sizeof (idGen));
- }
- else
+ if (uIdBase != NULL)
{
rc = slapi_uniqueIDScan (&idBase, uIdBase);
if (rc != UID_SUCCESS)
diff --git a/ldap/servers/slapd/util.c b/ldap/servers/slapd/util.c
index 3a77522..48fa3c4 100644
--- a/ldap/servers/slapd/util.c
+++ b/ldap/servers/slapd/util.c
@@ -412,7 +412,7 @@ filter_stuff_func(void *arg, const char *val, PRUint32 slen)
char*
slapi_filter_sprintf(const char *fmt, ...)
{
- struct filter_ctx ctx;
+ struct filter_ctx ctx = {0};
va_list args;
char *buf;
int rc;
@@ -1143,7 +1143,7 @@ int
slapd_chown_if_not_owner(const char *filename, uid_t uid, gid_t gid)
{
int fd = -1;
- struct stat statbuf;
+ struct stat statbuf = {0};
int result = 1;
if (!filename) {
return result;
@@ -1153,7 +1153,6 @@ slapd_chown_if_not_owner(const char *filename, uid_t uid, gid_t
gid)
if (fd == -1) {
return result;
}
- memset(&statbuf, '\0', sizeof(statbuf));
if (!(result = fstat(fd, &statbuf)))
{
if (((uid != -1) && (uid != statbuf.st_uid)) ||
@@ -1519,16 +1518,16 @@ int util_info_sys_pages(size_t *pagesize, size_t *pages, size_t
*procpages, size
*availpages = util_getvirtualmemsize() / *pagesize;
/* solaris has THE most annoying way to get this info */
{
- struct prpsinfo psi;
+ struct prpsinfo psi = {0};
char fn[40];
int fd;
sprintf(fn, "/proc/%d", getpid());
fd = open(fn, O_RDONLY);
if (fd >= 0) {
- memset(&psi, 0, sizeof(psi));
- if (ioctl(fd, PIOCPSINFO, (void *)&psi) == 0)
+ if (ioctl(fd, PIOCPSINFO, (void *)&psi) == 0) {
*procpages = psi.pr_size;
+ }
close(fd);
}
}
diff --git a/ldap/servers/slapd/uuid.c b/ldap/servers/slapd/uuid.c
index bfa8467..08ca7b3 100644
--- a/ldap/servers/slapd/uuid.c
+++ b/ldap/servers/slapd/uuid.c
@@ -118,7 +118,7 @@ typedef struct
static unsigned int uuid_seed = 0; /* seed for the random generator */
- uuid_state _state; /* generator's state */
+uuid_state _state;/* generator's state */
/* uuid_init -- initializes uuid layer */
int uuid_init (const char *configDir, const Slapi_DN *configDN, PRBool mtGen)
@@ -276,16 +276,13 @@ void uuid_create_from_name(guid_t * uuid, /* resulting UUID */
{
PK11Context *c = NULL;
- unsigned char hash[16];
+ unsigned char hash[16] = {0};
unsigned int hashLen;
- guid_t net_nsid; /* context UUID in network byte order */
-
- memset(hash, 0, 16);
+ guid_t net_nsid = {0}; /* context UUID in network byte order */
/* put name space ID in network byte order so it hashes the same
no matter what endian machine we're on */
- memset(&net_nsid, 0, sizeof(guid_t));
net_nsid.time_low = PR_htonl(nsid.time_low);
net_nsid.time_mid = PR_htons(nsid.time_mid);
net_nsid.time_hi_and_version = PR_htons(nsid.time_hi_and_version);
diff --git a/lib/ldaputil/certmap.c b/lib/ldaputil/certmap.c
index b05bbba..8525f51 100644
--- a/lib/ldaputil/certmap.c
+++ b/lib/ldaputil/certmap.c
@@ -164,11 +164,10 @@ static int certmap_name_to_secoid (const char *str)
NSAPI_PUBLIC int ldapu_list_alloc (LDAPUList_t **list)
{
- *list = (LDAPUList_t *)malloc(sizeof(LDAPUList_t));
+ *list = (LDAPUList_t *)calloc(1, sizeof(LDAPUList_t));
if (!*list) return LDAPU_ERR_OUT_OF_MEMORY;
- memset((void *)*list, 0, sizeof(LDAPUList_t));
return LDAPU_SUCCESS;
}
@@ -193,13 +192,12 @@ NSAPI_PUBLIC int ldapu_list_add_info (LDAPUList_t *list, void
*info)
LDAPUListNode_t *node;
/* Allocate the list node and set info in the node. */
- node = (LDAPUListNode_t *)malloc(sizeof(LDAPUListNode_t));
+ node = (LDAPUListNode_t *)calloc(1, sizeof(LDAPUListNode_t));
if (!node) {
return LDAPU_ERR_OUT_OF_MEMORY;
}
- memset((void *)node, 0, sizeof(LDAPUListNode_t));
node->info = info;
return ldapu_list_add_node(list, node);
@@ -281,15 +279,13 @@ static int dbinfo_to_certinfo (DBConfDBInfo_t *db_info,
*certinfo_out = 0;
- certinfo = (LDAPUCertMapInfo_t *)malloc(sizeof(LDAPUCertMapInfo_t));
+ certinfo = (LDAPUCertMapInfo_t *)calloc(1, sizeof(LDAPUCertMapInfo_t));
if (!certinfo) {
rv = LDAPU_ERR_OUT_OF_MEMORY;
goto error;
}
- memset((void *)certinfo, 0, sizeof(LDAPUCertMapInfo_t));
-
/* hijack few structures rather then copy. Make the pointers to the
structures NULL in the original structure so that they don't freed up
when db_info is freed. */
@@ -1453,7 +1449,7 @@ int ldapu_certmap_init (const char *config_file,
LDAPUCertMapInfo_t **certmap_default)
{
int rv;
- certmap_listinfo = (LDAPUCertMapListInfo_t *)malloc(sizeof(LDAPUCertMapListInfo_t));
+ certmap_listinfo = (LDAPUCertMapListInfo_t *)calloc(1,
sizeof(LDAPUCertMapListInfo_t));
*certmap_list = 0;
*certmap_default = 0;
@@ -1461,8 +1457,6 @@ int ldapu_certmap_init (const char *config_file,
if (!certmap_listinfo) return LDAPU_ERR_OUT_OF_MEMORY;
- memset((void *)certmap_listinfo, 0, sizeof(LDAPUCertMapListInfo_t));
-
rv = certmap_read_certconfig_file(config_file);
if (rv == LDAPU_SUCCESS) {
commit c27605b2b9fc988e7c28413548930836416b06af
Author: William Brown <firstyear(a)redhat.com>
Date: Fri Nov 18 10:09:50 2016 +1000
Ticket 49021 - Automatic thread tuning
Bug Description: We currently always set 30 threads on systems no matter their
size. We should tune the threads more appropriately out of the box.
Fix Description: Add a thread autotuning. We start at 16 threads, and ramp up,
reducing the rate off addition as we grow to a cap of 512 threads.
https://fedorahosted.org/389/ticket/49021
Author: wibrown
Review by: nhosoi, mreynolds (Thanks)
diff --git a/ldap/servers/slapd/libglobs.c b/ldap/servers/slapd/libglobs.c
index b168506..0e818a9 100644
--- a/ldap/servers/slapd/libglobs.c
+++ b/ldap/servers/slapd/libglobs.c
@@ -1457,7 +1457,7 @@ FrontendConfig_init(void) {
init_require_secure_binds = cfg->require_secure_binds = LDAP_OFF;
cfg->allow_anon_access = SLAPD_DEFAULT_ALLOW_ANON_ACCESS;
init_slapi_counters = cfg->slapi_counters = LDAP_ON;
- cfg->threadnumber = SLAPD_DEFAULT_MAX_THREADS;
+ cfg->threadnumber = util_get_hardware_threads();
cfg->maxthreadsperconn = SLAPD_DEFAULT_MAX_THREADS_PER_CONN;
cfg->reservedescriptors = SLAPD_DEFAULT_RESERVE_FDS;
cfg->idletimeout = SLAPD_DEFAULT_IDLE_TIMEOUT;
@@ -3867,34 +3867,38 @@ config_set_encryptionalias( const char *attrname, char *value,
char *errorbuf, i
return retVal;
}
-int
+int
config_set_threadnumber( const char *attrname, char *value, char *errorbuf, int apply )
{
- int retVal = LDAP_SUCCESS;
- long threadnum = 0;
- char *endp = NULL;
+ int retVal = LDAP_SUCCESS;
+ long threadnum = 0;
+ char *endp = NULL;
- slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
+ slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
- if ( config_value_is_null( attrname, value, errorbuf, 0 )) {
- return LDAP_OPERATIONS_ERROR;
- }
+ if ( config_value_is_null( attrname, value, errorbuf, 0 )) {
+ return LDAP_OPERATIONS_ERROR;
+ }
- errno = 0;
- threadnum = strtol(value, &endp, 10);
-
- if ( *endp != '\0' || errno == ERANGE || threadnum < 1 || threadnum >
65535 ) {
- slapi_create_errormsg(errorbuf, SLAPI_DSE_RETURNTEXT_SIZE,
- "%s: invalid value \"%s\", maximum thread number must range from 1
to 65535", attrname, value);
- retVal = LDAP_OPERATIONS_ERROR;
- }
-
- if (apply) {
- CFG_LOCK_WRITE(slapdFrontendConfig);
- /* max_threads = threadnum; */
- slapdFrontendConfig->threadnumber = threadnum;
- CFG_UNLOCK_WRITE(slapdFrontendConfig);
- }
- return retVal;
+ errno = 0;
+ threadnum = strtol(value, &endp, 10);
+
+ /* Means we want to re-run the hardware detection. */
+ if (threadnum == -1) {
+ threadnum = util_get_hardware_threads();
+ }
+
+ if ( *endp != '\0' || errno == ERANGE || threadnum < 1 || threadnum >
65535 ) {
+ slapi_create_errormsg(errorbuf, SLAPI_DSE_RETURNTEXT_SIZE,
+ "%s: invalid value \"%s\", maximum thread number must range from
1 to 65535", attrname, value);
+ retVal = LDAP_OPERATIONS_ERROR;
+ }
+ if (apply) {
+ CFG_LOCK_WRITE(slapdFrontendConfig);
+ /* max_threads = threadnum; */
+ slapdFrontendConfig->threadnumber = threadnum;
+ CFG_UNLOCK_WRITE(slapdFrontendConfig);
+ }
+ return retVal;
}
int
@@ -5497,16 +5501,25 @@ config_get_encryptionalias(void) {
return retVal;
}
-int
+long
config_get_threadnumber(void) {
- slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
- int retVal;
-
- CFG_LOCK_READ(slapdFrontendConfig);
- retVal = slapdFrontendConfig->threadnumber;
- CFG_UNLOCK_READ(slapdFrontendConfig);
+ slapdFrontendConfig_t *slapdFrontendConfig = getFrontendConfig();
+ long retVal;
- return retVal;
+ CFG_LOCK_READ(slapdFrontendConfig);
+ retVal = slapdFrontendConfig->threadnumber;
+ CFG_UNLOCK_READ(slapdFrontendConfig);
+
+ if (retVal == -1) {
+ retVal = util_get_hardware_threads();
+ }
+
+ /* We *still* can't detect hardware threads. Okay, return 30 :( */
+ if (retVal == -1) {
+ retVal = 30;
+ }
+
+ return retVal;
}
int
diff --git a/ldap/servers/slapd/proto-slap.h b/ldap/servers/slapd/proto-slap.h
index 73010c2..af728a6 100644
--- a/ldap/servers/slapd/proto-slap.h
+++ b/ldap/servers/slapd/proto-slap.h
@@ -472,7 +472,7 @@ char *config_get_rootpwstoragescheme(void);
char *config_get_localuser(void);
char *config_get_workingdir(void);
char *config_get_encryptionalias(void);
-int config_get_threadnumber(void);
+long config_get_threadnumber(void);
int config_get_maxthreadsperconn(void);
int config_get_maxdescriptors(void);
int config_get_reservedescriptors(void);
diff --git a/ldap/servers/slapd/slap.h b/ldap/servers/slapd/slap.h
index 1066f3e..403bfd9 100644
--- a/ldap/servers/slapd/slap.h
+++ b/ldap/servers/slapd/slap.h
@@ -257,8 +257,8 @@ typedef void (*VFPV)(); /* takes undefined arguments */
#define SLAPD_DEFAULT_OUTBOUND_LDAP_IO_TIMEOUT_STR "300000"
#define SLAPD_DEFAULT_RESERVE_FDS 64
#define SLAPD_DEFAULT_RESERVE_FDS_STR "64"
-#define SLAPD_DEFAULT_MAX_THREADS 30 /* connection pool threads */
-#define SLAPD_DEFAULT_MAX_THREADS_STR "30"
+#define SLAPD_DEFAULT_MAX_THREADS -1 /* connection pool threads */
+#define SLAPD_DEFAULT_MAX_THREADS_STR "-1"
#define SLAPD_DEFAULT_MAX_THREADS_PER_CONN 5 /* allowed per connection */
#define SLAPD_DEFAULT_MAX_THREADS_PER_CONN_STR "5"
#define SLAPD_DEFAULT_MAX_BERSIZE_STR "0"
@@ -2405,7 +2405,7 @@ typedef struct _slapdFrontendConfig {
char *SNMPorganization;
char *SNMPlocation;
char *SNMPcontact;
- int threadnumber;
+ long threadnumber;
int timelimit;
char *accesslog;
struct berval **defaultreferral;
diff --git a/ldap/servers/slapd/slapi-private.h b/ldap/servers/slapd/slapi-private.h
index fc05b42..406b014 100644
--- a/ldap/servers/slapd/slapi-private.h
+++ b/ldap/servers/slapd/slapi-private.h
@@ -1383,6 +1383,13 @@ int util_info_sys_pages(size_t *pagesize, size_t *pages, size_t
*procpages, size
int util_is_cachesize_sane(size_t *cachesize);
/**
+ * Retrieve the number of threads the server should run with based on this hardware.
+ *
+ * \return -1 if the hardware detection failed. Any positive value is threads to use.
+ */
+long util_get_hardware_threads(void);
+
+/**
* Write an error message to the given error buffer.
*
* \param errorbuf. The buffer that the error message is written into. If NULL, nothing
happens. It could be a static array or allocated memory. If it is allocated memory, the
next param len should be given.
diff --git a/ldap/servers/slapd/util.c b/ldap/servers/slapd/util.c
index 9a8f61d..3a77522 100644
--- a/ldap/servers/slapd/util.c
+++ b/ldap/servers/slapd/util.c
@@ -1829,6 +1829,54 @@ out:
return issane;
}
+long
+util_get_hardware_threads(void) {
+#ifdef LINUX
+ long hw_threads = sysconf(_SC_NPROCESSORS_ONLN);
+ long threads = 0;
+ slapi_log_err(SLAPI_LOG_TRACE, "util_get_hardware_threads", "Detected
%lu hardware threads\n", threads);
+ /*
+ * Now we determine the number to run with based on threads. Initially, for
+ * low processor counts we ramp up quickly, we plateau a little, then, we
+ * at high numbers start to plateau and increase slowly.
+ * Should be
+ * 1 -> 16
+ * 2 -> 16
+ * 4 -> 24
+ * 8 -> 32
+ * 16 -> 48
+ * 32 -> 64
+ * 64 -> 96
+ * 128 -> 192
+ * 256 -> 384
+ * 512 -> 512
+ * 1024 -> 512
+ * 2048 -> 512
+ */
+
+ if (hw_threads >= 0 && hw_threads < 4) {
+ threads = 16;
+ } else if (hw_threads >= 4 && hw_threads < 32) {
+ threads = 16 + (hw_threads * 2);
+ } else if (hw_threads >= 32 && hw_threads < 64) {
+ threads = (hw_threads * 2);
+ } else if (hw_threads >= 64 && hw_threads < 512) {
+ /* Same as *1.5 */
+ threads = (hw_threads * 2) - (hw_threads / 2);
+ } else {
+ /* Cap at 512 for now ... */
+ threads = 512;
+ }
+ slapi_log_err(SLAPI_LOG_INFO, "util_get_hardware_threads",
"Automatically configuring %lu threads\n", threads);
+
+ return threads;
+#else
+ slapi_log_err(SLAPI_LOG_ERR, "util_get_hardware_threads", "ERROR:
Cannot detect hardware threads on this platform. This is probably a bug!\n");
+ /* Can't detect threads on this platform! */
+ return -1;
+#endif
+}
+
void
slapi_create_errormsg(
char *errorbuf,
commit d92394c23f5c12116530834f2519ddfc410e6b8a
Author: William Brown <firstyear(a)redhat.com>
Date: Fri Nov 25 10:27:46 2016 +1000
Ticket 48894 - Issues with delete of entrywsi with large entries.
Bug Description: During delets of entries with a high number of attributes,
a high amount of latency was observed. This was because during the valueset
purge for older csn's the vs->sorted was disposed of. This triggered a rebuild
of the valueset.
Fix Description: During the delete, don't purge the vs->sorted array. We need
to preserve it if possible which prevents the need to resort the array after
the delete.
https://fedorahosted.org/389/ticket/48894
Author: Mohammad N., Burk, J.
Review by: wibrown, mreynolds (Thanks)
diff --git a/ldap/servers/slapd/valueset.c b/ldap/servers/slapd/valueset.c
index 729a924..ac2f1be 100644
--- a/ldap/servers/slapd/valueset.c
+++ b/ldap/servers/slapd/valueset.c
@@ -422,61 +422,6 @@ valuearray_remove_value(const Slapi_Attr *a, Slapi_Value **va, const
Slapi_Value
return r;
}
-/*
- * Remove any values older than the CSN.
- */
-int
-valuearray_purge(Slapi_Value ***va, const CSN *csn)
-{
- int numValues=0;
- int i=0;
- int nextValue=0;
-
- PR_ASSERT(va!=NULL && *va!=NULL);
-
- /* Loop over all the values freeing the old ones. */
- for(i=0; (*va)[i]; i++)
- {
- csnset_purge(&((*va)[i]->v_csnset),csn);
- if ((*va)[i]->v_csnset == NULL)
- {
- slapi_value_free(&(*va)[i]);
- (*va)[i] = NULL;
- }
- }
- /* Now compact the value list. */
- numValues=i;
- nextValue = 0;
- i = 0;
- for(i=0;i<numValues;i++)
- {
- while((nextValue < numValues) && (NULL == (*va)[nextValue]))
- {
- nextValue++;
- }
- if(nextValue < numValues)
- {
- (*va)[i] = (*va)[nextValue];
- nextValue++;
- }
- else
- {
- break;
- }
- }
- (*va)[i] = NULL;
-
- /* All the values were deleted, we can discard the whole array. */
- if(NULL == (*va)[0])
- {
- slapi_ch_free((void**)va);
- *va= NULL;
- }
-
- /* return the number of remaining values */
- return(i);
-}
-
size_t
valuearray_size(Slapi_Value **va)
{
@@ -785,6 +730,80 @@ valueset_remove_value(const Slapi_Attr *a, Slapi_ValueSet *vs, const
Slapi_Value
return r;
}
+/*
+ * Remove any values older than the CSN from valueset.
+ */
+int
+valueset_array_purge(Slapi_ValueSet *vs, const CSN *csn)
+{
+ size_t i = 0;
+ size_t j = 0;
+ int nextValue = 0;
+ int numValues = 0;
+
+ /* Loop over all the values freeing the old ones. */
+ for(i = 0; i < vs->num; i++)
+ {
+ if (vs->sorted) {
+ j = vs->sorted[i];
+ } else {
+ j = i;
+ }
+ csnset_purge(&(vs->va[j]->v_csnset),csn);
+ if (vs->va[j]->v_csnset == NULL) {
+ slapi_value_free(&vs->va[j]);
+ vs->va[j] = NULL;
+ }
+ }
+ /* Now compact the value/sorted list. */
+ numValues = i;
+ nextValue = 0;
+ for(i = 0; i<numValues; i++) {
+ if (vs->sorted) {
+ j = vs->sorted[nextValue];
+ } else {
+ j = nextValue;
+ }
+ while((nextValue < numValues) && (NULL == vs->va[j])) {
+ if (vs->sorted) {
+ j = vs->sorted[nextValue++];
+ } else {
+ nextValue++;
+ }
+ }
+ if(nextValue < numValues) {
+ if(vs->sorted) {
+ vs->va[vs->sorted[i]] = vs->va[j];
+ vs->sorted[i] = j;
+ } else {
+ vs->va[i] = vs->va[j];
+ }
+ nextValue++;
+ } else {
+ break;
+ }
+ }
+
+ if(vs->sorted) {
+ vs->va[vs->sorted[i]] = NULL;
+ vs->sorted[i] = 0;
+ } else {
+ vs->va[i] = NULL;
+ }
+
+ /* All the values were deleted, we can discard the whole array. */
+ if(NULL == vs->va[0]) {
+ if(vs->sorted) {
+ slapi_ch_free ((void **)&vs->sorted);
+ }
+ slapi_ch_free ((void **)&vs->va);
+ vs->va= NULL;
+ }
+
+ /* return the number of remaining values */
+ return i;
+}
+
/*
* Remove any values older than the CSN.
*/
@@ -793,22 +812,12 @@ valueset_purge(Slapi_ValueSet *vs, const CSN *csn)
{
int r= 0;
if(!valuearray_isempty(vs->va)) {
- /* valuearray_purge is not valueset and sorting aware,
- * maybe need to rewrite, at least keep the valueset
- * consistent
- */
- r= valuearray_purge(&vs->va, csn);
+ r= valueset_array_purge(vs, csn);
vs->num = r;
if (vs->va == NULL) {
/* va was freed */
vs->max = 0;
}
- /* we can no longer rely on the sorting */
- if (vs->sorted != NULL)
- {
- slapi_ch_free ((void **)&vs->sorted);
- vs->sorted = NULL;
- }
PR_ASSERT((vs->sorted == NULL) || (vs->num < VALUESET_ARRAY_SORT_THRESHOLD) ||
((vs->num >= VALUESET_ARRAY_SORT_THRESHOLD) && (vs->sorted[0] <
vs->num)));
}
return 0;
commit 77f5376a533c01545ddb3fefacd35665b1530600
Author: William Brown <firstyear(a)redhat.com>
Date: Fri Nov 25 10:50:14 2016 +1000
Ticket 49054 - Fix sasl_map unused paramater compiler warnings.
Bug Description: sasl_map reports unused parameter warnings, but because it's
a call back the parameters are needed.
Fix Description: Add the gcc attributes to mask the warnings.
https://fedorahosted.org/389/ticket/49054
Author: wibrown
Review by: mreynolds (Thanks)
diff --git a/ldap/servers/slapd/sasl_map.c b/ldap/servers/slapd/sasl_map.c
index 1b28e4c..84f845d 100644
--- a/ldap/servers/slapd/sasl_map.c
+++ b/ldap/servers/slapd/sasl_map.c
@@ -434,7 +434,7 @@ sasl_map_read_config_startup(sasl_map_private *priv)
}
int
-sasl_map_config_add(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e, int
*returncode, char *returntext, void *arg)
+sasl_map_config_add(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e, int
*returncode, char *returntext __attribute__((unused)) , void *arg)
{
int ret = 0;
sasl_map_data *dp = NULL;
@@ -485,7 +485,7 @@ sasl_map_config_modify(Slapi_PBlock *pb, Slapi_Entry* entryBefore,
Slapi_Entry*
}
int
-sasl_map_config_delete(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e, int
*returncode, char *returntext, void *arg)
+sasl_map_config_delete(Slapi_PBlock *pb, Slapi_Entry* entryBefore, Slapi_Entry* e, int
*returncode, char *returntext __attribute__((unused)), void *arg)
{
int ret = 0;
sasl_map_private *priv = sasl_map_get_global_priv();