LINUX.ORG.RU

История изменений

Исправление KivApple, (текущая версия) :

item это локальная переменная каждого потока, однако она никогда не будет уничтожена, потому что:

1) постоянно используется + у компилятора отключены оптимизации

2) потоки никогда не завершатся, потому что они состоят из бесконечного цикла

Но даже если всё равно сделать item'ы глобальными, то ошибка не исчезает (проверено).

Если вы про попытку добавить в список элемент, которым там уже есть, то я повторю - все функции добавления делают item->m_list = this, а все функции удаления item->m_list = nullptr. При этом функции добавления отказываются удалять элемент, у которого item->m_list != nullptr, а функции удаления отказываются удалять элемент у которого item->m_list == nullptr. Если предположить атомарность операций из-за mutex, то двойное добавление элемента приведёт всего лишь к возврату функцией добавления false вместо true без какой-либо модификации списка.

Исходная версия KivApple, :

item это локальная переменная каждого потока, однако она никогда не будет уничтожена, потому что:

1) постоянно используется + у компилятора отключены оптимизации

2) потоки никогда не завершатся, потому что они состоят из бесконечного цикла

Но даже если всё равно сделать item'ы глобальными, то ошибка не исчезает.

Если вы про попытку добавить в список элемент, которым там уже есть, то я повторю - все функции добавления делают item->m_list = this, а все функции удаления item->m_list = nullptr. При этом функции добавления отказываются удалять элемент, у которого item->m_list != nullptr, а функции удаления отказываются удалять элемент у которого item->m_list == nullptr. Если предположить атомарность операций из-за mutex, то двойное добавление элемента приведёт всего лишь к возврату функцией добавления false вместо true без какой-либо модификации списка.