= Сообщение: 4587 из 5323 ========================================= RU.HUSKY = От : Nil A 2:5015/46 07 Nov 21 21:59:40 Кому : Stas Mishchenkov 07 Nov 21 21:59:40 Тема : src/pktwrite.c: openPktForAppending - race condition FGHI : area://RU.HUSKY?msgid=2:5015/46+618824d6 На : area://RU.HUSKY?msgid=2:460/5858+61881d83 = Кодировка сообщения определена как: CP866 ================================== Ответ: area://RU.HUSKY?msgid=2:460/5858+618aa216 ============================================================================== Hello, Stas!
Sunday November 07 2021 21:38, from Stas Mishchenkov -> Alexey Vissarionov:
SM>>> Можно, но я отказался из-за коллизий с тоссером. SM> Я отказался от hpt post.
У тебя тоссер не HPT? Вроде hpt post должен хватать общехасковский лок, тогда hpt toss будет ждать.
AV>> Правильную методику я уже вкратце описал. SM> Я примерно так и делаю, только собственной перлятиной.
Не всё так гладко c rename(), есть две проблемы.
1. rename(2) не сработает, если на разных файловых системах, иначе тогда переименование превратиться в копирование+удаление файла - не атомарная операция. Если ты "переименовываешь" с tmpfs, то это как раз та самая ситуация.
2. rename(2) всегда затирает целевой файл, а мы можем не угадать с уникальностью имени .pkt. В современном линуксе есть renameat2(2) с опцией RENAME_NOREPLACE, но как быть с другими POSIX системами? Как быть с вендой? Отсутствие renameat2(2) раньше компенсировали путём вызовы link(2) для создания hard link, тогда он возвращал EEXIST, если уже существует целевой файл. Такой способ закрывал все POSIX системы. Но как быть с вендой?
Геморой, геморой, ... Concurrency (multithreading and multiprocessing) - это сложная тема. Multiplatform support - это сложная тема. Concurrency + Concurrency = Pi3дец сложность.
Best Regards, Nil --- GoldED+/LNX 1.1.5 * Origin: Linux 2.6.32-042stab145.3 (2:5015/46)