diff --git a/ChangeLog b/ChangeLog index dd32cf530..dbd2552ac 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,11 @@ 2005-10-25 Alexey Shchepin + * src/tls/tls.erl: Accept {error,already_loaded} from + erl_ddll:load_driver/2 + * src/stringprep/stringprep.erl: Likewise + * src/mod_irc/iconv.erl: Likewise + * src/ejabberd_app.erl: Likewise + * src/tls/tls_drv.c: Support for "connect" method * src/tls/tls.erl: Likewise diff --git a/src/ejabberd_app.erl b/src/ejabberd_app.erl index 9b6dc7441..109697470 100644 --- a/src/ejabberd_app.erl +++ b/src/ejabberd_app.erl @@ -63,7 +63,10 @@ init() -> end, error_logger:add_report_handler(ejabberd_logger_h, LogPath), erl_ddll:load_driver(ejabberd:get_so_path(), tls_drv), - ok = erl_ddll:load_driver(ejabberd:get_so_path(), expat_erl), + case erl_ddll:load_driver(ejabberd:get_so_path(), expat_erl) of + ok -> ok; + {error, already_loaded} -> ok + end, Port = open_port({spawn, expat_erl}, [binary]), loop(Port). diff --git a/src/mod_irc/iconv.erl b/src/mod_irc/iconv.erl index ced941ac9..1e4ef7a94 100644 --- a/src/mod_irc/iconv.erl +++ b/src/mod_irc/iconv.erl @@ -31,7 +31,10 @@ start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). init([]) -> - ok = erl_ddll:load_driver(ejabberd:get_so_path(), iconv_erl), + case erl_ddll:load_driver(ejabberd:get_so_path(), iconv_erl) of + ok -> ok; + {error, already_loaded} -> ok + end, Port = open_port({spawn, iconv_erl}, []), ets:new(iconv_table, [set, public, named_table]), ets:insert(iconv_table, {port, Port}), diff --git a/src/stringprep/stringprep.erl b/src/stringprep/stringprep.erl index ac06a0965..f2a4e0f58 100644 --- a/src/stringprep/stringprep.erl +++ b/src/stringprep/stringprep.erl @@ -39,7 +39,10 @@ start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). init([]) -> - ok = erl_ddll:load_driver(ejabberd:get_so_path(), stringprep_drv), + case erl_ddll:load_driver(ejabberd:get_so_path(), stringprep_drv) of + ok -> ok; + {error, already_loaded} -> ok + end, Port = open_port({spawn, stringprep_drv}, []), register(?STRINGPREP_PORT, Port), {ok, Port}. diff --git a/src/tls/tls.erl b/src/tls/tls.erl index e1925520f..cdd00570b 100644 --- a/src/tls/tls.erl +++ b/src/tls/tls.erl @@ -43,7 +43,10 @@ start_link() -> gen_server:start_link({local, ?MODULE}, ?MODULE, [], []). init([]) -> - ok = erl_ddll:load_driver(ejabberd:get_so_path(), tls_drv), + case erl_ddll:load_driver(ejabberd:get_so_path(), tls_drv) of + ok -> ok; + {error, already_loaded} -> ok + end, Port = open_port({spawn, tls_drv}, [binary]), Res = port_control(Port, ?SET_CERTIFICATE_FILE_ACCEPT, "./ssl.pem" ++ [0]), case Res of @@ -85,7 +88,10 @@ terminate(_Reason, Port) -> tcp_to_tls(TCPSocket, Options) -> case lists:keysearch(certfile, 1, Options) of {value, {certfile, CertFile}} -> - ok = erl_ddll:load_driver(ejabberd:get_so_path(), tls_drv), + case erl_ddll:load_driver(ejabberd:get_so_path(), tls_drv) of + ok -> ok; + {error, already_loaded} -> ok + end, Port = open_port({spawn, tls_drv}, [binary]), Command = case lists:member(connect, Options) of true -> @@ -164,7 +170,10 @@ close(#tlssock{tcpsock = TCPSocket, tlsport = Port}) -> test() -> - ok = erl_ddll:load_driver(ejabberd:get_so_path(), tls_drv), + case erl_ddll:load_driver(ejabberd:get_so_path(), tls_drv) of + ok -> ok; + {error, already_loaded} -> ok + end, Port = open_port({spawn, tls_drv}, [binary]), io:format("open_port: ~p~n", [Port]), PCRes = port_control(Port, ?SET_CERTIFICATE_FILE_ACCEPT,