mirror of
https://git.openldap.org/openldap/openldap.git
synced 2024-12-21 03:10:25 +08:00
Use time_t not char * to represent timestamps.
Fixes billionth second since epoch bug.
This commit is contained in:
parent
09a7bd4331
commit
4039648a2e
@ -88,7 +88,6 @@ Re_free(
|
||||
|
||||
ldap_pvt_thread_mutex_destroy( &re->re_mutex );
|
||||
|
||||
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 );
|
||||
@ -180,7 +179,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 );
|
||||
}
|
||||
@ -463,7 +462,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++ ) {
|
||||
@ -549,7 +548,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;
|
||||
}
|
||||
@ -713,7 +712,7 @@ Re_init(
|
||||
|
||||
/* Initialize private data */
|
||||
(*re)->re_refcnt = sglob->num_replicas;
|
||||
(*re)->re_timestamp = NULL;
|
||||
(*re)->re_timestamp = (time_t) 0L;
|
||||
(*re)->re_replicas = NULL;
|
||||
(*re)->re_dn = NULL;
|
||||
(*re)->re_changetype = 0;
|
||||
|
@ -238,12 +238,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;
|
||||
|
@ -187,7 +187,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.
|
||||
|
@ -255,7 +255,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 */
|
||||
@ -325,7 +325,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;
|
||||
|
||||
|
@ -67,7 +67,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 = 0;
|
||||
st->st_data[ ind ]->seq = 0;
|
||||
|
||||
ldap_pvt_thread_mutex_unlock( &(st->st_mutex ));
|
||||
@ -114,8 +114,9 @@ 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 );
|
||||
|
||||
@ -142,7 +143,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;
|
||||
@ -220,7 +221,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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user