[erlang-bugs] ssl_manager:invalidate_session issues

Ferenc Holzhauser <>
Fri May 27 15:03:26 CEST 2011


Hi,

After upgrading to R14B03 I got these errors:

=ERROR REPORT==== 27-May-2011::13:48:25 ===
Error in process <0.10933.0> on node 'mynodename' with exit value:
{undef,[{ssl_session_cache,delete,[{{"remotehost",995},<<32 bytes>>}]}]}



The problem seems to be this recently modified part of the ssl_manager:

handle_cast({invalidate_session, Host, Port,
    #session{session_id = ID} = Session},
   #state{session_cache = Cache,
  session_cache_cb = CacheCb} = State) ->
    CacheCb:update(Cache, {{Host, Port}, ID}, Session#session{is_resumable =
false}),
>>> timer:apply_after(?CLEAN_SESSION_DB, CacheCb, delete, [{{Host, Port},
ID}]), <<<
    {noreply, State};

handle_cast({invalidate_session, Port, #session{session_id = ID} = Session},
   #state{session_cache = Cache,
  session_cache_cb = CacheCb} = State) ->
    CacheCb:update(Cache, {Port, ID}, Session#session{is_resumable =
false}),
>>> timer:apply_after(?CLEAN_SESSION_DB, CacheCb, delete, [{Port, ID}]), <<<
    {noreply, State};


One issue is a typo : missing the Cache from the arguments expected in
ssl_session_cache:delete(Cache,Key)
Other one is the timer:appy which creates a new timer process and would fail
to access the protected table from it

This fix works in my environment:

handle_cast({invalidate_session, Host, Port,
         #session{session_id = ID} = Session},
        #state{session_cache = Cache,
           session_cache_cb = CacheCb} = State) ->
    CacheCb:update(Cache, {{Host, Port}, ID}, Session#session{is_resumable =
false}),
    timer:send_after(?CLEAN_SESSION_DB, self(), {delayed_clean_session,
{{Host, Port}, ID}}),
    {noreply, State};

handle_cast({invalidate_session, Port, #session{session_id = ID} = Session},
        #state{session_cache = Cache,
           session_cache_cb = CacheCb} = State) ->
    CacheCb:update(Cache, {Port, ID}, Session#session{is_resumable =
false}),
    timer:send_after(?CLEAN_SESSION_DB, self(), {delayed_clean_session,
{Port, ID}}),
    {noreply, State};



%% additional handle_info for delayed session cleaning
handle_info({delayed_clean_session, Key}, #state{session_cache = Cache,
                    session_cache_cb = CacheCb
                    } = State) ->
    CacheCb:delete(Cache, Key),
    {noreply, State};


Kind Regards,
Ferenc
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-bugs/attachments/20110527/8e6aed19/attachment.html>


More information about the erlang-bugs mailing list