8000 辞書ファイル操作をOperationQueueを使って直列化する by mtgto · Pull Request #204 · mtgto/macSKK · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

辞書ファイル操作をOperationQueueを使って直列化する #204

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Aug 11, 2024

Conversation

mtgto
Copy link
Owner
@mtgto mtgto commented Aug 9, 2024

#203 ユーザー辞書が空エントリに戻るバグの修正を試みます。
Issueにあるログにある順番から、おそらくユーザー辞書の書き込みと読み込みがほぼ同時に起こったものと推測します。

  1. ユーザー辞書をファイルに書き込みを開始する (0バイトに戻る?)
  2. ユーザー辞書が更新されたというイベントを受け取り読み込みを開始する
    a. おそらくここで0バイトだけ読み込んでしまって0エントリに戻った?
  3. 書き込みが正常に完了する

このあと書き込みを行う時は0エントリとして書き込んでしまい、それ以降は正常に読み込んでも既存のエントリが消失してしまったと思われます。

macSKKの定期的に保存する処理をバックグラウンド (非mainスレッド) で実行しており、またmacOS 14.6.1では辞書が更新されたイベントを受け取るのもバックグラウンド (非mainスレッド) で呼び出されているようでした。

このPRでは同時実行数を1に制限したOperationQueueを使い読み込みと書き込みを直列化することで、書き込み中に読み込もうとしても書き込みが完了するまでは読み込めないようにします。
また、上記の推測が正しいとして、念の為に0バイトしか読み込めなかったときは読み込みをなかったことにします。

@mtgto mtgto merged commit 086cff5 into main Aug 11, 2024
2 checks passed
@mtgto mtgto deleted the user-dict-save-safety branch August 11, 2024 06:50
@mtgto mtgto mentioned this pull request Aug 27, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant
0