This is an automated email from the git hooks/post-receive script.
mreynolds pushed a change to branch 389-ds-base-1.3.5 in repository 389-ds-base.
from ee63e40 Issue 49095 - targetattr wildcard evaluation is incorrectly case sensitive new 70084f1 Issue 48989 - Overflow in counters and monitor
The 1 revisions listed above as "new" are entirely new to this repository and will be described in separate emails. The revisions listed as "adds" were already present in the repository and have only been added to this reference.
Summary of changes: dirsrvtests/tests/tickets/issue48989_test.py | 57 ++++++ ldap/servers/plugins/dna/dna.c | 20 +- ldap/servers/plugins/posix-winsync/posix-winsync.c | 12 +- ldap/servers/plugins/replication/repl5_init.c | 2 +- ldap/servers/plugins/replication/repl_extop.c | 2 +- ldap/servers/plugins/usn/usn.c | 16 +- ldap/servers/slapd/back-ldbm/monitor.c | 4 +- ldap/servers/slapd/back-ldbm/perfctrs.c | 24 +-- ldap/servers/slapd/back-ldbm/perfctrs.h | 74 +++---- ldap/servers/slapd/back-ldbm/vlv_srch.h | 2 +- ldap/servers/slapd/conntable.c | 14 +- ldap/servers/slapd/entry.c | 4 +- ldap/servers/slapd/log.c | 13 +- ldap/servers/slapd/monitor.c | 14 +- ldap/servers/slapd/slapi-plugin.h | 14 +- ldap/servers/slapd/slapi_counter.c | 224 +++------------------ ldap/servers/slapd/snmp_collator.c | 2 +- 17 files changed, 192 insertions(+), 306 deletions(-) create mode 100644 dirsrvtests/tests/tickets/issue48989_test.py
This is an automated email from the git hooks/post-receive script.
mreynolds pushed a commit to branch 389-ds-base-1.3.5 in repository 389-ds-base.
commit 70084f1037cc17869d4b2a7891dea8e30472eaa2 Author: Mark Reynolds mreynolds@redhat.com Date: Tue Mar 21 15:32:21 2017 -0400
Issue 48989 - Overflow in counters and monitor
Bug Description: NSPR's printf functions are only designed to work with 32bit ints, so this causes unexpected overflows in logs, perf counters, and monitor output.
Fix Description: Just use the standard printf functions which do work correctly with 32/64 bit ints.
We are now using the gcc __atomic built-in functions which covers a lot of portabilty issues between architectures, and helps simplify the code. Replaced PRUint64 with uint64_t where needed
https://pagure.io/389-ds-base/issue/48989
Reviewed by: firstyear(Thanks!)
(cherry picked from commit 434a92fb0a149f1070cf83c2ed449db50523f768) --- dirsrvtests/tests/tickets/issue48989_test.py | 57 ++++++ ldap/servers/plugins/dna/dna.c | 20 +- ldap/servers/plugins/posix-winsync/posix-winsync.c | 12 +- ldap/servers/plugins/replication/repl5_init.c | 2 +- ldap/servers/plugins/replication/repl_extop.c | 2 +- ldap/servers/plugins/usn/usn.c | 16 +- ldap/servers/slapd/back-ldbm/monitor.c | 4 +- ldap/servers/slapd/back-ldbm/perfctrs.c | 24 +-- ldap/servers/slapd/back-ldbm/perfctrs.h | 74 +++---- ldap/servers/slapd/back-ldbm/vlv_srch.h | 2 +- ldap/servers/slapd/conntable.c | 14 +- ldap/servers/slapd/entry.c | 4 +- ldap/servers/slapd/log.c | 13 +- ldap/servers/slapd/monitor.c | 14 +- ldap/servers/slapd/slapi-plugin.h | 14 +- ldap/servers/slapd/slapi_counter.c | 224 +++------------------ ldap/servers/slapd/snmp_collator.c | 2 +- 17 files changed, 192 insertions(+), 306 deletions(-)
diff --git a/dirsrvtests/tests/tickets/issue48989_test.py b/dirsrvtests/tests/tickets/issue48989_test.py new file mode 100644 index 0000000..b4e7a95 --- /dev/null +++ b/dirsrvtests/tests/tickets/issue48989_test.py @@ -0,0 +1,57 @@ +import os +import time +import ldap +import logging +import pytest +from lib389.topologies import topology_st +from lib389._constants import * +from lib389.properties import * +from lib389.tasks import * +from lib389.utils import * + +DEBUGGING = False + +if DEBUGGING: + logging.getLogger(__name__).setLevel(logging.DEBUG) +else: + logging.getLogger(__name__).setLevel(logging.INFO) +log = logging.getLogger(__name__) + + +def test_bytessent_overflow(topology_st): + """ + Issue 48989 - Add 10k entries and run search until the value of bytessent is + bigger than 2^32 or resets to 0 + """ + + # Create users + topology_st.standalone.ldclt.create_users('ou=People,%s' % + DEFAULT_SUFFIX, min=0, max=10000) + bytessent = int(topology_st.standalone.search_s( + 'cn=monitor', ldap.SCOPE_BASE, attrlist=['bytessent'])[0].getValue('bytessent')) + bytessent_old = bytessent + + while bytessent < 4300000000: + # Do searches + topology_st.standalone.search_s(DEFAULT_SUFFIX, + ldap.SCOPE_SUBTREE, + filterstr='(objectClass=*)') + + # Read bytessent value from cn=monitor + bytessent = int(topology_st.standalone.search_s( + 'cn=monitor', ldap.SCOPE_BASE, attrlist=['bytessent'])[0].getValue('bytessent')) + + if bytessent > bytessent_old: + bytessent_old = bytessent + else: + # If it overflows - test failed + assert(bytessent > 4294967295) + + +if __name__ == '__main__': + # Run isolated + # -s for DEBUG mode + CURRENT_FILE = os.path.realpath(__file__) + pytest.main("-s %s" % CURRENT_FILE) + + diff --git a/ldap/servers/plugins/dna/dna.c b/ldap/servers/plugins/dna/dna.c index cf640d8..c485de3 100644 --- a/ldap/servers/plugins/dna/dna.c +++ b/ldap/servers/plugins/dna/dna.c @@ -2496,7 +2496,7 @@ static int dna_get_next_value(struct configEntry *config_entry, if ((config_entry->maxval == -1) || (nextval <= (config_entry->maxval + config_entry->interval))) { /* try to set the new next value in the config entry */ - PR_snprintf(next_value, sizeof(next_value),"%" NSPRIu64, nextval); + snprintf(next_value, sizeof(next_value),"%" NSPRIu64, nextval);
/* set up our replace modify operation */ replace_val[0] = next_value; @@ -2564,13 +2564,13 @@ dna_get_shared_config_attr_val(struct configEntry *config_entry, char *attr, cha if(slapi_sdn_compare(server->sdn, server_sdn) == 0){ if(strcmp(attr, DNA_REMOTE_BIND_METHOD) == 0){ if (server->remote_bind_method) { - PR_snprintf(value, DNA_REMOTE_BUFSIZ, "%s", server->remote_bind_method); + snprintf(value, DNA_REMOTE_BUFSIZ, "%s", server->remote_bind_method); found = 1; } break; } else if(strcmp(attr, DNA_REMOTE_CONN_PROT) == 0){ if (server->remote_conn_prot) { - PR_snprintf(value, DNA_REMOTE_BUFSIZ, "%s", server->remote_conn_prot); + snprintf(value, DNA_REMOTE_BUFSIZ, "%s", server->remote_conn_prot); found = 1; } break; @@ -2608,7 +2608,7 @@ dna_update_shared_config(struct configEntry *config_entry)
/* We store the number of remaining assigned values * in the shared config entry. */ - PR_snprintf(remaining_vals, sizeof(remaining_vals),"%" NSPRIu64, + snprintf(remaining_vals, sizeof(remaining_vals),"%" NSPRIu64, config_entry->remaining);
/* set up our replace modify operation */ @@ -2708,7 +2708,7 @@ dna_update_next_range(struct configEntry *config_entry, int ret = 0;
/* Try to set the new next range in the config entry. */ - PR_snprintf(nextrange_value, sizeof(nextrange_value), "%" NSPRIu64 "-%" NSPRIu64, + snprintf(nextrange_value, sizeof(nextrange_value), "%" NSPRIu64 "-%" NSPRIu64, lower, upper);
/* set up our replace modify operation */ @@ -2777,8 +2777,8 @@ dna_activate_next_range(struct configEntry *config_entry) int ret = 0;
/* Setup the modify operation for the config entry */ - PR_snprintf(maxval_val, sizeof(maxval_val),"%" NSPRIu64, config_entry->next_range_upper); - PR_snprintf(nextval_val, sizeof(nextval_val),"%" NSPRIu64, config_entry->next_range_lower); + snprintf(maxval_val, sizeof(maxval_val),"%" NSPRIu64, config_entry->next_range_upper); + snprintf(nextval_val, sizeof(nextval_val),"%" NSPRIu64, config_entry->next_range_lower);
maxval_vals[0] = maxval_val; maxval_vals[1] = 0; @@ -4410,8 +4410,8 @@ static int dna_extend_exop(Slapi_PBlock *pb) char highstr[16];
/* Create the exop response */ - PR_snprintf(lowstr, sizeof(lowstr), "%" NSPRIu64, lower); - PR_snprintf(highstr, sizeof(highstr), "%" NSPRIu64, upper); + snprintf(lowstr, sizeof(lowstr), "%" NSPRIu64, lower); + snprintf(highstr, sizeof(highstr), "%" NSPRIu64, upper); range_low.bv_val = lowstr; range_low.bv_len = strlen(range_low.bv_val); range_high.bv_val = highstr; @@ -4587,7 +4587,7 @@ dna_release_range(char *range_dn, PRUint64 *lower, PRUint64 *upper) *lower = *upper - release + 1;
/* try to set the new maxval in the config entry */ - PR_snprintf(max_value, sizeof(max_value),"%" NSPRIu64, (*lower - 1)); + snprintf(max_value, sizeof(max_value),"%" NSPRIu64, (*lower - 1));
/* set up our replace modify operation */ replace_val[0] = max_value; diff --git a/ldap/servers/plugins/posix-winsync/posix-winsync.c b/ldap/servers/plugins/posix-winsync/posix-winsync.c index 5e36792..72f6a56 100644 --- a/ldap/servers/plugins/posix-winsync/posix-winsync.c +++ b/ldap/servers/plugins/posix-winsync/posix-winsync.c @@ -234,7 +234,7 @@ sync_acct_disable(void *cbdata, /* the usual domain config data */ { int ds_is_enabled = 1; /* default to true */ int ad_is_enabled = 1; /* default to true */ - unsigned long adval = 0; /* raw account val from ad entry */ + uint64_t adval = 0; /* raw account val from ad entry */ int isvirt = 0;
/* get the account lock state of the ds entry */ @@ -270,9 +270,8 @@ sync_acct_disable(void *cbdata, /* the usual domain config data */ if (update_entry) { slapi_entry_attr_set_ulong(update_entry, "userAccountControl", adval); slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, - "<-- sync_acct_disable - %s AD account [%s] - " - "new value is [%ld]\n", (ds_is_enabled) ? "enabled" : "disabled", - slapi_entry_get_dn_const(update_entry), adval); + "<-- sync_acct_disable - %s AD account [%s] - new value is [%" NSPRIu64 "]\n", + (ds_is_enabled) ? "enabled" : "disabled", slapi_entry_get_dn_const(update_entry), adval); } else { /* iterate through the mods - if there is already a mod for userAccountControl, change it - otherwise, add it */ @@ -327,9 +326,8 @@ sync_acct_disable(void *cbdata, /* the usual domain config data */ mod_bval->bv_len = strlen(acctvalstr); } slapi_log_error(SLAPI_LOG_PLUGIN, posix_winsync_plugin_name, - "<-- sync_acct_disable - %s AD account [%s] - " - "new value is [%ld]\n", (ds_is_enabled) ? "enabled" : "disabled", - slapi_entry_get_dn_const(ad_entry), adval); + "<-- sync_acct_disable - %s AD account [%s] - new value is [%" NSPRIu64 "]\n", + (ds_is_enabled) ? "enabled" : "disabled", slapi_entry_get_dn_const(ad_entry), adval); } }
diff --git a/ldap/servers/plugins/replication/repl5_init.c b/ldap/servers/plugins/replication/repl5_init.c index 1570655..b2b4906 100644 --- a/ldap/servers/plugins/replication/repl5_init.c +++ b/ldap/servers/plugins/replication/repl5_init.c @@ -208,7 +208,7 @@ get_repl_session_id (Slapi_PBlock *pb, char *idstr, CSN **csn) /* Avoid "Connection is NULL and hence cannot access SLAPI_CONN_ID" */ if (opid) { slapi_pblock_get (pb, SLAPI_CONN_ID, &connid); - PR_snprintf (idstr, REPL_SESSION_ID_SIZE, "conn=%" NSPRIu64 " op=%d", + snprintf (idstr, REPL_SESSION_ID_SIZE, "conn=%" NSPRIu64 " op=%d", connid, opid); }
diff --git a/ldap/servers/plugins/replication/repl_extop.c b/ldap/servers/plugins/replication/repl_extop.c index d2ed59c..88115f1 100644 --- a/ldap/servers/plugins/replication/repl_extop.c +++ b/ldap/servers/plugins/replication/repl_extop.c @@ -857,7 +857,7 @@ multimaster_extop_StartNSDS50ReplicationRequest(Slapi_PBlock *pb) * the session's conn id and op id to identify the the supplier. */ /* junkrc = ruv_get_first_id_and_purl(supplier_ruv, &junkrid, &locking_purl); */ - PR_snprintf(locking_session, sizeof(locking_session), "conn=%" NSPRIu64 " id=%d", + snprintf(locking_session, sizeof(locking_session), "conn=%" NSPRIu64 " id=%d", connid, opid); locking_purl = &locking_session[0]; if (replica_get_exclusive_access(replica, &isInc, connid, opid, diff --git a/ldap/servers/plugins/usn/usn.c b/ldap/servers/plugins/usn/usn.c index 17f66e1..4d42db8 100644 --- a/ldap/servers/plugins/usn/usn.c +++ b/ldap/servers/plugins/usn/usn.c @@ -360,7 +360,7 @@ _usn_mod_next_usn(LDAPMod ***mods, Slapi_Backend *be)
/* add next USN to the mods; "be" contains the usn counter */ usn_berval.bv_val = counter_buf; - PR_snprintf(usn_berval.bv_val, USN_COUNTER_BUF_LEN, "%" NSPRIu64, + snprintf(usn_berval.bv_val, USN_COUNTER_BUF_LEN, "%" NSPRIu64, slapi_counter_get_value(be->be_usn_counter)); usn_berval.bv_len = strlen(usn_berval.bv_val); bvals[0] = &usn_berval; @@ -670,7 +670,7 @@ usn_rootdse_search(Slapi_PBlock *pb, Slapi_Entry* e, Slapi_Entry* entryAfter, /* nsslapd-entryusn-global: on*/ /* root dse shows ... * lastusn: <num> */ - PR_snprintf(attr, USN_LAST_USN_ATTR_CORE_LEN + 1, "%s", USN_LAST_USN); + snprintf(attr, USN_LAST_USN_ATTR_CORE_LEN + 1, "%s", USN_LAST_USN); for (be = slapi_get_first_backend(&cookie); be; be = slapi_get_next_backend(cookie)) { if (be->be_usn_counter) { @@ -681,10 +681,10 @@ usn_rootdse_search(Slapi_PBlock *pb, Slapi_Entry* e, Slapi_Entry* entryAfter, /* get a next USN counter from be_usn_counter; * then minus 1 from it (except if be_usn_counter has value 0) */ if (slapi_counter_get_value(be->be_usn_counter)) { - PR_snprintf(usn_berval.bv_val, USN_COUNTER_BUF_LEN, "%" NSPRIu64, + snprintf(usn_berval.bv_val, USN_COUNTER_BUF_LEN, "%" NSPRIu64, slapi_counter_get_value(be->be_usn_counter)-1); } else { - PR_snprintf(usn_berval.bv_val, USN_COUNTER_BUF_LEN, "-1"); + snprintf(usn_berval.bv_val, USN_COUNTER_BUF_LEN, "-1"); } usn_berval.bv_len = strlen(usn_berval.bv_val); slapi_entry_attr_replace(e, attr, vals); @@ -693,7 +693,7 @@ usn_rootdse_search(Slapi_PBlock *pb, Slapi_Entry* e, Slapi_Entry* entryAfter, /* nsslapd-entryusn-global: off (default) */ /* root dse shows ... * lastusn;<backend>: <num> */ - PR_snprintf(attr, USN_LAST_USN_ATTR_CORE_LEN + 2, "%s;", USN_LAST_USN); + snprintf(attr, USN_LAST_USN_ATTR_CORE_LEN + 2, "%s;", USN_LAST_USN); attr_subp = attr + USN_LAST_USN_ATTR_CORE_LEN + 1; for (be = slapi_get_first_backend(&cookie); be; be = slapi_get_next_backend(cookie)) { @@ -704,10 +704,10 @@ usn_rootdse_search(Slapi_PBlock *pb, Slapi_Entry* e, Slapi_Entry* entryAfter, /* get a next USN counter from be_usn_counter; * then minus 1 from it (except if be_usn_counter has value 0) */ if (slapi_counter_get_value(be->be_usn_counter)) { - PR_snprintf(usn_berval.bv_val, USN_COUNTER_BUF_LEN, "%" NSPRIu64, + snprintf(usn_berval.bv_val, USN_COUNTER_BUF_LEN, "%" NSPRIu64, slapi_counter_get_value(be->be_usn_counter)-1); } else { - PR_snprintf(usn_berval.bv_val, USN_COUNTER_BUF_LEN, "-1"); + snprintf(usn_berval.bv_val, USN_COUNTER_BUF_LEN, "-1"); } usn_berval.bv_len = strlen(usn_berval.bv_val);
@@ -716,7 +716,7 @@ usn_rootdse_search(Slapi_PBlock *pb, Slapi_Entry* e, Slapi_Entry* entryAfter, attr = (char *)slapi_ch_realloc(attr, attr_len); attr_subp = attr + USN_LAST_USN_ATTR_CORE_LEN; } - PR_snprintf(attr_subp, attr_len - USN_LAST_USN_ATTR_CORE_LEN, + snprintf(attr_subp, attr_len - USN_LAST_USN_ATTR_CORE_LEN, "%s", be->be_name); slapi_entry_attr_replace(e, attr, vals); } diff --git a/ldap/servers/slapd/back-ldbm/monitor.c b/ldap/servers/slapd/back-ldbm/monitor.c index dfcc735..757792b 100644 --- a/ldap/servers/slapd/back-ldbm/monitor.c +++ b/ldap/servers/slapd/back-ldbm/monitor.c @@ -26,7 +26,7 @@
#define MSETF(_attr, _x) do { \ char tmp_atype[37]; \ - PR_snprintf(tmp_atype, sizeof(tmp_atype), _attr, _x); \ + snprintf(tmp_atype, sizeof(tmp_atype), _attr, _x); \ MSET(tmp_atype); \ } while (0)
@@ -86,7 +86,7 @@ int ldbm_back_monitor_instance_search(Slapi_PBlock *pb, Slapi_Entry *e, MSET("entryCacheHits"); sprintf(buf, "%lu", (long unsigned int)tries); MSET("entryCacheTries"); - sprintf(buf, "%lu", (unsigned long)(100.0*(double)hits / (double)(tries > 0 ? tries : 1))); + sprintf(buf, "%lu", (long unsigned int)(100.0*(double)hits / (double)(tries > 0 ? tries : 1))); MSET("entryCacheHitRatio"); sprintf(buf, "%lu", (long unsigned int)size); MSET("currentEntryCacheSize"); diff --git a/ldap/servers/slapd/back-ldbm/perfctrs.c b/ldap/servers/slapd/back-ldbm/perfctrs.c index 19db28b..3617f31 100644 --- a/ldap/servers/slapd/back-ldbm/perfctrs.c +++ b/ldap/servers/slapd/back-ldbm/perfctrs.c @@ -49,7 +49,7 @@
static void perfctrs_update(perfctrs_private *priv, DB_ENV *db_env); static void perfctr_add_to_entry( Slapi_Entry *e, char *type, - PRUint32 countervalue ); + uint64_t countervalue );
/* Init perf ctrs */ void perfctrs_init(struct ldbminfo *li, perfctrs_private **ret_priv) @@ -299,22 +299,18 @@ perfctrs_as_entry( Slapi_Entry *e, perfctrs_private *priv, DB_ENV *db_env ) */ perfctrs_update( priv, db_env );
- /* - * Then convert all the counters to attribute values. - */ - for ( i = 0; i < SLAPI_LDBM_PERFCTR_AT_MAP_COUNT; ++i ) { - perfctr_add_to_entry( e, perfctr_at_map[i].pam_type, - *((PRUint32 *)((char *)perf + perfctr_at_map[i].pam_offset))); - } + /* + * Then convert all the counters to attribute values. + */ + for ( i = 0; i < SLAPI_LDBM_PERFCTR_AT_MAP_COUNT; ++i ) { + perfctr_add_to_entry( e, perfctr_at_map[i].pam_type, + *((uint64_t *)((char *)perf + perfctr_at_map[i].pam_offset))); + } }
static void -perfctr_add_to_entry( Slapi_Entry *e, char *type, PRUint32 countervalue ) +perfctr_add_to_entry( Slapi_Entry *e, char *type, uint64_t countervalue ) { - /* - * XXXmcs: the following line assumes that long's are 32 bits or larger, - * which we assume in other places too I am sure. - */ - slapi_entry_attr_set_ulong( e, type, (unsigned long)countervalue ); + slapi_entry_attr_set_ulong( e, type, countervalue ); } diff --git a/ldap/servers/slapd/back-ldbm/perfctrs.h b/ldap/servers/slapd/back-ldbm/perfctrs.h index 65a7850..57be1d1 100644 --- a/ldap/servers/slapd/back-ldbm/perfctrs.h +++ b/ldap/servers/slapd/back-ldbm/perfctrs.h @@ -11,46 +11,48 @@ # include <config.h> #endif
+#include <inttypes.h> + /* Structure definition for performance data */ /* This stuff goes in shared memory, so make sure the packing is consistent */
struct _performance_counters { - PRUint32 sequence_number; - PRUint32 lock_region_wait_rate; - PRUint32 deadlock_rate; - PRUint32 configured_locks; - PRUint32 current_locks; - PRUint32 max_locks; - PRUint32 lockers; - PRUint32 current_lock_objects; - PRUint32 max_lock_objects; - PRUint32 lock_conflicts; - PRUint32 lock_request_rate; - PRUint32 log_region_wait_rate; - PRUint32 log_write_rate; - PRUint32 log_bytes_since_checkpoint; - PRUint32 cache_size_bytes; - PRUint32 page_access_rate; - PRUint32 cache_hit; - PRUint32 cache_try; - PRUint32 page_create_rate; - PRUint32 page_read_rate; - PRUint32 page_write_rate; - PRUint32 page_ro_evict_rate; - PRUint32 page_rw_evict_rate; - PRUint32 hash_buckets; - PRUint32 hash_search_rate; - PRUint32 longest_chain_length; - PRUint32 hash_elements_examine_rate; - PRUint32 pages_in_use; - PRUint32 dirty_pages; - PRUint32 clean_pages; - PRUint32 page_trickle_rate; - PRUint32 cache_region_wait_rate; - PRUint32 active_txns; - PRUint32 commit_rate; - PRUint32 abort_rate; - PRUint32 txn_region_wait_rate; + uint64_t sequence_number; + uint64_t lock_region_wait_rate; + uint64_t deadlock_rate; + uint64_t configured_locks; + uint64_t current_locks; + uint64_t max_locks; + uint64_t lockers; + uint64_t current_lock_objects; + uint64_t max_lock_objects; + uint64_t lock_conflicts; + uint64_t lock_request_rate; + uint64_t log_region_wait_rate; + uint64_t log_write_rate; + uint64_t log_bytes_since_checkpoint; + uint64_t cache_size_bytes; + uint64_t page_access_rate; + uint64_t cache_hit; + uint64_t cache_try; + uint64_t page_create_rate; + uint64_t page_read_rate; + uint64_t page_write_rate; + uint64_t page_ro_evict_rate; + uint64_t page_rw_evict_rate; + uint64_t hash_buckets; + uint64_t hash_search_rate; + uint64_t longest_chain_length; + uint64_t hash_elements_examine_rate; + uint64_t pages_in_use; + uint64_t dirty_pages; + uint64_t clean_pages; + uint64_t page_trickle_rate; + uint64_t cache_region_wait_rate; + uint64_t active_txns; + uint64_t commit_rate; + uint64_t abort_rate; + uint64_t txn_region_wait_rate; }; typedef struct _performance_counters performance_counters;
diff --git a/ldap/servers/slapd/back-ldbm/vlv_srch.h b/ldap/servers/slapd/back-ldbm/vlv_srch.h index 7aef730..369cad5 100644 --- a/ldap/servers/slapd/back-ldbm/vlv_srch.h +++ b/ldap/servers/slapd/back-ldbm/vlv_srch.h @@ -92,7 +92,7 @@ struct vlvIndex time_t vlv_lastchecked;
/* The number of uses this search has received since start up */ - PRUint32 vlv_uses; + uint64_t vlv_uses;
struct backend* vlv_be; /* need backend to remove the index when done */
diff --git a/ldap/servers/slapd/conntable.c b/ldap/servers/slapd/conntable.c index b5cd47a..ae10947 100644 --- a/ldap/servers/slapd/conntable.c +++ b/ldap/servers/slapd/conntable.c @@ -392,7 +392,7 @@ connection_table_as_entry(Connection_Table *ct, Slapi_Entry *e) * 3 = The number of operations attempted that were blocked * by max threads. */ - PR_snprintf(maxthreadbuf, sizeof(maxthreadbuf), "%d:%"NSPRIu64":%"NSPRIu64"", + snprintf(maxthreadbuf, sizeof(maxthreadbuf), "%d:%"NSPRIu64":%"NSPRIu64"", maxthreadstate, ct->c[i].c_maxthreadscount, ct->c[i].c_maxthreadsblocked);
@@ -423,32 +423,32 @@ connection_table_as_entry(Connection_Table *ct, Slapi_Entry *e) PR_ExitMonitor(ct->c[i].c_mutex); }
- PR_snprintf( buf, sizeof(buf), "%d", nconns ); + snprintf( buf, sizeof(buf), "%d", nconns ); val.bv_val = buf; val.bv_len = strlen( buf ); attrlist_replace( &e->e_attrs, "currentconnections", vals );
- PR_snprintf( buf, sizeof(buf), "%" NSPRIu64, slapi_counter_get_value(num_conns)); + snprintf( buf, sizeof(buf), "%" NSPRIu64, slapi_counter_get_value(num_conns)); val.bv_val = buf; val.bv_len = strlen( buf ); attrlist_replace( &e->e_attrs, "totalconnections", vals );
- PR_snprintf( buf, sizeof(buf), "%" NSPRIu64, slapi_counter_get_value(conns_in_maxthreads)); + snprintf( buf, sizeof(buf), "%" NSPRIu64, slapi_counter_get_value(conns_in_maxthreads)); val.bv_val = buf; val.bv_len = strlen( buf ); attrlist_replace( &e->e_attrs, "currentconnectionsatmaxthreads", vals );
- PR_snprintf( buf, sizeof(buf), "%" NSPRIu64, slapi_counter_get_value(max_threads_count)); + snprintf( buf, sizeof(buf), "%" NSPRIu64, slapi_counter_get_value(max_threads_count)); val.bv_val = buf; val.bv_len = strlen( buf ); attrlist_replace( &e->e_attrs, "maxthreadsperconnhits", vals );
- PR_snprintf( buf, sizeof(buf), "%d", (ct!=NULL?ct->size:0) ); + snprintf( buf, sizeof(buf), "%d", (ct!=NULL?ct->size:0) ); val.bv_val = buf; val.bv_len = strlen( buf ); attrlist_replace( &e->e_attrs, "dtablesize", vals );
- PR_snprintf( buf, sizeof(buf), "%d", nreadwaiters ); + snprintf( buf, sizeof(buf), "%d", nreadwaiters ); val.bv_val = buf; val.bv_len = strlen( buf ); attrlist_replace( &e->e_attrs, "readwaiters", vals ); diff --git a/ldap/servers/slapd/entry.c b/ldap/servers/slapd/entry.c index ed99a38..82efba9 100644 --- a/ldap/servers/slapd/entry.c +++ b/ldap/servers/slapd/entry.c @@ -3090,14 +3090,14 @@ slapi_entry_attr_set_longlong( Slapi_Entry* e, const char *type, long long l) }
void -slapi_entry_attr_set_ulong( Slapi_Entry* e, const char *type, unsigned long l) +slapi_entry_attr_set_ulong( Slapi_Entry* e, const char *type, uint64_t l) { char value[16]; struct berval bv; struct berval *bvals[2]; bvals[0] = &bv; bvals[1] = NULL; - sprintf(value,"%lu",l); + sprintf(value,"%" NSPRIu64, l); bv.bv_val = value; bv.bv_len = strlen( value ); slapi_entry_attr_replace( e, type, bvals ); diff --git a/ldap/servers/slapd/log.c b/ldap/servers/slapd/log.c index ae8b5f8..5334439 100644 --- a/ldap/servers/slapd/log.c +++ b/ldap/servers/slapd/log.c @@ -2235,11 +2235,11 @@ vslapd_log_error( { char buffer[SLAPI_LOG_BUFSIZ]; int blen = TBUFSIZE; - char *vbuf; + char *vbuf = NULL; int header_len = 0; int err = 0;
- if ((vbuf = PR_vsmprintf(fmt, ap)) == NULL) { + if (vasprintf(&vbuf, fmt, ap) == -1) { log__error_emergency("CRITICAL: vslapd_log_error, Unable to format message", 1 , locked); return -1; } @@ -2289,9 +2289,9 @@ vslapd_log_error( /* blen = strlen(buffer); */ /* This truncates again .... But we have the nice smprintf above! */ if (subsystem == NULL) { - PR_snprintf (buffer+blen, sizeof(buffer)-blen, "%s", vbuf); + snprintf (buffer+blen, sizeof(buffer)-blen, "%s", vbuf); } else { - PR_snprintf (buffer+blen, sizeof(buffer)-blen, "%s - %s", subsystem, vbuf); + snprintf (buffer+blen, sizeof(buffer)-blen, "%s - %s", subsystem, vbuf); }
buffer[sizeof(buffer)-1] = '\0'; @@ -2324,7 +2324,7 @@ vslapd_log_error( g_set_shutdown( SLAPI_SHUTDOWN_EXIT ); }
- PR_smprintf_free (vbuf); + slapi_ch_free_string(&vbuf); return( 0 ); }
@@ -2420,8 +2420,7 @@ static int vslapd_log_access(char *fmt, va_list ap) time_t tnl;
/* We do this sooner, because that we we can use the message in other calls */ - vlen = PR_vsnprintf(vbuf, SLAPI_LOG_BUFSIZ, fmt, ap); - if (! vlen) { + if ((vlen = vsnprintf(vbuf, SLAPI_LOG_BUFSIZ, fmt, ap)) == -1){ log__error_emergency("CRITICAL: vslapd_log_access, Unable to format message", 1 ,0); return -1; } diff --git a/ldap/servers/slapd/monitor.c b/ldap/servers/slapd/monitor.c index 0917bc8..f1fb38f 100644 --- a/ldap/servers/slapd/monitor.c +++ b/ldap/servers/slapd/monitor.c @@ -54,25 +54,25 @@ monitor_info(Slapi_PBlock *pb, Slapi_Entry* e, Slapi_Entry* entryAfter, int *ret attrlist_replace( &e->e_attrs, "version", vals ); slapi_ch_free( (void **) &val.bv_val );
- val.bv_len = PR_snprintf( buf, sizeof(buf), "%d", g_get_active_threadcnt() ); + val.bv_len = snprintf( buf, sizeof(buf), "%d", g_get_active_threadcnt() ); val.bv_val = buf; attrlist_replace( &e->e_attrs, "threads", vals );
connection_table_as_entry(the_connection_table, e);
- val.bv_len = PR_snprintf( buf, sizeof(buf), "%" NSPRIu64, slapi_counter_get_value(ops_initiated) ); + val.bv_len = snprintf( buf, sizeof(buf), "%" NSPRIu64, slapi_counter_get_value(ops_initiated) ); val.bv_val = buf; attrlist_replace( &e->e_attrs, "opsinitiated", vals );
- val.bv_len = PR_snprintf( buf, sizeof(buf), "%" NSPRIu64, slapi_counter_get_value(ops_completed) ); + val.bv_len = snprintf( buf, sizeof(buf), "%" NSPRIu64, slapi_counter_get_value(ops_completed) ); val.bv_val = buf; attrlist_replace( &e->e_attrs, "opscompleted", vals );
- val.bv_len = PR_snprintf ( buf, sizeof(buf), "%" NSPRIu64, g_get_num_entries_sent() ); + val.bv_len = snprintf ( buf, sizeof(buf), "%" NSPRIu64, g_get_num_entries_sent() ); val.bv_val = buf; attrlist_replace( &e->e_attrs, "entriessent", vals );
- val.bv_len = PR_snprintf ( buf, sizeof(buf), "%" NSPRIu64, g_get_num_bytes_sent() ); + val.bv_len = snprintf ( buf, sizeof(buf), "%" NSPRIu64, g_get_num_bytes_sent() ); val.bv_val = buf; attrlist_replace( &e->e_attrs, "bytessent", vals );
@@ -88,12 +88,12 @@ monitor_info(Slapi_PBlock *pb, Slapi_Entry* e, Slapi_Entry* entryAfter, int *ret val.bv_len = strlen( buf ); attrlist_replace( &e->e_attrs, "starttime", vals );
- val.bv_len = PR_snprintf( buf, sizeof(buf), "%d", be_nbackends_public() ); + val.bv_len = snprintf( buf, sizeof(buf), "%d", be_nbackends_public() ); val.bv_val = buf; attrlist_replace( &e->e_attrs, "nbackends", vals );
#ifdef THREAD_SUNOS5_LWP - val.bv_len = PR_snprintf( buf, sizeof(buf), "%d", thr_getconcurrency() ); + val.bv_len = snprintf( buf, sizeof(buf), "%d", thr_getconcurrency() ); val.bv_val = buf; attrlist_replace( &e->e_attrs, "concurrency", vals ); #endif diff --git a/ldap/servers/slapd/slapi-plugin.h b/ldap/servers/slapd/slapi-plugin.h index 1e767eb..6f6cfed 100644 --- a/ldap/servers/slapd/slapi-plugin.h +++ b/ldap/servers/slapd/slapi-plugin.h @@ -1950,7 +1950,7 @@ void slapi_entry_attr_set_longlong( Slapi_Entry* e, const char *type, long long * \param type Attribute type in which you want to set the value. * \param l Unsigned long value that you want to assign to the attribute. */ -void slapi_entry_attr_set_ulong(Slapi_Entry* e, const char *type, unsigned long l); +void slapi_entry_attr_set_ulong(Slapi_Entry* e, const char *type, uint64_t l);
/** * Check if an attribute is set in the entry @@ -6712,12 +6712,12 @@ void slapi_destroy_task(void *arg); Slapi_Counter *slapi_counter_new(void); void slapi_counter_init(Slapi_Counter *counter); void slapi_counter_destroy(Slapi_Counter **counter); -PRUint64 slapi_counter_increment(Slapi_Counter *counter); -PRUint64 slapi_counter_decrement(Slapi_Counter *counter); -PRUint64 slapi_counter_add(Slapi_Counter *counter, PRUint64 addvalue); -PRUint64 slapi_counter_subtract(Slapi_Counter *counter, PRUint64 subvalue); -PRUint64 slapi_counter_set_value(Slapi_Counter *counter, PRUint64 newvalue); -PRUint64 slapi_counter_get_value(Slapi_Counter *counter); +uint64_t slapi_counter_increment(Slapi_Counter *counter); +uint64_t slapi_counter_decrement(Slapi_Counter *counter); +uint64_t slapi_counter_add(Slapi_Counter *counter, uint64_t addvalue); +uint64_t slapi_counter_subtract(Slapi_Counter *counter, uint64_t subvalue); +uint64_t slapi_counter_set_value(Slapi_Counter *counter, uint64_t newvalue); +uint64_t slapi_counter_get_value(Slapi_Counter *counter);
/* Binder-based (connection centric) resource limits */ /* diff --git a/ldap/servers/slapd/slapi_counter.c b/ldap/servers/slapd/slapi_counter.c index c3ac846..d0696eb 100644 --- a/ldap/servers/slapd/slapi_counter.c +++ b/ldap/servers/slapd/slapi_counter.c @@ -12,38 +12,17 @@
#include "slap.h"
-#ifdef SOLARIS -PRUint64 _sparcv9_AtomicSet(PRUint64 *address, PRUint64 newval); -PRUint64 _sparcv9_AtomicAdd(PRUint64 *address, PRUint64 val); -PRUint64 _sparcv9_AtomicSub(PRUint64 *address, PRUint64 val); -#endif - #ifdef HPUX #ifdef ATOMIC_64BIT_OPERATIONS #include <machine/sys/inline.h> #endif #endif
-#ifdef ATOMIC_64BIT_OPERATIONS -#if defined(LINUX) && !HAVE_64BIT_ATOMIC_OP_FUNCS -/* On systems that don't have the 64-bit GCC atomic builtins, we need to - * implement our own atomic functions using inline assembly code. */ -PRUint64 __sync_add_and_fetch_8(PRUint64 *ptr, PRUint64 addval); -PRUint64 __sync_sub_and_fetch_8(PRUint64 *ptr, PRUint64 subval); -#define __sync_add_and_fetch __sync_add_and_fetch_8 -#define __sync_sub_and_fetch __sync_sub_and_fetch_8 -#endif -#endif /* ATOMIC_64BIT_OPERATIONS */ - - /* * Counter Structure */ typedef struct slapi_counter { - PRUint64 value; -#ifndef ATOMIC_64BIT_OPERATIONS - Slapi_Mutex *lock; -#endif + uint64_t value; } slapi_counter;
/* @@ -72,13 +51,6 @@ Slapi_Counter *slapi_counter_new() void slapi_counter_init(Slapi_Counter *counter) { if (counter != NULL) { -#ifndef ATOMIC_64BIT_OPERATIONS - /* Create the lock if necessary. */ - if (counter->lock == NULL) { - counter->lock = slapi_new_mutex(); - } -#endif - /* Set the value to 0. */ slapi_counter_set_value(counter, 0); } @@ -93,9 +65,6 @@ void slapi_counter_init(Slapi_Counter *counter) void slapi_counter_destroy(Slapi_Counter **counter) { if ((counter != NULL) && (*counter != NULL)) { -#ifndef ATOMIC_64BIT_OPERATIONS - slapi_destroy_mutex((*counter)->lock); -#endif slapi_ch_free((void **)counter); } } @@ -105,7 +74,7 @@ void slapi_counter_destroy(Slapi_Counter **counter) * * Atomically increments a Slapi_Counter. */ -PRUint64 slapi_counter_increment(Slapi_Counter *counter) +uint64_t slapi_counter_increment(Slapi_Counter *counter) { return slapi_counter_add(counter, 1); } @@ -117,7 +86,7 @@ PRUint64 slapi_counter_increment(Slapi_Counter *counter) * that this will not prevent you from wrapping * around 0. */ -PRUint64 slapi_counter_decrement(Slapi_Counter *counter) +uint64_t slapi_counter_decrement(Slapi_Counter *counter) { return slapi_counter_subtract(counter, 1); } @@ -127,28 +96,20 @@ PRUint64 slapi_counter_decrement(Slapi_Counter *counter) * * Atomically add a value to a Slapi_Counter. */ -PRUint64 slapi_counter_add(Slapi_Counter *counter, PRUint64 addvalue) +uint64_t slapi_counter_add(Slapi_Counter *counter, uint64_t addvalue) { - PRUint64 newvalue = 0; + uint64_t newvalue = 0; #ifdef HPUX - PRUint64 prev = 0; + uint64_t prev = 0; #endif
if (counter == NULL) { return newvalue; }
-#ifndef ATOMIC_64BIT_OPERATIONS - slapi_lock_mutex(counter->lock); - counter->value += addvalue; - newvalue = counter->value; - slapi_unlock_mutex(counter->lock); +#ifndef HPUX + newvalue = __atomic_add_fetch_8(&(counter->value), addvalue, __ATOMIC_SEQ_CST); #else -#ifdef LINUX - newvalue = __sync_add_and_fetch(&(counter->value), addvalue); -#elif defined(SOLARIS) - newvalue = _sparcv9_AtomicAdd(&(counter->value), addvalue); -#elif defined(HPUX) /* fetchadd only works with values of 1, 4, 8, and 16. In addition, it requires * it's argument to be an integer constant. */ if (addvalue == 1) { @@ -173,7 +134,6 @@ PRUint64 slapi_counter_add(Slapi_Counter *counter, PRUint64 addvalue) } while (prev != _Asm_cmpxchg(_FASZ_D, _SEM_ACQ, &(counter->value), newvalue, _LDHINT_NONE)); } #endif -#endif /* ATOMIC_64BIT_OPERATIONS */
return newvalue; } @@ -184,28 +144,20 @@ PRUint64 slapi_counter_add(Slapi_Counter *counter, PRUint64 addvalue) * Atomically subtract a value from a Slapi_Counter. Note * that this will not prevent you from wrapping around 0. */ -PRUint64 slapi_counter_subtract(Slapi_Counter *counter, PRUint64 subvalue) +uint64_t slapi_counter_subtract(Slapi_Counter *counter, uint64_t subvalue) { - PRUint64 newvalue = 0; + uint64_t newvalue = 0; #ifdef HPUX - PRUint64 prev = 0; + uint64_t prev = 0; #endif
if (counter == NULL) { return newvalue; }
-#ifndef ATOMIC_64BIT_OPERATIONS - slapi_lock_mutex(counter->lock); - counter->value -= subvalue; - newvalue = counter->value; - slapi_unlock_mutex(counter->lock); +#ifndef HPUX + newvalue = __atomic_sub_fetch_8(&(counter->value), subvalue, __ATOMIC_SEQ_CST); #else -#ifdef LINUX - newvalue = __sync_sub_and_fetch(&(counter->value), subvalue); -#elif defined(SOLARIS) - newvalue = _sparcv9_AtomicSub(&(counter->value), subvalue); -#elif defined(HPUX) /* fetchadd only works with values of -1, -4, -8, and -16. In addition, it requires * it's argument to be an integer constant. */ if (subvalue == 1) { @@ -230,7 +182,6 @@ PRUint64 slapi_counter_subtract(Slapi_Counter *counter, PRUint64 subvalue) } while (prev != _Asm_cmpxchg(_FASZ_D, _SEM_ACQ, &(counter->value), newvalue, _LDHINT_NONE)); } #endif -#endif /* ATOMIC_64BIT_OPERATIONS */
return newvalue; } @@ -240,21 +191,15 @@ PRUint64 slapi_counter_subtract(Slapi_Counter *counter, PRUint64 subvalue) * * Atomically sets the value of a Slapi_Counter. */ -PRUint64 slapi_counter_set_value(Slapi_Counter *counter, PRUint64 newvalue) +uint64_t slapi_counter_set_value(Slapi_Counter *counter, uint64_t newvalue) { - PRUint64 value = 0; + uint64_t value = 0;
if (counter == NULL) { return value; }
-#ifndef ATOMIC_64BIT_OPERATIONS - slapi_lock_mutex(counter->lock); - counter->value = newvalue; - slapi_unlock_mutex(counter->lock); - return newvalue; -#else -#ifdef LINUX +#ifndef HPUX /* Use our own inline assembly for an atomic set if * the builtins aren't available. */ #if !HAVE_64BIT_ATOMIC_CAS_FUNC @@ -290,18 +235,15 @@ PRUint64 slapi_counter_set_value(Slapi_Counter *counter, PRUint64 newvalue) #endif
return newvalue; -#else +#else /* HAVE_64BIT_ATOMIC_CAS_FUNC */ while (1) { - value = counter->value; - if (__sync_bool_compare_and_swap(&(counter->value), value, newvalue)) { + value = __atomic_load_8(&(counter->value), __ATOMIC_SEQ_CST); + if (__atomic_compare_exchange_8(&(counter->value), &value, newvalue, PR_FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)){ return newvalue; } } -#endif /* CPU_x86 || !HAVE_DECL___SYNC_ADD_AND_FETCH */ -#elif defined(SOLARIS) - _sparcv9_AtomicSet(&(counter->value), newvalue); - return newvalue; -#elif defined(HPUX) +#endif +#else /* HPUX */ do { value = counter->value; /* Put value in a register for cmpxchg to compare against */ @@ -309,7 +251,6 @@ PRUint64 slapi_counter_set_value(Slapi_Counter *counter, PRUint64 newvalue) } while (value != _Asm_cmpxchg(_FASZ_D, _SEM_ACQ, &(counter->value), newvalue, _LDHINT_NONE)); return newvalue; #endif -#endif /* ATOMIC_64BIT_OPERATIONS */ }
/* @@ -317,20 +258,15 @@ PRUint64 slapi_counter_set_value(Slapi_Counter *counter, PRUint64 newvalue) * * Returns the value of a Slapi_Counter. */ -PRUint64 slapi_counter_get_value(Slapi_Counter *counter) +uint64_t slapi_counter_get_value(Slapi_Counter *counter) { - PRUint64 value = 0; + uint64_t value = 0;
if (counter == NULL) { return value; }
-#ifndef ATOMIC_64BIT_OPERATIONS - slapi_lock_mutex(counter->lock); - value = counter->value; - slapi_unlock_mutex(counter->lock); -#else -#ifdef LINUX +#ifndef HPUX /* Use our own inline assembly for an atomic get if * the builtins aren't available. */ #if !HAVE_64BIT_ATOMIC_CAS_FUNC @@ -367,124 +303,22 @@ PRUint64 slapi_counter_get_value(Slapi_Counter *counter) #else : "memory", "eax", "ebx", "ecx", "edx", "cc"); #endif -#else +#else /* HAVE_64BIT_ATOMIC_CAS_FUNC */ while (1) { - value = counter->value; - if (__sync_bool_compare_and_swap(&(counter->value), value, value)) { + value = __atomic_load_8(&(counter->value), __ATOMIC_SEQ_CST); + if (__atomic_compare_exchange_8(&(counter->value), &value, value, PR_FALSE, __ATOMIC_SEQ_CST, __ATOMIC_SEQ_CST)){ break; } } -#endif /* CPU_x86 || !HAVE_DECL___SYNC_ADD_AND_FETCH */ -#elif defined(SOLARIS) - while (1) { - value = counter->value; - if (value == _sparcv9_AtomicSet(&(counter->value), value)) { - break; - } - } -#elif defined(HPUX) +#endif +#else /* HPUX */ do { value = counter->value; /* Put value in a register for cmpxchg to compare against */ _Asm_mov_to_ar(_AREG_CCV, value); } while (value != _Asm_cmpxchg(_FASZ_D, _SEM_ACQ, &(counter->value), value, _LDHINT_NONE)); #endif -#endif /* ATOMIC_64BIT_OPERATIONS */
return value; }
-#ifdef ATOMIC_64BIT_OPERATIONS -#if defined(LINUX) && !HAVE_64BIT_ATOMIC_OP_FUNCS -/* On systems that don't have the 64-bit GCC atomic builtins, we need to - * implement our own atomic add and subtract functions using inline - * assembly code. */ -PRUint64 __sync_add_and_fetch_8(PRUint64 *ptr, PRUint64 addval) -{ - PRUint64 retval = 0; - - /* - * %0 = *ptr - * %1 = retval - * %2 = addval - */ - __asm__ __volatile__( -#ifdef CPU_x86 - /* Save the PIC register */ - " pushl %%ebx;" -#endif /* CPU_x86 */ - /* Put value of *ptr in EDX:EAX */ - "retryadd: movl %0, %%eax;" - " movl 4%0, %%edx;" - /* Put addval in ECX:EBX */ - " movl %2, %%ebx;" - " movl 4+%2, %%ecx;" - /* Add value from EDX:EAX to value in ECX:EBX */ - " addl %%eax, %%ebx;" - " adcl %%edx, %%ecx;" - /* If EDX:EAX and *ptr are the same, replace ptr with ECX:EBX */ - " lock; cmpxchg8b %0;" - " jnz retryadd;" - /* Put new value into retval */ - " movl %%ebx, %1;" - " movl %%ecx, 4%1;" -#ifdef CPU_x86 - /* Restore the PIC register */ - " popl %%ebx" -#endif /* CPU_x86 */ - : "+o" (*ptr), "=m" (retval) - : "m" (addval) -#ifdef CPU_x86 - : "memory", "eax", "ecx", "edx", "cc"); -#else - : "memory", "eax", "ebx", "ecx", "edx", "cc"); -#endif - - return retval; -} - -PRUint64 __sync_sub_and_fetch_8(PRUint64 *ptr, PRUint64 subval) -{ - PRUint64 retval = 0; - - /* - * %0 = *ptr - * %1 = retval - * %2 = subval - */ - __asm__ __volatile__( -#ifdef CPU_x86 - /* Save the PIC register */ - " pushl %%ebx;" -#endif /* CPU_x86 */ - /* Put value of *ptr in EDX:EAX */ - "retrysub: movl %0, %%eax;" - " movl 4%0, %%edx;" - /* Copy EDX:EAX to ECX:EBX */ - " movl %%eax, %%ebx;" - " movl %%edx, %%ecx;" - /* Subtract subval from value in ECX:EBX */ - " subl %2, %%ebx;" - " sbbl 4+%2, %%ecx;" - /* If EDX:EAX and ptr are the same, replace *ptr with ECX:EBX */ - " lock; cmpxchg8b %0;" - " jnz retrysub;" - /* Put new value into retval */ - " movl %%ebx, %1;" - " movl %%ecx, 4%1;" -#ifdef CPU_x86 - /* Restore the PIC register */ - " popl %%ebx" -#endif /* CPU_x86 */ - : "+o" (*ptr), "=m" (retval) - : "m" (subval) -#ifdef CPU_x86 - : "memory", "eax", "ecx", "edx", "cc"); -#else - : "memory", "eax", "ebx", "ecx", "edx", "cc"); -#endif - - return retval; -} -#endif /* LINUX && !HAVE_64BIT_ATOMIC_OP_FUNCS */ -#endif /* ATOMIC_64BIT_OPERATIONS */ diff --git a/ldap/servers/slapd/snmp_collator.c b/ldap/servers/slapd/snmp_collator.c index 39028cf..cb4fdd9 100644 --- a/ldap/servers/slapd/snmp_collator.c +++ b/ldap/servers/slapd/snmp_collator.c @@ -708,7 +708,7 @@ static void add_counter_to_value(Slapi_Entry *e, const char *type, PRUint64 countervalue) { char value[40]; - PR_snprintf(value,sizeof(value),"%" NSPRIu64, countervalue); + snprintf(value,sizeof(value),"%" NSPRIu64, countervalue); slapi_entry_attr_set_charptr( e, type, value); }
389-commits@lists.fedoraproject.org