The inheritance mechanism in xmerl uses 'catch apply(M,F,Args)'
to try different modules M until one was found that had a function
F/A. However, when M:F/A does not exist, apply/3 will trap to
error_handler:undefined_function/3, which will call
code:ensure_loaded(M), making a synchronous request to the code
server process. If many processes tried to use xmerl:export()
concurrently, they would get serialized waiting for the code server process.
This patch uses erlang:function_exported/3 instead to check if M:F/A
exists. If M exists, it should already have been loaded at that point
due to the inheritance checking in the xmerl:callbacks/1 function.
git fetch :richcarl/otp.git
xmerl-avoid-code-server-serialization
https://github.com/richcarl/otp/tree/xmerl-avoid-code-server-serialization
/Richard