1 /* trans.c - bdb backend transaction routines */
15 /* Congestion avoidance code
16 * for Deadlock Rollback
20 bdb_trans_backoff( int num_retries )
25 unsigned long key = 0;
26 unsigned long max_key = -1;
27 struct timeval timeout;
29 lutil_entropy( (unsigned char *) &key, sizeof( unsigned long ));
31 for ( i = 0; i < num_retries; i++ ) {
36 delay = 16384 * (key * (double) pow_retries / (double) max_key);
37 delay = delay ? delay : 1;
40 LDAP_LOG( OPERATION, ERR, "delay = %d, num_retries = %d\n", delay, num_retries, 0 );
42 Debug( LDAP_DEBUG_TRACE, "delay = %d, num_retries = %d\n", delay, num_retries, 0 );
45 timeout.tv_sec = delay / 1000000;
46 timeout.tv_usec = delay % 1000000;
47 select( 0, NULL, NULL, NULL, &timeout );