[erlang-patches] Fix serialization problem in xmerl export

Richard Carlsson carlsson.richard@REDACTED
Fri Sep 27 13:49:36 CEST 2013


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 git@REDACTED:richcarl/otp.git 
xmerl-avoid-code-server-serialization

https://github.com/richcarl/otp/tree/xmerl-avoid-code-server-serialization


    /Richard



More information about the erlang-patches mailing list