Skip to content

Commit 06ba520

Browse files
committed
fix: 使用 RLock 解决 Web 服务死锁导致页面一直加载中
cleanup_data() 持有 self.lock 时调用 _do_aggregation(), 其内部 get_setting() 再次获取同一 Lock,因 threading.Lock 不可重入, 导致同线程第二次 acquire 永久阻塞,insert() 卡死,所有 API 卡死。 改用 threading.RLock(可重入锁)修复。
1 parent 2fb6320 commit 06ba520

1 file changed

Lines changed: 1 addition & 1 deletion

File tree

aircat-server-sqlite.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -195,7 +195,7 @@ def __init__(self, db_path=DB_PATH):
195195
db_dir = os.path.dirname(db_path)
196196
if db_dir and not os.path.exists(db_dir):
197197
os.makedirs(db_dir, exist_ok=True)
198-
self.lock = threading.Lock()
198+
self.lock = threading.RLock() # 可重入锁,允许 cleanup_data 内部调用 get_setting
199199
# check_same_thread=False 允许跨线程访问
200200
self.conn = sqlite3.connect(db_path, check_same_thread=False)
201201
self.conn.row_factory = sqlite3.Row

0 commit comments

Comments
 (0)