[gambit-list] Some questions on tls contexts

Marc Feeley feeley at iro.umontreal.ca
Mon Mar 26 08:34:44 EDT 2018


The ___release_rc_tls_context function is passed to ___NONNULLPOINTER_to_SCMOBJ to build the foreign obj (scm_ctx) that is returned to Scheme:

  if ((scm_e =___NONNULLPOINTER_to_SCMOBJ
               (___PSTATE,
                ___CAST(void*,c),
                ___FAL,
                ___release_rc_tls_context,
                &scm_ctx,
                ___RETURN_POS)) != ___FIX(___NO_ERR))
    {
      ___release_rc_tls_context (c);
      return scm_e;
    }

So the ___release_rc_tls_context function will be called when the foreign object is reclaimed by the GC.

Marc



> On Mar 26, 2018, at 3:47 AM, Dimitris Vyzovitis <vyzo at hackzen.org> wrote:
> 
> Wrt question 2, experiments suggest that the tls context can be safely reused.
> 
> -- vyzo
> 
> On Mon, Mar 26, 2018 at 10:38 AM, Dimitris Vyzovitis <vyzo at hackzen.org> wrote:
> Marc,
> 
> Post refcount release bug, I've been looking more closely into the implementation of tls contexts, and I have a couple of questions
> 
> 1. The tls context contains internally allocated data, that is released immediately with ___release_rc_tls_context in failure paths of ___os_make_tls_context. 
>     However, I am not convinced it gets cleaned up when the tls context is reclaimed by the gc.
>     Is there a finalizer for tls contexts or do we leak that internal memory?
> 
> 2. Is there a need to make a tls context per socket or can the tls context be reused and shared among many (concurrent) sockets?
>     Currently I make a new context every time I make an https request, but it would be very nice if a single context could be
>     reused.
> 
> -- vyzo
> 




More information about the Gambit-list mailing list