Commit 73b63514 authored by Kurt Zeilenga's avatar Kurt Zeilenga
Browse files

backport millionth second bug fix from HEAD

parent 98f27b3a
OpenLDAP 1.x Change Log
Changes included in OpenLDAP 1.2.12 Engineering
Changes included in OpenLDAP 1.2.13 Engineering
CVS Tag: OPENLDAP_REL_ENG_1_2
Fixed slurpd millionth second bug (ITS#1323)
Fixed libldap result error memory leak (ITS#1161)
Changes included in OpenLDAP 1.2.12
......
......@@ -83,7 +83,6 @@ Re_free(
/* This seems to have problems under SunOS lwp */
ldap_pvt_thread_mutex_destroy( &re->re_mutex );
#endif /* HAVE_LWP */
ch_free( re->re_timestamp );
if (( rh = re->re_replicas ) != NULL ) {
for ( i = 0; rh[ i ].rh_hostname != NULL; i++ ) {
free( rh[ i ].rh_hostname );
......@@ -175,7 +174,7 @@ Re_parse(
/* there was a sequence number */
*p++ = '\0';
}
re->re_timestamp = strdup( value );
re->re_timestamp = atol( value );
if ( p != NULL && isdigit( (unsigned char) *p )) {
re->re_seq = atoi( p );
}
......@@ -439,7 +438,7 @@ Re_dump(
}
fprintf( fp, "Re_dump: ******\n" );
fprintf( fp, "re_refcnt: %d\n", re->re_refcnt );
fprintf( fp, "re_timestamp: %s\n", re->re_timestamp );
fprintf( fp, "re_timestamp: %ld\n", (long) re->re_timestamp );
fprintf( fp, "re_seq: %d\n", re->re_seq );
for ( i = 0; re->re_replicas && re->re_replicas[ i ].rh_hostname != NULL;
i++ ) {
......@@ -525,7 +524,7 @@ Re_write(
}
}
}
if ( fprintf( fp, "time: %s.%d\n", re->re_timestamp, re->re_seq ) < 0 ) {
if ( fprintf( fp, "time: %ld.%d\n", (long) re->re_timestamp, re->re_seq ) < 0 ) {
rc = -1;
goto bad;
}
......@@ -688,7 +687,7 @@ Re_init(
/* Initialize private data */
(*re)->re_refcnt = sglob->num_replicas;
(*re)->re_timestamp = NULL;
(*re)->re_timestamp = 0;
(*re)->re_replicas = NULL;
(*re)->re_dn = NULL;
(*re)->re_changetype = 0;
......
......@@ -226,12 +226,12 @@ isnew(
Re *re
)
{
int x;
long x;
int ret;
/* Lock the St struct to avoid a race */
sglob->st->st_lock( sglob->st );
x = strcmp( re->re_timestamp, ri->ri_stel->last );
x = re->re_timestamp - ri->ri_stel->last;
if ( x > 0 ) {
/* re timestamp is newer */
ret = 1;
......
......@@ -180,7 +180,7 @@ Rq_add(
/* set the sequence number */
re->re_seq = 0;
if ( !wasempty && !strcmp(rq->rq_tail->re_timestamp, re->re_timestamp )) {
if ( !wasempty && ( rq->rq_tail->re_timestamp == re->re_timestamp )) {
/*
* Our new re has the same timestamp as the tail's timestamp.
* Increment the seq number in the tail and use it as our seq number.
......
......@@ -217,7 +217,7 @@ struct re {
ldap_pvt_thread_mutex_t
re_mutex; /* mutex for this Re */
int re_refcnt; /* ref count, 0 = done */
char *re_timestamp; /* timestamp of this re */
time_t re_timestamp; /* timestamp of this re */
int re_seq; /* sequence number */
Rh *re_replicas; /* array of replica info */
char *re_dn; /* dn of entry being modified */
......@@ -288,7 +288,7 @@ struct rq {
typedef struct stel {
char *hostname; /* host name of replica */
int port; /* port number of replica */
char last[ 64 ]; /* timestamp of last successful repl */
time_t last; /* timestamp of last successful repl */
int seq; /* Sequence number of last repl */
} Stel;
......
......@@ -61,7 +61,7 @@ St_add(
st->st_data[ ind ]->hostname = strdup( ri->ri_hostname );
st->st_data[ ind ]->port = ri->ri_port;
memset( st->st_data[ ind ]->last, 0, sizeof( st->st_data[ ind ]->last ));
st->st_data[ ind ]->last = 0L;
st->st_data[ ind ]->seq = 0;
ldap_pvt_thread_mutex_unlock( &(st->st_mutex ));
......@@ -108,8 +108,8 @@ St_write (
fseek( st->st_fp, 0L, 0 );
for ( i = 0; i < st->st_nreplicas; i++ ) {
stel = st->st_data[ i ];
fprintf( st->st_fp, "%s:%d:%s:%d\n", stel->hostname, stel->port,
stel->last, stel->seq );
fprintf( st->st_fp, "%s:%d:%ld:%d\n", stel->hostname, stel->port,
(long) stel->last, stel->seq );
}
fflush( st->st_fp );
......@@ -136,7 +136,7 @@ St_update(
}
ldap_pvt_thread_mutex_lock( &(st->st_mutex ));
strcpy( stel->last, re->re_timestamp );
stel->last = re->re_timestamp;
stel->seq = re->re_seq;
ldap_pvt_thread_mutex_unlock( &(st->st_mutex ));
return 0;
......@@ -214,7 +214,7 @@ St_read(
if ( !strcmp( hostname, sglob->st->st_data[ i ]->hostname ) &&
atoi( port ) == sglob->st->st_data[ i ]->port ) {
found = 1;
strcpy( sglob->st->st_data[ i ]->last, timestamp );
sglob->st->st_data[ i ]->last = atol( timestamp );
sglob->st->st_data[ i ]->seq = atoi( seq );
break;
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment