トップ 差分 一覧 Farm ソース 検索 ヘルプ RSS ログイン

BugTrack-wiki/333

ページの作成や編集にはユーザ登録が必要です。

Wiki::page_exists() の内部キャッシュ未更新による不具合

  • 投稿者: 菜梨
  • カテゴリ: 本体
  • 優先度: 低
  • 状態: リリース済
  • 日時: 2009年09月29日 22時51分35秒

 内容

指定されたページの有無を調べてその結果を返却するメソッド Wiki::page_exists() は、1 度調べたページについては結果を内部にキャッシュし、2 度目以降はキャッシュされた値を返却します。現在の FSWiki では、Wiki::page_exists() の結果が 1 度キャッシュされてしまうと、1 つの閲覧/アクションリクエスト内では決して更新されることはないので、Wiki::save_page() のように実行前後でページの有無が変化する場合もある処理の後では、次のように問題が起きる可能性があります(具体的事例としては、BBS-サポート掲示板/915 参照)。

問題発生時の処理の流れ:

  1. まず、Wiki::page_exists() にてページ有無調査し、ページ有無キャッシュに保存。
  2. その後、Wiki::save_page() の実行により、新規ページ作成、あるいは既存ページ削除。
  3. その後、save_after フックや delete フックで起動される処理内において、Wiki::page_exists() にてページ有無キャッシュ読み出し → 最新のページ有無状況と異なる。

このような問題の発生を回避するためには、Wiki::save_page() の実体である Wiki::DefaultStorage::save_page() の終了直前に、対象ページについてのページ有無キャッシュをクリアする処理が必要と思われます。具体的な変更点は、BBS-サポート掲示板/915 に示した内容になります。

 コメント

  • ご指摘ありがとうございます。修正をSVNにコミットしておきました。 - たけぞう (2010年10月02日 10時41分17秒)
  • fswiki3.6.5でリリースしました。 - KG (2018年03月30日 11時22分29秒)
お名前: コメント:

最終更新時間:2018年03月30日 11時22分32秒