threads and contexts and allocations and frees

Benjamin Kaduk kaduk at MIT.EDU
Wed Apr 17 16:14:13 EDT 2013


On Tue, 16 Apr 2013, Chris Hecker wrote:

>
> As I've discussed here (and on kerberos@) before, I run most of my
> interactions with the KDC in a worker thread so I don't ever block the
> main thread.  Both threads have their own contexts, and I'm careful not
> to access krb5 objects at the same time from two threads.  However, I
> just realized I'm being a little sloppy with some krb5 object
> allocations.  For example, if the creds are cached, I'll call
> krb5_get_credentials on the main thread, with KRB5_GC_CACHED and the
> creds structure.  However, if the creds aren't cached or are invalid,
> I'll call krb5_get_credentials on the worker thread to talk to the KDC,
> and it'll allocate the creds structure and send it back to the main
> thread.  On shutdown, I usually call krb5_free_creds on the main thread,
> regardless of which thread+context was used when allocating the creds.
>
> How bad is this?  I could store the worker thread version of the creds,
> then copy them on the main thread, then delete them back on the worker
> thread, but yuck.  A cursory glance at the code shows it probably
> doesn't matter, but want to be sure.

I believe that with the current implementation, using a different 
krb5_context for freeing a structure than was used to allocate it should 
work just fine.  I don't think we make a guarantee anywhere that this will 
always work, though (but it seems unlikely that we would break this 
ability).

-Ben Kaduk


More information about the krbdev mailing list