The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.
Revision history for Perl extension PersistentPerl.

2.20	Wed Sep 11 19:33:36 PDT 2002

	- Added a mod_persistentperl module that works under Apache 2.0.39 or
	  later.  Works with the default prefork mpm, but not with threaded

	- Exit status is now passed from the backend to the frontend.
	  The frontend now exits soon after the backend exits instead of
	  when all sockets close.

	- Fixed bug where alarm's were unusable from within perl code.

	- Signal handling in the backend has been cleaned up.  Signal
	  settings will no longer be altered between perl runs.

	- Find scripts by dev/ino/group-name instead of by dev/ino

	- In the "perperl" executable buffering has been changed so
	  that BufsizGet and BufsizPut are now maximum values instead of
	  absolute values.  The buffers will start small and grow
	  to this value if needed.  The default values for these options
	  have been increased.

	- Backend allocation is now controlled better.  Another backend isn't
	  allocated until the previous backend has had a chance to start.
	  This should reduce the tendency to use too many backends when the
	  load fluctuates.
	- Initially compiled perl-code is now shared among interpreters
	  within the same group (or same script if not using groups).
	- To implement the new shared perl code and exit status features,
	  an extra parent process is created for each group (or for each
	  script, if not using groups).  This process should use very little
	  cpu or un-shared memory.

	- New code provides doubly linked lists for all slots in the
	  temp file.  This eliminates some of the more obscure linked list
	  code in various places, and enables some minor performance

2.11	Tue Mar 20 22:59:36 PST 2001

	- When using the new Group option, exit was causing the whole
	  interpreter to exit.
	- Fixed a bug introduced in 2.10 where mod_persistentperl could run
	  the wrong script
	- Fixed a bug where mod_persistentperl could mix up the sh-bang options 
	  between different scripts.
	- Added automated mod_persistentperl testing.
	- Added a workaround for a Solaris 2.5.1 bug that was causing the
	  mungefds and touch tests to fail.
	- Added a new variable $PersistentPerl::i_am_perperl for a quick way
	  to check if the script is running under persistentperl.
	- New methods: add_shutdown_handler, shutdown_now, shutdown_next_time

2.10	Wed Jan 31 02:56:33 PST 2001

	- Multiple scripts in one interpreter using the new Group option.
	- Reduce perperl exec time by removing all extraneous shared-libs
	- Make code smaller by adding ifdefs to separate frontend/backend code.
	- Persistent frontend now dies on sigpipe if it gets epipe on fd 1 or 2
	- The backend now always tracks the current directory of the frontend
	- New "register_cleanup" method
	- Build binaries for solaris and bsd ("make solpkg" and "make bsdpkg")
	- Bug fixes:
	    - Changing mtime on a script could cause temp-file corruption
	    - After hitting maxruns, backend was not chdir'ing to the right
	      directory before exec'ing itself.

2.02	Sun Dec 17 21:43:02 PST 2000

	- Bug fixes
	    - Memory leak in mod_persistentperl
	    - Zombie backends could appear to still be running
	    - Options in #! line were sometimes ignored
	    - Module is not being installed correctly on CPAN
	    - Fix for mod_persistentperl compile failure on solaris-8
	- Default value for MaxRuns is now 500
	- Experimental support for setuid scripts with -DIAMSUID
	- Don't link the frontend with libperl
	- New -v option displays the PersistentPerl version
	- Add ability to build binary rpms with "make rpm"

2.0.1	Sun Oct 22 19:53:24 PDT 2000

	- Bug fixes:
	    - mod_persistentperl reports temp file is corrupt
	    - Switching from mod_perl to mod_persistentperl causes error
	    - Runaway file growth in FreeBSD 3.4
	    - Stranded sockets in /tmp
	    - Dead frontends are left stranded in invalid groups
	    - Cannot reliably detect temp-file removal
	    - MAP_FAILED not defined on HP-UX
	    - index() declaration compiler warning on Solaris
	  Details are at

2.0	Mon Sep 11 02:46:57 PDT 2000
	- Use unix sockets instead of tcp sockets.  Fixes the TIME_WAIT
	  problem in 1.x releases.

	- When a backend hits MaxRuns it now re-execs itself.  Setting
	  MaxRuns to 1 allows pre-compilation of scripts that can't run

	- Cleaner implementation of MaxBackends using frontend queuing.

	- The backend is now a separate binary from the frontend.

	- mod_spedycgi is now a shared object (DSO).

	- Redesigned temp-file structure:

	    - One temp-file for each user, used for all perperl processes
	      running under that uid.

	    - Track backends regardless of their state.

	    - Two way queuing - backends waiting on frontends and frontends
	      waiting on backends.

	    - Support for multiple scripts running in a single interpreter.
	      Not yet implemented in code.

1.8.3  Sat Aug 01 16:52:20 GMT 2000
        - Added MAXBACKENDS feature to limit number of backend processes
          spawned.  This required changing the format of the backend
          queue.  Now each entry has a pid, port number, and used flag.
          The queue now contains a list of all backend processes, with
          the used flag present to determine whether or not the process
          is in use.

        - Added contrib directory with instructions on using PersistentPerl
          with HTML::Mason

1.8.2  Sun Jun  6 04:01:53 GMT 1999

	- Make I/O more compatible with PerlIO

1.8.1  Sat Jun  5 12:30:43 PDT 1999

	- Fix compile failure under perl 5.004.

1.8  Thu Jun  3 13:20:00 PDT 1999

	- Now has support for an Apache module front-end, mod_persistentperl.
	  This is a optional performance improvement -- it is not required
	  in order to run PersistentPerl under Apache.  See apache/README
	  for details.

	- Fix for initial_eof test bug on SGI-Irix.

	- New CGI:PersistentPerl method "i_am_perperl" allows the script
	  to tell whether it is running under PersistentPerl

	- New PersistentPerl methods "setopt" and "getopt" allow the
	  script to set/get PersistentPerl options at runtime.

	- Fix for bug in Solaris where PersistentPerl options could not be
	  passed in on the #! line.

	- Better documentation

	- Fix to make t/shutdown.t work before "make install" is done.

1.7  Thu May 13 00:28:42 PDT 1999

	- Re-did a lot of the queue.c code.  Fixes the bug where queue
	  order was not being preserved when a perl-proc exited.  Also
	  saves a couple syscalls when using read/write instead of mmap.

	- Fixed compile warnings on Dec Alpha in start_perl.c and 

	- Added "sleep 2" to fix t/basic.t test #2 under HP-UX.

	- Secret word was not very random on little-endian systems.

1.6  Sun Apr  4 18:18:25 PDT 1999

	- added support for stderr.

	- make sure to cd back to original directory after each perl run.

	- signals are now reset between every request.

	- wrote perperl_poll.c -- allows compilation for
	  either poll or select, using defines USE_POLL or USE_SELECT.
	  Default is poll for sysv & sun, select for all others.

	- queue.c patch for compile failure on alpha/OSF1 V3.2. 
	  From Jean-Damien Durand <>

	- Use mtime instead of ctime to check whether a file has changed.
	  Touch doesn't reliably update ctime on some systems.

	- Send over environment using the same poll loop as when sending
	  stdin/stdout.  A little cleaner & more efficient.

1.5  Tue Mar 30 13:33:55 PST 1999

	- Re-wrote the test scripts to be more reliable.

	- Added a FAQ file.

1.4  Mon Mar 29 03:54:39 PST 1999

	- Converted C++ style comments to /**/.  Should help compilation

	- Added PersistentPerl::set_shutdown_handler to allow the perl
	  program to set a callback for when perl is shut down.

	- Added t/shutdown.t to test the new set_shutdown_handler feature.

	- queue.c wouldn't compile as-is on Solaris Devpro-4.2.  Changed
	  the void*'s to char*'s so the compiler could do pointer arithmetic.