Skip to content

гонка при сохранении состояния каналов (потеря данных) #36

Description

@iAmScienceMan

bot.bot_created_channels и channel_creators мутируются из асинхронных обработчиков событий, а save_*() делает read-modify-write словаря в памяти, а затем асинхронную запись файла без блокировки.

атомарная замена (mkstemp -> fsync -> os.replace) защищает сам файл, но не окно dict -> write. два голосовых события подряд могут молча затереть обновление друг друга (last-writer-wins).

что чинить

обернуть последовательность read-modify-write-then-persist в asyncio.Lock для каналов и для таргетов.

где

  • cogs/voice.py
  • bot.py (save_channels / save_targets)
  • services/storage.py

Metadata

Metadata

Assignees

Labels

bugSomething isn't workingconcurrencyГонки, блокировки, потокобезопасность

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions