Skip to main content

Module access

Module access 

Source
Expand description

跨进程的词库访问租约:已准备的代次目录(RuntimePaths::dictionaries)和用户数据目录(user_data,日志在这里)各放一个锁文件 LOCK_FILE。用这些数据的会话持共享租约,改个人词库、重置学习这类维护持独占租约,两者互斥,只试不等。

锁文件是稳定的协调对象,各版本、各进程都按同一个名字和同一套规则来取,不能改名,也不能删掉。规则与搬进引擎之前 msime-client-services 的 dictionary::access 相同:两个根目录先规范化、排序、去重,按顺序逐个打开并取锁,任何一个取不到就放掉已经取到的,返回 None;Unix 上目录和锁文件都经目录句柄打开、不跟随符号链接,结束时显式解锁,复制出去的描述符不能把租约延长到守卫之后。

引擎层的维护接口(crate::edit_personal_dictionary、crate::edit_bundled_dictionary_entry、crate::reset_learned_data)自己取独占租约;host 门面的同名接口假定调用方(host-api)已经拿着租约,不再取。

Structs§

DictionaryAccess
一份词库访问租约,持有期间别的进程(和本进程里的其他租约)按 DictionaryAccess::try_session、DictionaryAccess::try_maintenance 的规则互斥。

Constants§

LOCK_FILE
租约锁文件的名字,放在每个根目录里。