Eric, Thanks for the help. One other things that might show some insight into the problem, is that I seeem to get this error in the Apache log when the thread finally dies. (70007) The timeout specified has expired: ap_content_length_filter: apr_bucket_read() failed.
One other question -- if I made my server in a .pm file, which creates the thread, and I 'require' that .pm file in more than one script, each server will be in a separate thread of execution, right? Is there any 'common memory' style of execution I can use for a daemon, such that I can run one instance of the server, yet access it using function calls? Too much to ask perhaps? Thanks again, -Kevin Eric Rybski wrote: > Kevin, > > If you are using a CGI script to start a perl thread, then it is > highly likely apache is timing out (the CGI hosting) your thread. > (Apache threads should block on an executed CGI until it returns, or > apache times it out, whichever occurs first.) > > First of all, AFAIK, fork() is not an option on Win32 as it is > emulated using multiple perl interpreters in a process (e.g. ithreads). > See http://perldoc.perl.org/perlport.html and > http://perldoc.perl.org/perlfork.html regarding this. > > (Note that if you were running on a platform with native fork(), you > would still need to isolate STDIN, STDOUT, and STDERR pipes of the > child process to truely daemonize the child process and allow the > parent apache thread to return.) > > Additionally, if your apache is configured to run multiple servers > (i.e. StartServers, MinSpareServers, and/or MaxSpareServers greater > than 1), then this thread "data server" you are trying to create will > need to exist isolated as a separate instance in each apache child > process. This may or may not be an issue for what you are trying to do > with your thread "server". > > What is the purpose of using a long-running thread? Just to provide > access to read-only data instead of reading it from a file every time? > > You may wish to re-approach the problem using a data server independent > from both apache and perl. I recommend you check out > http://www.danga.com/memcached/ as it's fast, reliable, fairly easy to > set up, and will persist data between *all* threads and processes > without any trickery. There is also a lightweight perl API to use it, > which implements the Cache::Cache interface: > http://search.cpan.org/~bradfitz/Cache-Memcached-1.18/ > > Hope this helps a bit. > > Regards, > Eric > > --- "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> wrote: > > > I am trying to write a utility that contains a server which spins up > > in > > a cgi script. I am using a thread (ithreads), do a check to see if > > it > > is running, and the start the server. I have the thread creation in > > a > > module. I am running in Win32, using an apache server, all > > relatively > > latest and greatest of evreything. > > > > So, my server dies after some time of successful operation. Is this > > due to Apache limiting how long a process can run? I am considering > > a > > fork/exec (daemon-style), but would prefer not, as this poses other > > problems. If I do use fork, is the only way to communicate to it > > through IPCs (message queue, socket, etc?)? > > > > Also, I don't know how to handle static data in perl. I have a > > function in my module that looks up data out of a file. How can I > > look > > it up once, and keep it in memory thereafter? Make it shared, and > > part > > of my ever-running thread, or is there another way? Every time I > > enter > > into my module for a function call, this data gets read from a file. > > > > Thanks in advance, > > > > -Kevin > > > >
