char *perl_flags;
PerlInterpreter *perl;
pthread_key_t *thread_key;
+
+ pthread_mutex_t clone_mutex;
} PERL_INST;
/*
* A mapping of configuration file names to internal variables.
*/
#ifdef USE_ITHREADS
+ pthread_mutex_init(&inst->clone_mutex, NULL);
+
inst->thread_key = rad_malloc(sizeof(*inst->thread_key));
memset(inst->thread_key,0,sizeof(*inst->thread_key));
HV *rad_request_hv;
HV *rad_request_proxy_hv;
HV *rad_request_proxy_reply_hv;
-
+
#ifdef USE_ITHREADS
+ pthread_mutex_lock(&inst->clone_mutex);
+
PerlInterpreter *interp;
interp = rlm_perl_clone(inst->perl,inst->thread_key);
dTHXa(interp);
PERL_SET_CONTEXT(interp);
}
+
+ pthread_mutex_unlock(&inst->clone_mutex);
#else
PERL_SET_CONTEXT(inst->perl);
#endif
+
{
dSP;
#ifdef USE_ITHREADS
rlm_perl_destruct(inst->perl);
+ pthread_mutex_destroy(&inst->clone_mutex);
#else
perl_destruct(inst->perl);
perl_free(inst->perl);