Postmasterのbufmgr.cのBgBufferSync.cにおける静的変数の学習理解---saved_info_valid
4574 ワード
スタート
最初:saved_info_validはfalseです.
一度実行するとtrueになります.(bgwriter_lru_maxpages<=0の場合を除く)
の最後の部分
bool
BgBufferSync(void)
{
……
/*
* Information saved between calls so we can determine the strategy
* point's advance rate and avoid scanning already-cleaned buffers.
*/
static bool saved_info_valid = false;
static int prev_strategy_buf_id;
static uint32 prev_strategy_passes;
static int next_to_clean;
static uint32 next_passes;
/* Moving averages of allocation rate and clean-buffer density */
static float smoothed_alloc = 0;
static float smoothed_density = 10.0;
……
/*
* If we're not running the LRU scan, just stop after doing the stats
* stuff. We mark the saved state invalid so that we can recover sanely
* if LRU scan is turned back on later.
*/
if (bgwriter_lru_maxpages <= 0)
{
saved_info_valid = false;
return true;
}
if (saved_info_valid)
{
……
}
else
{
……
}
/* Update saved info for next time */
prev_strategy_buf_id = strategy_buf_id;
prev_strategy_passes = strategy_passes;
saved_info_valid = true;
……
/* Return true if OK to hibernate */
return (bufs_to_lap == 0 && recent_alloc == 0);
}
最初:saved_info_validはfalseです.
一度実行するとtrueになります.(bgwriter_lru_maxpages<=0の場合を除く)
の最後の部分