version 2.3
1. Patch from Gabriel Barazer, gabriel at oxeva.fr
	When setting multiple virtual hosts with the same SuexecUserGroup 
	user and group, the process manager use the same process pool for both
	virtual hosts. This means if one virtual host has a DefaultInitEnv and the other
	has different values set, a fastcgi request from any of these virtual host can
	go to the same processes, which is inconsistent (a request from virtualhost a with
	DefaultInitEnv VAL "a", can go to a process spawned with virtualhost b with
	DefaultInitEnv VAL "b" set)
2. Patch from Ulf Haueisen, ulf at dvlp.de
	Bug fix. Use wrong config name "FastCgiAuthenticator" and "FastCgiAuthenticatorAuthoritative"
	while loading these configurations.

version 2.2
1. Support configuration "PassHeader"
	Thank Hans Christian Saustrup for the suggestion.
2. Support apr_shm_remove() in httpd.2.0.X
	Thank Hans Christian Saustrup for bug report.
3. Support configuration "TimeScore"
	Thank Tim Jensen for the patch.
4. Support new configurations "MaxRequestInMem" and "MaxRequestLen"
	If the length of http request longer than "MaxRequestInMem", it will store in tmp file.
	It the length of http request longer than "MaxRequestLen", it will return internal server error.
	Thank Gabriel Barazer(gabriel at oxeva.fr) for the bug report.
	Thank Steffen(info at apachelounge.com) for the help on this issue.
5. Fix miner Sanity check bug
	Thank Yuya Tanaka for bug report

version 2.1 ( Feb 15th 2007 )
1. Add missing config.m4 and Makefile.in for static linking
	Thank Mark Drago for notice
2. FCGIWrapper disallowed in .htaccess
	Thank Balinares for patch
3. Bug fix. Authoritative flag reversed
	Thank Chris Darroch for the patch
4. Support arguments in FCGIWrapper
	Thank Andre Nathan for suggestion and great help on testing it.
5. Support new config "SharememPath", which specifies the location of share memory path.
6. Check running user is root or not, while suexec is enabled.
	Thank Chris Holleman for the bug report.
7. Bug fix. Should not pass respond to auth checkers.
	Thank Szabolcs Hock for bug report.

version 2.0 ( Oct 29th 2006 )
1. Support FastCGI Authorizer protocols now.
2. Add apxs compile instruction in INSTALL.txt.
	Thank Hans Christian Saustrup, hc at saustrup.net for the suggestion.
3. Bug fix. (Win32 only) PHP script can not create socket on Win32.
	Thank bbscool at zjip.com for the bug report and the help.
4. GREAT patchs from Robert L Mathews, rob at tigertech.com
	Fix compile warnings
	Adds a MaxRequestsPerProcess parameter that allows mod_fcgid to exit after handling a certain number of requests
	Close socket before fork 
	avoid the 1-second sleep the first time a process is spawned
5. Print warning log while read data error from FastCGI process.
6. Apply patch from Scott Lamb, Fix mod_fcgid 1.10 warnings on x86_64

version 1.10 ( Jul 3rd 2006 )
1. Use poll() instead of select() in UNIX. "It becomes problematic on apache2 with
large number of logfiles. Apache2 calls poll() (when OS supports it), and in that
case it doesn't need to be recompiled with larger FD_SETSIZE. select() is
still limited to FD_SETSIZE." 
	Thank Piotr Gackiewicz gacek at intertele.pl for the patch.
2. Bug fix: "Some requests fail with HTTP 500 and no errorlog entry is generated"
	Thank Piotr Gackiewicz gacek at intertele.pl for the patch.
3. Use anonymouse share memeory to make OS X happy.
	Thank andkjar at obtech.net for the patch.
4. Add config.m4, mod_fcgid now can be static linked in httpd(See INSTALL.txt)

version 1.09 ( Apr 25th 2006 )
1. Add configuration DefaultMinClassProcessCount(default 3). Idle fastcgi will not be killed if their count 
	less than DefaultMinClassProcessCount.  
	(Thank Finn Smith, finn at timeghost.net for suggestion)
2. Add  configuration PHP_Fix_Pathinfo_Enable(default 0). If you are using PHP and set cgi.fix_pathinfo=1 in
	php.ini, please add "PHP_Fix_Pathinfo_Enable 1" in httpd.conf.  
	(Thank Florian Munz,  flo at myhosting.de for bug report)?
3. Split error log whle '\r' or '\n' are inside the text send to "stderr". 
	(Thank frederic at jolliton.com for the patch)

version 1.08 ( Jan 22nd 2006 )
1. apr_bucket_copy() does not work with buckets from mod_ssl, use apr_bucket_heap_create() instead :(
	(Thank Grzegorz Sampolski, gs at blink.pl for the bug report)
2. Wrapper binary can be stored in a different location to the web content (like /usr/local/apache2/fcgi-bin)
	(Patch from Stephen Grier, s.e.grier at qmul.ac.uk)
3. Support Apache 2.2 now
	(Patch from RyoYazaki, yazaki.ryo at mind.co.jp, and many other people report the compiling problem)
4. Support "\r\n\r\n " HTTP header from CGI
	(Thank Grzegorz Sampolski, gs at blink.pl for the bug report)

version 1.07 ( Nov 10th 2005 )
1. Configuration IPCConnectTimeout, IPCCommTimeout, BusyTimeout can be overwrite in VirtualHost section
	(Thank cthulhu at planet-multiplayer.de for the suggestion)
2. Add EXTRA_CFLAGS = -I$(builddir) in Makefile
	(Thank contagion at gmail.com for the suggestion)
3. Support Apache 2.1 now (Patch by nick at webthing.com)
	(Thank nick at webthing.com for the excellent patch)
4. Support "\r\n\t" HTTP header from CGI

version 1.06 ( Apr 27th 2005 )
1. "DefaultInitEnv" now can be placed inside VirtualHost section
2. Bug fix. "FCGIWrapper" now stores in a per-directory config structure. (The old implementation
	stores it in a per-server config structure, which may be overwrited by another 
	<VirtualHost> section)
	(Thank phyre at rogers.com for bug report and the great help for the bug fix AGAIN)

version 1.05 ( Mar 4th 2005 )
1. Bug fix. suEXEC wrapper in virtualhost environment will shares the process interpreters.
	(Thank phyre at rogers.com for bug report and the great help for the bug fix)

version 1.04 ( Dec 2nd 2004 )
1. Bug fix. ap_scan_script_header_err_core can return non OK without errors.
	e.g. CGI outputs Last-Modified header and browser request with
	If-Mofieided-Since header, ap_scan_script_header_err_core() may
	returns 302(Not Modified)
	(Thank Tatsuki Sugiura, sugi at nemui.org for the bug fix patch)
2. Choose FCGI wrappers based on file extentions.
	e.g.
	FCGIWrapper /usr/local/bin/php .php
	Tells mod_fcgid calling all *.php scripts with wrapper /usr/local/bin/php.
	(Thank Mathijs Brands, mathijs at crooked.net for the suggestion)

verison 1.03 ( Nov 3rd 2004 )
1. Add configuration "OutputBufferSize". The old implementation keep CGI output in a 64k bytes buffer,
	before send them to web browser(for better network IO performance). 
	If FCGI_Fflush() is called in your application, please add "OutputBufferSize 0" in you 
	httpd.conf, which will not keep any CGI output in cache buffer.
	The default value of OutputBufferSize is 64k byte.
	(Thank Grzegorz Sampolski, gs at blink.pl)
2. Return HTTP_SERVICE_UNAVAILABLE instead of HTTP_INTERNAL_SERVER_ERROR, while mod_fcgid can not
	apply a FastCGI process slot. (Thank Grzegorz Sampolski, gs at blink.pl for the suggestion)

version 1.02 ( Oct 1st 2004 )
1. Bug fix. (Win32 only) Forward request to incorrect process when a script is a directory in the URL.
	For example, if in the "cgi-bin" directory there are two programs, "a.exe" and "b.exe".  
	If you go to the URL "http://localhost/cgi-bin/a.exe/defghi" then a.exe will start.
	Then if you go to the URL "http://localhost/cgi-bin/b.exe/uvwxyz"  the request will be
	processed by the already running a.exe. (Thank rripley at amadvertising.com)

version 1.01 ( Sep 21st 2004 )
1. More graceful implementation of suEXEC on UNIX. (Thank radek at karnet.pl for the advice)

version 1.00 ( Sep 10th 2004 )
1. Release FastCGI process slot before sending buffer back to browser. (less process count)

version 0.88 ( Sep 3rd 2004 )
1. Bug fix. File descriptor is closed twice if connect to UNIX domain socket error.
2. Bug fix. Get server last active time incorrectly.

version 0.87 ( Aug 26th 2004 )
1. suEXEC supported.

version 0.86 ( Aug 22th 2004 )
Some major changes for performance. (Hits/Second is 30% greater than the old implementation)
1. Socket bucket instead of heap bucket. (less memory)
2. Pass buffer to browser, once the size of buffer exceed 64k bytes. (less memory)
3. Non-block unix domain socket on UNIX. (better I/O performance)
4. writev() instead of write() on UNIX. (better I/O performance)
5. Try to read at least 8k bytes each single reading. (better I/O perormance)
6. Disconnect FastCGI server, once browser disconnect. (less process count)

version 0.80 ( Jul 27th 2004 )
1. Duplex channel added, Apache now will get notification once FastCGI process is spawned.
2. Bug fix. The FastCGI process share the signal handler with PM(Process Manager) process, if 
	the FastCGI process get signal after fork() and before execve(), it will corrupt the
	share memory. ( It's a very short interval between fork() and execve(), so this rarely happens )

version 0.77 ( Jul 9th 2004 )
1. Organize the configuration again
	1) add "FCGIWrapperGroup" setting
	2) "FCGIWrapper" now takes only one argument
	3) remove "ServerConfig" setting, because it't not work with wrapper yet
Please visit http://fastcgi.coremail.cn/doc.htm for more information about configuration

version 0.76 ( Jul 6th 2004 )
1. Code fix. Replace the depreciated BRIGADE_FOREACH macro, which compile against httpd 2.1-Dev.
	(Patch by Paul Querna(chip at force-elite.com))
2. PHP FastCGI Wrapper now can be run both with "share" and "non-share" mode.

version 0.74 ( Jun 23rd 2004 )
1. Bug fix. Ignore script checking while running in Win32 PHP wrapper mode.
2. Indent the code with K&R style.

version 0.72 ( Jun 13rd 2004 )
1. Bug fix. Trim the padding nuls at the end of data. (Thank rick.stewart at theinternetco.net)

version 0.7 ( May 22nd 2004 )
1. PHP FastCGI Wrapper is supported on UNIX and Windows.

version 0.62 ( May 18th 2004 )
1. Unix version now compilable with gcc2.95.2
2. Unix version is tested on Solaris7 & Solaris8

version 0.6 ( May 8th 2004 )
1. Unix version is tested on Redhat8(gcc3)
2. Windows version is tested on Win2k(VC6)
