10
10
*
11
11
*
12
12
* IDENTIFICATION
13
- * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.43 2007/05/02 15:47:14 alvherre Exp $
13
+ * $PostgreSQL: pgsql/src/backend/postmaster/autovacuum.c,v 1.44 2007/05/02 18:27:57 alvherre Exp $
14
14
*
15
15
*-------------------------------------------------------------------------
16
16
*/
@@ -549,8 +549,6 @@ AutoVacLauncherMain(int argc, char *argv[])
549
549
550
550
if (can_launch && AutoVacuumShmem -> av_startingWorker != INVALID_OFFSET )
551
551
{
552
- long secs ;
553
- int usecs ;
554
552
WorkerInfo worker = (WorkerInfo ) MAKE_PTR (AutoVacuumShmem -> av_startingWorker );
555
553
556
554
if (current_time == 0 )
@@ -566,11 +564,8 @@ AutoVacLauncherMain(int argc, char *argv[])
566
564
* startingWorker pointer before trying to connect; only low-level
567
565
* problems, like fork() failure, can get us here.
568
566
*/
569
- TimestampDifference (worker -> wi_launchtime , current_time ,
570
- & secs , & usecs );
571
-
572
- /* ignore microseconds, as they cannot make any difference */
573
- if (secs > autovacuum_naptime )
567
+ if (TimestampDifferenceExceeds (worker -> wi_launchtime , current_time ,
568
+ autovacuum_naptime * 1000 ))
574
569
{
575
570
LWLockRelease (AutovacuumLock );
576
571
LWLockAcquire (AutovacuumLock , LW_EXCLUSIVE );
@@ -618,13 +613,13 @@ AutoVacLauncherMain(int argc, char *argv[])
618
613
if (elem != NULL )
619
614
{
620
615
avl_dbase * avdb = DLE_VAL (elem );
621
- long secs ;
622
- int usecs ;
623
-
624
- TimestampDifference (current_time , avdb -> adl_next_worker , & secs , & usecs );
625
616
626
- /* do we have to start a worker? */
627
- if (secs <= 0 && usecs <= 0 )
617
+ /*
618
+ * launch a worker if next_worker is right now or it is in the
619
+ * past
620
+ */
621
+ if (TimestampDifferenceExceeds (avdb -> adl_next_worker ,
622
+ current_time , 0 ))
628
623
launch_worker (current_time );
629
624
}
630
625
else
@@ -1037,22 +1032,15 @@ do_start_worker(void)
1037
1032
1038
1033
if (dbp -> adl_datid == tmp -> adw_datid )
1039
1034
{
1040
- TimestampTz curr_plus_naptime ;
1041
- TimestampTz next = dbp -> adl_next_worker ;
1042
-
1043
- curr_plus_naptime =
1044
- TimestampTzPlusMilliseconds (current_time ,
1045
- autovacuum_naptime * 1000 );
1046
-
1047
1035
/*
1048
- * What we want here if to skip if next_worker falls between
1036
+ * Skip this database if its next_worker value falls between
1049
1037
* the current time and the current time plus naptime.
1050
1038
*/
1051
- if (timestamp_cmp_internal (current_time , next ) > 0 )
1052
- skipit = false;
1053
- else if ( timestamp_cmp_internal ( next , curr_plus_naptime ) > 0 )
1054
- skipit = false;
1055
- else
1039
+ if (TimestampDifferenceExceeds (current_time ,
1040
+ dbp -> adl_next_worker , 0 ) &&
1041
+ ! TimestampDifferenceExceeds ( current_time ,
1042
+ dbp -> adl_next_worker ,
1043
+ autovacuum_naptime * 1000 ))
1056
1044
skipit = true;
1057
1045
1058
1046
break ;
0 commit comments