Changeset 1112 in sw

Timestamp:
Jul 31, 2014, 6:41:13 PM (10 years ago)
Author:
alx
Message:

Устранен deadlock.
Он возникал если в процессе сохранения конфигурации в файл по команде saveall
(нажатие дискеты в браузере) пропадала плата. При пропадании платы выполняется
деструктор, в котором, как правило, вызывается метод saveConfig() платы, который
ждет освобождения семафора конфигурации (XmlRoot). При этом он держит семафор boardsMutex.
В то же время семафор конфигурации держит поток, выполняющий cmd_saveall(), который,
в свою очередь ожидает освобождения семафора boardsMutex.

Теперь cmd_saveall() освобождает семафор конфигурации до того, как пытается захватить семафор
boardsMutex. Также в функции Transport::board_lost() семафор boardsMutex захватывается только
на время уничтожения объекта платы и освобождается до вызова checkRequired(), которая
захватывает семафор конфигурации. Fixes #60.

(No files)

Note: See TracChangeset for help on using the changeset viewer.