xmerl을 사용하여 다량의 xml 파일들을 파싱하는 도중에 특정 파일에서 CPU/메모리사용량이 치솟고 다음과 같은 에러메시지와 함께 erlang이 죽어버렸다.
특정 파일 하나에서만 이 현상이 생겼는데, 파일을 열어보니 복잡한 테이블과, entity들을 많이 사용한 xml이었다. 조금 복잡하긴 했지만 정상적인 xml이었다.
임이 밝혀졌다.
(R12B-4 에서는 패치된 버전이 포함될 것이라고 한다).
링크에 나와있는대로 한줄만 고쳐주면 에러없이 잘 동작한다.
------------------------- Patch start ----------------------------------
--- xmerl_scan.erl@@/main/xmerl/108 2008-04-25 09:20:41.000000000 +0200
+++ xmerl_scan.erl 2008-07-01 17:11:18.000000000 +0200
@@ -2446,7 +2446,7 @@
case markup_delimeter(ExpRef) of
true ->
scan_content(ExpRef++T1,S1,Pos,Name,Attrs,Space,Lang,Parents,NS,Acc,ExpRef);
_ ->
-
scan_content(string_to_char_set(S1#xmerl_scanner.encoding,ExpRef++T1),S1,Pos,Name,Attrs,Space,Lang,Parents,NS,Acc,[])
+
scan_content(string_to_char_set(S1#xmerl_scanner.encoding,ExpRef)++T1,S1,Pos,Name,Attrs,Space,Lang,Parents,NS,Acc,[])
end;
scan_content("<!--" ++ T, S, Pos, Name, Attrs, Space, Lang, Parents,
NS, Acc,[]) ->
{_, T1, S1} = scan_comment(T, S, Pos, Parents, Lang),
------------------------- Patch end ----------------------------------