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 릴리즈를 하자고 하고 있네요. 파이썬 개발자들은 세그폴트 정도는 신경 안 쓰는 줄 알았더니 -ㅁ-;;;
좋네요.
훌륭
아흐.. 몸통을 쳐야 하는데 항상 곁가지가 즐거운 삽질이 되는지라..-.-;
첨에 저 미투 쓸때는 등비급수라는 말까지 썼다가 지웠는데… 편견이라는 측면도 있군요~.~ 역시 삽질도 몸통을 쳐야!!
@kida: 키다옹 말씀에 미투
아 오늘 제 앞에 서있는 몸통은 어째 어린왕자에 나오는 바오밥나무 만하군요. 도끼를 쥔손이 덜덜 떨리네.
그러나 그게 곁가지인지 몸통인지 알기 위해서는 내공이 필요하다는 사실…(흑~ㅠ,.ㅠ;;)