@ -859,13 +859,13 @@ LWLockAcquireOrWait(LWLock *l, LWLockMode mode)
/* Failed to get lock, so release interrupt holdoff */
RESUME_INTERRUPTS ( ) ;
LOG_LWDEBUG ( " LWLockAcquireOrWait " , T_NAME ( l ) , T_ID ( l ) , " failed " ) ;
TRACE_POSTGRESQL_LWLOCK_WAIT_UNTIL_FREE _FAIL ( T_NAME ( l ) , T_ID ( l ) , mode ) ;
TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT _FAIL ( T_NAME ( l ) , T_ID ( l ) , mode ) ;
}
else
{
/* Add lock to list of locks held by this backend */
held_lwlocks [ num_held_lwlocks + + ] = l ;
TRACE_POSTGRESQL_LWLOCK_WAIT_UNTIL_FREE ( T_NAME ( l ) , T_ID ( l ) , mode ) ;
TRACE_POSTGRESQL_LWLOCK_ACQUIRE_OR_WAIT ( T_NAME ( l ) , T_ID ( l ) , mode ) ;
}
return ! mustwait ;
@ -897,6 +897,15 @@ LWLockWaitForVar(LWLock *l, uint64 *valptr, uint64 oldval, uint64 *newval)
PGPROC * proc = MyProc ;
int extraWaits = 0 ;
bool result = false ;
# ifdef LWLOCK_STATS
lwlock_stats * lwstats ;
# endif
PRINT_LWDEBUG ( " LWLockWaitForVar " , lock ) ;
# ifdef LWLOCK_STATS
lwstats = get_lwlock_stats_entry ( l ) ;
# endif /* LWLOCK_STATS */
/*
* Quick test first to see if it the slot is free right now .
@ -986,7 +995,7 @@ LWLockWaitForVar(LWLock *l, uint64 *valptr, uint64 oldval, uint64 *newval)
lwstats - > block_count + + ;
# endif
TRACE_POSTGRESQL_LWLOCK_WAIT_START ( T_NAME ( l ) , T_ID ( l ) , mode ) ;
TRACE_POSTGRESQL_LWLOCK_WAIT_START ( T_NAME ( l ) , T_ID ( l ) , LW_EXCLUSIVE ) ;
for ( ; ; )
{
@ -997,7 +1006,7 @@ LWLockWaitForVar(LWLock *l, uint64 *valptr, uint64 oldval, uint64 *newval)
extraWaits + + ;
}
TRACE_POSTGRESQL_LWLOCK_WAIT_DONE ( T_NAME ( l ) , T_ID ( l ) , mode ) ;
TRACE_POSTGRESQL_LWLOCK_WAIT_DONE ( T_NAME ( l ) , T_ID ( l ) , LW_EXCLUSIVE ) ;
LOG_LWDEBUG ( " LWLockWaitForVar " , T_NAME ( l ) , T_ID ( l ) , " awakened " ) ;
@ -1007,7 +1016,7 @@ LWLockWaitForVar(LWLock *l, uint64 *valptr, uint64 oldval, uint64 *newval)
/* We are done updating shared state of the lock itself. */
SpinLockRelease ( & lock - > mutex ) ;
TRACE_POSTGRESQL_LWLOCK_ACQUIRE ( T_NAME ( l ) , T_ID ( l ) , mode ) ;
TRACE_POSTGRESQL_LWLOCK_ACQUIRE ( T_NAME ( l ) , T_ID ( l ) , LW_EXCLUSIVE ) ;
/*
* Fix the process wait semaphore ' s count for any absorbed wakeups .