MruArena내부의 list는 MruArena를 감싸는 SpinLock으로 보호받고 있습니다.
이때, 현재는 ArenaRc::new가 다음과 같이 되어있으므로, ArenaRc가 자신이 allocated되었던 arena가 아닌 엉뚱한 arena를 가리키도록 할 수 있습니다.
pub fn new(arena: StrongPin<'_, A>, inner: Ref<A::Data>) -> Self
이러면 list를 수정하는 과정에서 synchronization이 잘못될 수 있고, 또, alloc와 dealloc이 동시에 일어나면 StrongPinMut<MruArenaInner>>와 &MruArenaInner가 공존할 수 있을 것 같습니다.
해결 방법은 고민중입니다만, 일단은 ArenaRc::new의 signature를 다시 이전처럼 바꾸면 좋을 것 같습니다.
MruArena
내부의 list는MruArena
를 감싸는SpinLock
으로 보호받고 있습니다. 이때, 현재는ArenaRc::new
가 다음과 같이 되어있으므로,ArenaRc
가 자신이 allocated되었던 arena가 아닌 엉뚱한 arena를 가리키도록 할 수 있습니다.이러면 list를 수정하는 과정에서 synchronization이 잘못될 수 있고, 또, alloc와 dealloc이 동시에 일어나면
StrongPinMut<MruArenaInner>>
와&MruArenaInner
가 공존할 수 있을 것 같습니다.해결 방법은 고민중입니다만, 일단은
ArenaRc::new
의 signature를 다시 이전처럼 바꾸면 좋을 것 같습니다.