On 19 February 2010, at 17:35, Latha Krishnamurthi wrote:

> Thankyou very much for your prompt reply. I was referring to this 
> documentation.
>  
> http://wiki.freeradius.org/Modules2
> >>The xxx_instantiate module is called each time a new instance is started. 
> >>Generally this >>module is used to establish the data for the instance that 
> >>needs to be retained during the >>life of the instance. For example, 
> >>reading the configuration variables. cf_section_parse>>(conf, data, 
> >>module_config) is used to do this function.
>  
> >>Setup struct rlm_xxx_t to hold data that needs to be accessed by all 
> >>instances of the >>rlm. This data is not necessarily the same for each 
> >>instance. There is a separate copy >>for each instance. For example, this 
> >>is the place to store configuration variables that will >>be provided in 
> >>FreeRADIUS.conf.

Well, it sure seemed clear when I wrote it, but now I tend to agree that its a 
bit misleading.  Those words were lifted from the original version 1 document 
and perhaps something changed with version 2, but I don't recall any such 
changes.  In any case, it does need a revision.  

>  
> It is described like I can have the module specific data in the instance and 
> use it in the life time of the instance.
>  
> So if I need to use a unique socket connection for each thread, I have no 
> place to store the instance specific data ? I need to have a global pool and 
> lock it with mutex ?? (looks like rlm_ldap does something similar ?)

Alan responded with something I was not aware of.  I suspect thats the way you 
need to go.

>  
> Thanks in advance
> LK
>  
> --- On Fri, 2/19/10, Doug Hardie <[email protected]> wrote:
> 
> From: Doug Hardie <[email protected]>
> Subject: Re: modules instantiation
> To: "FreeRadius users mailing list" <[email protected]>
> Date: Friday, February 19, 2010, 3:49 PM
> 
> 
> On 19 February 2010, at 15:24, Latha Krishnamurthi wrote:
> > 
> > I am using the free radius 2.1.3. I have a module rlm_xxx and have 
> > initialized it as thread safe. I have configured the start_servers as 3. 
> > The issue I am having is as follows.
> >  
> > I see that a new instance is getting created when the first one is busy 
> > handling a request. (I do this this by adding a sleep in the module and 
> > printing the threadid) I am expecting the xxx_instantiate function to get 
> > called each time a new instance is created (reading in the documentation). 
> > This does not happen. I am actually connecting to a server in the 
> > instantiate function and storing the socket id in the *instance, so that I 
> > can use it later in the authenticate etc.
> >  
> > But it seems that the socket id is the same for all the instances. 
> > *instance seems to be shared by all the instances ??
> >  
> > Am I missing something/configuration, your help is grately appreciated.
> 
> I believe this is an issue of terminology.  Instantiation in this case refers 
> to the configuration process prior to the start of the server accepting 
> Radius requests.  It does not refer to instantiation of new threads.  I am 
> not aware of any hook you can use for instatiation of new threads.  In one of 
> the older version rlm_example files is the following comment:
> 
> *      If the module needs to temporarily modify it's instantiation
> *      data, the type should be changed to RLM_TYPE_THREAD_UNSAFE.
> *      The server will then take care of ensuring that the module
> *      is single-threaded.
> 
> 
> 
> -
> List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html
> 
> -
> List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html


-
List info/subscribe/unsubscribe? See http://www.freeradius.org/list/users.html

Reply via email to