Python 2.3에 weakref와 gc에 관련된 치명적인 버그가 발견되어 방금 고쳐졌습니다. 발생하는 경우는 이렇게 그냥 간단한 코드에서도 볼 수 있습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
import gc, weakref def test(): class J(object): pass class II(object): def acallback(self, ignore): self.J I = II() I.J = J I.wr = weakref.ref(J, I.acallback) del I, J, II gc.collect() test() |
I -> I.wr -> I.acallback -(strong ref) -> I 이런 식으로 J와 II사이에 사이클릭 레퍼런스가 일어나는 데 중간에 몇개가 weakref로 되어있지만, 파이썬 2.3에서 완전히 도입된 new style class의 gc에서 weakref를 전혀 처리를 하지 않고 있어서 죽어버린다는군요.
lang/python 포트에는 이 패치를 넣기 위해서 portmgr에게 허락을 요청해 놓았습니다. (어제부터 프리즈 -.-;;) 그리고, Tim Peters는 메일에서 올해 안에 2.3.3 릴리즈를 하자고 하고 있네요. 파이썬 개발자들은 세그폴트 정도는 신경 안 쓰는 줄 알았더니 -ㅁ-;;;