Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Неадекватный дамп
|
|||
|---|---|---|---|
|
#18+
rdb_devТы не понял моего намёка на барьеры памяти. Используешь boost для обеспечения атомарности при работе с данными в разделяемой между потоками памяти? Намек я понял, но не использую ни boost, ни std::shared_ptr, у меня свое казино с блэкджеком и путанами :) Я не оценил необходимости в данных библиотеках и классах, но есть схожие механизмы, которые работают не хуже. Баг нужно локализовать и исправить и все будет работать нормально, закидывать место exception'ами или закручиванием в разделяемый ресурс с подсчетом ссылок в данном случае равносильно сокрытию более суровых багов, так что, пока, кроме механизма распараллеливания и сбора данных от потоков, все устраивает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 15:17 |
|
||
|
Неадекватный дамп
|
|||
|---|---|---|---|
|
#18+
kealon(Ruslan)адекватный у тебя стэк - не ищи того чего нет, как раз вызовы виртуальных функций на удалённом и выделенном объекте, слова ниже это подтверждают ну и замечательно :), будем двигаться дальше ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 15:19 |
|
||
|
Неадекватный дамп
|
|||
|---|---|---|---|
|
#18+
Cerebrumkealon(Ruslan)адекватный у тебя стэк - не ищи того чего нет, как раз вызовы виртуальных функций на удалённом и выделенном объекте, слова ниже это подтверждают ну и замечательно :), будем двигаться дальше такое ловится переопределением New и Delete, т.е. по сути пишешь свою надстройку над менеджером памяти в New выделяешь блоками кратными размеру страницы в Delete не освобождаешь память, а ставишь на её страницы протекцию No_ACCESS ошибки доступа и выведут к твоей баге ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 15:24 |
|
||
|
Неадекватный дамп
|
|||
|---|---|---|---|
|
#18+
Cerebrumrdb_devТы не понял моего намёка на барьеры памяти. Используешь boost для обеспечения атомарности при работе с данными в разделяемой между потоками памяти? Намек я понял, но не использую ни boost, ни std::shared_ptr, у меня свое казино с блэкджеком и путанами :) Я не оценил необходимости в данных библиотеках и классах, но есть схожие механизмы, которые работают не хуже. Баг нужно локализовать и исправить и все будет работать нормально, закидывать место exception'ами или закручиванием в разделяемый ресурс с подсчетом ссылок в данном случае равносильно сокрытию более суровых багов, так что, пока, кроме механизма распараллеливания и сбора данных от потоков, все устраивает.Возражений нет! У меня тоже своя "библиотека" в заголовочных файлах c++ - с inline функциями, реализующими на GNU ассемблере работу с командами lock;cmpxchg, mfence, lfence, sfence и пр. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 16:28 |
|
||
|
Неадекватный дамп
|
|||
|---|---|---|---|
|
#18+
Double-freeing почти всегда вызван классом, в котором хранится указатель на объект удаляемый в деструкторе, но при этом отсутствует корректный конструктор копирования, а берется генерируемый компилятором, который просто копирует указатель вместо клонирования (или запрещения копирования воообще). В итоге в двух копиях указатель одинаковый и при их удалении на втором будет краш (если споймается). А копирование например может неявно происходить при вызове функции передачей по значению. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 20:34 |
|
||
|
Неадекватный дамп
|
|||
|---|---|---|---|
|
#18+
Кстати, то что удалось достичь 100% повторяемости, говорит о том что речь не о гонках из-за многопоточности. А это дополнительно повышает вероятность того что проблема вызвана конструктором копирования. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 20:45 |
|
||
|
Неадекватный дамп
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, ценный опыт!... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 20:52 |
|
||
|
Неадекватный дамп
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyКстати, то что удалось достичь 100% повторяемости, говорит о том что речь не о гонках из-за многопоточности. А это дополнительно повышает вероятность того что проблема вызвана конструктором копирования. Увы, не мой случай За долгое время работы я уже выработал привычку принудительно запрещать подобное во всех своих классах, в которых мне такое поведение не нужно, объявляя конструктор как private. Причину проблемы я установил, и она заключается в том, что в очень редких случаях (отсюда и долговременность работы приложения и хаотичность падений) в классе пула потоков происходит следующая ситуация: клиент создает массив запросов CPoolTask и помещает их на обработку в пул потоков (QueryFarm), пул создает необходимые потоки или пробуждает простаивающие и приступает к обработке новых заданий. Потоки, которыми управляет пул, если для них нет работы в течение длительного времени, могут запросить у пула подтверждение на завершение своей работы, и пул, в зависимости от его настройки, может им это разрешить. Когда пул разрешает объекту потока завершить себя, тот вычищает свою память, включая хранимое в нем задание CPoolTask, если таковое имеется и клиент (!), поставивший это задание на обработку, тоже не против такого поведения. Я настроил пул так, чтобы он не чистил задания автоматически, но как оказалось не везде: выход потока по таймауту я не предвидел. Пул разрешил потоку завершить себя, а раз клиент тоже не отреагировал на запрос об удаление объекта CPoolTask, то поток добросовестно прихватил и его. Это тот самый первый раз, когда объект задания удален правильно, с точки зрения кучи, но об этом ничего не известно в классе клиента, который это задание туда назначал. Поэтому когда приходит момент почистить задания на клиенте я и получаю double-free. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 21:24 |
|
||
|
Неадекватный дамп
|
|||
|---|---|---|---|
|
#18+
Anatoly Moskovsky, то есть достаточно запретить копирование в базовом классе, как ТС сразу найдёт место, откуда растут ноги? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.06.2017, 21:25 |
|
||
|
Неадекватный дамп
|
|||
|---|---|---|---|
|
#18+
CerebrumПул разрешил потоку завершить себя, а раз клиент тоже не отреагировал на запрос об удаление объекта CPoolTask, то поток добросовестно прихватил и его. Это тот самый первый раз, когда объект задания удален правильно, с точки зрения кучи, но об этом ничего не известно в классе клиента, который это задание туда назначал. Поэтому когда приходит момент почистить задания на клиенте я и получаю double-free. Если у вас объект одновременно используется в нескольких местах, то используйте shared_ptr и не морочьте себе голову всякими разрешениями на удаление. egorychAnatoly Moskovsky, то есть достаточно запретить копирование в базовом классе, как ТС сразу найдёт место, откуда растут ноги? Да. Если причина в этом. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2017, 10:46 |
|
||
|
Неадекватный дамп
|
|||
|---|---|---|---|
|
#18+
Anatoly MoskovskyЕсли у вас объект одновременно используется в нескольких местах, то используйте shared_ptr и не морочьте себе голову всякими разрешениями на удаление. возможно, что и буду, но, если бы я его использовал, то никогда бы не понял, что возможна такая ситуация: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. не знаю сколько бы времени я еще угрохал на то, чтобы понять почему у меня запросы зависают и не обрабатываются :), а так найден логический баг, который можно поправить ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2017, 12:47 |
|
||
|
|

start [/forum/topic.php?fid=57&gotonew=1&tid=2018143]: |
0ms |
get settings: |
11ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
158ms |
get topic data: |
11ms |
get first new msg: |
8ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
| others: | 14ms |
| total: | 276ms |

| 0 / 0 |
