diff options
| author | Agando <roduccomm@gmail.com> | 2026-10-23 20:30:20 +0200 |
|---|---|---|
| committer | Agando <roduccomm@gmail.com> | 2026-10-23 20:30:20 +0200 |
| commit | dfef70b61b98382a1f78fc6d970fb24ac86c4e36 (patch) | |
| tree | 80469fc7cb184015b8a4970b4606eea949d8db48 /api/chat/poll.php | |
| parent | 8e942d0eacf9e6e46fec1e51d6c18ea40afe3310 (diff) | |
fix(chat): three concurrency holes found reviewing my own patch (v4.6.77)
1. chat.py renamed the temp file AFTER releasing the flock, so two writers could each
read the pre-replace snapshot and the later rename silently dropped the earlier
message. os.replace now happens inside the lock.
2. The agent cursor was global. After hermes-reset it pointed past the end of the new
empty thread, so every read returned nothing — the agent would think it had been
ignored. Key is now per thread and reset clears every chat cursor.
3. chat-relay.sh had no overlap guard: a slow agent run (up to 5 min) could collide with
the next tick and answer the same thread twice. flock -n on /tmp/chat-relay.lock.
Verified: stale cursor 'webx11_chat_agent_cursor_oldthread00000' set to 9999999999999,
hermes-reset -> zero cursor keys remain, read returns {messages:[], note:'no new messages...'}.
Diffstat (limited to 'api/chat/poll.php')
0 files changed, 0 insertions, 0 deletions