История изменений
Исправление khrundel, (текущая версия) :
Затык на 220 строке. Код: https://github.com/sinitcin/poll_engine
Если я правильно понял, то нужно:
let parent = self.parent();
let mut parent_borrowed = parent.borrow_mut();
parent_borrowed.read();
Arc<RefCell<ILinkChannel>>
.По другому никак: описав у функции read self как мутабл, вы потребовали, чтоб раст гарантировал, что рид вызовется только в эксклюзивном режиме. Арк - это многопоточная хрень, никаких гарантий от состояния гонки нет. Соответственно, нужно запаковать в рефцелл и проверять правила займа динамически. Ну и да, читайте доку к refcell'у, этот код может запаниковать. Возможно, стоит поменять на мутекс какой.
Исходная версия khrundel, :
Затык на 220 строке. Код: https://github.com/sinitcin/poll_engine
Если я правильно понял, то нужно:
let parent = self.parent();
let mut parent_borrowed = parent.borrow_mut();
parent_borrowed.read();
Arc<RefCell<ILinkChannel>>
.По другому никак: описав у функции read self как мутабл, вы потребовали, чтоб раст гарантировал, что рид вызовется только в эксклюзивном режиме. Арк - это многопоточная хрень, никаких гарантий от состояния гонки нет. Соответственно, нужно запаковать в рефцелл и занимать изнутри.