erlang/otp — pull request #87 by gustehn (2013-09-27 12:30:50+00:00)
Title: Avoid serialization on code_server in xmerl:export()

The inheritance mechanism in xmerl used to use '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.