1 /* trans.c - bdb backend transaction routines */
14 /* Congestion avoidance code
15 * for Deadlock Rollback
19 bdb_trans_backoff( int num_retries )
24 unsigned long key = 0;
25 unsigned long max_key = -1;
26 struct timeval timeout;
28 lutil_entropy( &key, sizeof( unsigned long ));
30 for ( i = 0; i < num_retries; i++ ) {
35 delay = 16384 * (key * (double) pow_retries / (double) max_key);
36 delay = delay ? delay : 1;
39 LDAP_LOG( OPERATION, ERR, "delay = %d, num_retries = %d\n", delay, num_retries, 0 );
41 Debug( LDAP_DEBUG_TRACE, "delay = %d, num_retries = %d\n", delay, num_retries, 0 );
44 timeout.tv_sec = delay / 1000000;
45 timeout.tv_usec = delay % 1000000;
46 select( 0, NULL, NULL, NULL, &timeout );