Postmasterのbufmgr.cのBgBufferSync.cにおける静的変数の学習理解---saved_info_valid

4574 ワード

スタート
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の場合を除く)
の最後の部分