Perrin Harkins wrote:
> Elizabeth Mattijsen wrote:
> 
>> Hmm... but you won't be able to "fetch" the $dbh from the thread.  It 
>> can only live in _that_ thread.  You cannot "pass" objects between 
>> threads.  But you _can_ send queries to that thread, fetch a jobid for 
>> that job and then obtain whatever was returned as a Perl datastructure.
>>
>> (if anyone knows of a way to pass objects between threads, I'd really 
>> would like to know)
> 
> 
> Hmmm... That could really throw a wrench in things.  If you have an 
> object based on a hash, and you share that hash, and you re-bless the 
> object in each thread, does that work?  What if the hash contains 
> references to other variables.  Do they need to be explicity shared as 
> well?

That's what I meant. Probably non need for Thread::Pool, at all. use a 
shared datastructure, maintain a list of free and busy items and simply 
hand pointers inside this datastructure to the threads asking for an 
item. e.g.:

package DBI::Pool;
use threads::shared;
my @pool : shared;
sub init {} # pre-populate pool with N connections
sub get {}  # return a ref to $dbh, grow the pool if needed
sub put {}  # move the pointer from the busy list to the free list

won't this work? I guess Perrin is right in respect that the whole item 
needs to be shared (deep-shared). can we have such an attribute/function 
that will automatically traverse the datastructure and share it all? or 
is this the case already with 'shared'?

Now since we want to have various connections, it can be:

my %pools : shared;

where each key is a unique identifier, "compiled" from the dbi connect's 
DSN string and a value is the actual pool.

BTW, there is no more need for Apache prefix in Apache::DBI, this can be 
a generic Pool class. I guess Apache::DBI can subclass DBI::Pool and add 
things like connect_on_init(), but just to build the initial pool when 
the process starts.

__________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

Reply via email to