The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
Revision history for Perl extension IPC::Shareable.

1.13    2022-10-11
    - In singleton(), do a check whether class was sent in. There was a shifting
      issue if called with IPC::Shareable::singleton() as opposed to
      IPC::Shareable->singleton()
    - When an exclusive collision occurs and both 'graceful' and 'warn' are set,
      the warning thrown now includes the segment/semaphore key in use. This
      makes it easier to clean things up with 'ipcrm'

1.12    2022-03-13
    - Add tests in t/07-new.t to test how using tied() against a dereferenced
      variable returned from new() allows access to the underlying
      IPC::Shareable object
    - Reworked how spawn() and unspawn() manage things internally
    - POD updates, fixes and clarifications
    - Removed spawn() and unspawn(). There's really no need for these as one
      can simply create but not destroy

1.11    2022-03-07
    - Fix certain tests so they don't throw if we bail early

1.10    2022-03-07
    - Fix issue where if segments were created underneath of a parent by an
      external process other than the process that created the parent, the
      global register wasn't being updated, therefore those segments weren't
      being removed when calling clean_up_all()
    - All test files now check number of segments before and after the entire
      script has run, verifying that all segments were cleaned up ok
    - The test suite itself in its entirety makes sure that all segments
      created during the suite run are cleaned up properly
    - Added CI_TESTING=1 to coverage CI tests

1.09    2022-03-06
    - Made 81-fork_dup_rand_keys.t developer only (but still need to figure out
      why it only fails on FreeBSD)

1.08    2022-03-04
    - Added 'protected' option and clean_up_protected(). If set, the cleanup
      methods, nor the automatic 'destroy' functionality will remove the segment
      the option was set in, nor any children created underneath of it. A call
      to clean_up_protected() is required to remove them
    - Updated attribute tests to include all available options
    - _shm_key_rand() now checks EXCLUSIVE_CHECK_LIMIT times to find a key for
      a free segment. It croaks if not
    - Added _shm_key_rand_int() so we can mock it to test the dup random key
      checks
    - Added build prereq of Mock::Sub to test the random key function

1.07    2022-03-04
    - When running in forked environments, _shm_key_rand() was consistently
      returning the same 'random' key to each forked process. We've fixed this
      issue, and added tests for it (fixed by adding a call to srand() before
      rand)
    - Move $SIG{CHLD} handlers to spawn() and unspawn() instead of having them
      global (fixes #15)
    - t/65-seg_size.t fails on 32-bit perls; Add a check and bail if we're on
      a perl < 64-bit (fixes #14)

1.06    2021-09-08
    - Fix significant bug where at least on MacOS, if we generated a CRC of a
      key that was greater than 0x80000000, it would round down the key to that
      number exactly, causing duplicates, and incorrect segment access
    - Added new() method, returns a reference (default hash) without having to
      do the tie() directly
    - Fix issue in JSON decoder where an empty JSON string may have caused
      decode failure
    - Modify t/65-seg_size.t beyond RAM max test to cover varying error messages
      on differing OSs
    - Renamed t/67-out_of_memory.t as the tests are related to exhausting SHM
      slots, not RAM

1.05    2021-07-16
    - Bump prereq version of Test::SharedFork to 0.35
    - Added ability to use JSON as the serializer
    - Added ipcs()
    - Added test to ensure we croak if data size is greater than segment size
    - Added 'tidy' attribute, removes unneeded nested structure segments
    - In SharedMem, added _key attribute, and added set/get methods
    - Changed key generation from using padding, pack and unpack to using
      String::CRC32's crc32(), which allows arbitrary, unpadded strings
    - Added attributes() allows fetching one, or all of the object's atttributes
    - Added 'limit' attribute, by setting false, allows a user to set a segment
      size larger than our internal 1GB default
    - Cleaned up exception throwing (particularly if seg size eats up all
      memory, we throw an appropriate message)
    - Display proper exception if we try to exhaust all available shared memory
      segments (fixes #3)

1.04    2021-06-28
    - Skip unspawn tests for perls with -Duselongdouble, as Storable is not
      compatible storing/retrieving such numbers (closes #5)

1.03    2021-06-25
    - Add newline to singleton() warn so that it doesn't print out trace info

1.02    2021-06-25
    - Remove erroneous listing from MANIFEST
    - Work around issue in t/65-seg_size.t where MacOS and FreeBSD don't have
      the -i flag to ipcs (thanks for the PR, Roland Walker!)
    - Added singleton(), ensures that only a single instance of a script can
      run at any given time
    - Added tests to ensure we croak() if create is not set and the segment
      doesn't yet exist
    - Fix POD issue where we stated exclusive returns undef instead of croaking
      (fixes #10)
    - Change 'perl' shell call to $^X in t/71-unspawn.t (fixes #6)

1.01    2021-06-24
    - Added 'graceful' flag option. With exclusive, if a second process
      attempts to tie an exclusive segment, we exit gracefully instead of
      croaking

1.00    2021-06-09
    - Project adopted by Steve Bertrand
    - Added global_register() and process_register() to return the
      registries of active segments and semaphores
    - Added seg() and sem() methods, returns the structure of a shared
      memory segment and a sempahore respectively
    - Added initial "persist" hash variables. Separate processes (even
      multiple files in multiple windows) can share a variable, and it'll
      remain available even after all processes exit. The variable will be
      re-attached if the same shared segment key is used in subsequent runs
    - Reversed order of Changes file
    - Removed trace() and debug() code for ease of reading
    - Improved exception/error messages, added exception testing, reduced
      and minimized the number of exceptions actually uncaught
    - Significant POD cleanup
    - 100% rewrite of all test files, and added a slew of new ones, all
      using Test::More
    - Add build requirement of Test::SharedFork to handle the out of
      sequence fork() tests in t/35-clean.t and t/30-lock_operations
    - Major POD updates
    - Added tests to prove that RT 123057 isn't really an issue (ie. segment
      size parameter works correctly)

0.61  Mon Oct  8 00:27:39 2012
    - Added patch from Frank Lichtenheld fixing IPC::Shareable's dependence
      on the presence of a perl bug which is no longer present in
      perl >= 5.10
    - Fixed bug reported by Dan Harbin where the FETCH operation on a tie()d
      string containing HASH, ARRAY, or SCALAR fails because it was using
      the stringification of the data to determine what kind of reference
      it was.  Now using Scalar::Util::reftype
    - Added missing dependency on IPC::Semaphore to Makefile.PL (reported
      by Adrian Issott)
    - Added a 'sleep 1' in a test that was hanging on certain systems
      due (possibly) to two alarm signals coming too quickly to the
      child process.  From Ton Voon.

0.60  Mon Mar  5 15:20:18 EST 2001
    - Lee Lindley (lee.lindley@bigfoot.com) added the _was_changed
      optimization, improved the locking functionality, fixed
      numerous bugs, and generally cleaned things up; thanks.
    - Removed support for "no" as a false value in arguments;
      thanks to Dave Rolsky <autarch@urth.org>

0.54  Mon Jan  8 11:52:28 EST 2001
    - Fix to allow IPC::Shareable to work with 1.0.* versions of
      Storable

0.53  Tue Nov 14 00:33:35 EST 2000
    - Fixed race condition in test suite causing intermitent
      failures.
    - Better checking for success of calls to Storable::thaw();
      thanks to Raphael Manfredi <Raphael_Manfredi@pobox.com>.

0.52  Thu Sep 14 12:30:17 EDT 2000
    - Now STORE, PUSH, POP, etc all call _thaw() before doing
      their business.
    - Refined SIGALRM handlers in test scripts
    - Fixed concurrency issues affecting tied arrays and hashes;
      thanks to thanks to Robert Emmery <roberte@netscape.com>,
      Terry Ewing <terry@intevo.com>, Tim Fries
      <timf@dicecorp.com>, and Joe Thomas <jthomas@women.com>.
    - Doc fixes thanks to Paul Makepeace
      <Paul.Makepeace@realprogrammers.com>

0.51  Fri May  5 23:47:06 EDT 2000
    - Fixed bug that would cause IPC::Shareable::BUF_SIZ to be
      ignored; thanks to Robert Emmery <roberte@netscape.com> and
      Mohammed J. Kabir <kabir@intevo.com> for reporting.
    - Stopped tests from leaking shm segments
    - Added test of argument parsing
    - doc fixes

0.50 Tue Mar 21 11:56:32 EST 2000
    - Complete rewrite incorporating the following changes.
    - Requires 5.00503.  This allowed the module to get rid of the
      global cache for shared memory segments; each Shareable
      object now carries around its own data.
    - 5.00503 also allowed tied arrays to be implemented
    - Shared memory segments can no longer be of infinite length
      thereby reducing the amount of code in the module by a
      factor of 2.
    - Uses IPC::Shareable::SharedMem class for accessing
      shared memory.
    - Uses IPC::Semaphore module for accessing semaphores.
    - Completely revisited the way references are dealed with: all
      referenced thingies are now automagically tied to shared
      memory.
    - Constants now imported from IPC::SysV; Shareable.xs is gone
    - Rewrote test suite and moved into t subdirectory
    - Updated man page

 0.30 Mon Jan 19 11:13:41 EST 1998
    - Added SEM_UNDO to semop() calls; Maurice Aubrey.
    - Fixed some bugs in the locking code; Maurice Aubrey.
    - Made calls to debug() conditional for efficency; Maurice Aubrey.
    - Fixed a signal handler in test.pl; Maurice Aubrey.

0.29  Mon Jan 12 13:49:42 EST 1998
    - $MAXVER patch for when the version semaphore reaches its limit
      and rolls back over to 0; Maurice Aubrey <maurice@hevanet.com>.
    - patch to quieten things down under -w; Doug MacEachern
      <dougm@telebusiness.co.nz>

0.28  Wed Oct 22 14:59:08 EDT 1997
    - cleaned up the way thingys are magically tied; Ben Sugars.
    - moved many subroutines so that they are auto-loaded; Ben
      Sugars.
    - updated man page; Ben Sugars.

0.26  Mon Oct 20 10:06:43 EDT 1997
    - fixed bug regarding assigning a reference to an empty
      hash to a tied variable.  Thanks to Jason Stevens.

0.25  Tue Oct  7 14:41:49 EDT 1997
    - added more checking of sem*() and shm*() return values;
      Michael Stevens and Ben Sugars.
    - added shlock and shunlock; Ben Sugars.
    - fixed bug that would cause modifications of magically
      referenced thingys to fail.  Thanks to Maurice Aubrey

0.20  Thu Aug 28 15:13:46 EDT 1997
    - added ability to magically create ties to implicitly
      referenced thingys; Ben Sugars.

0.18  Thu Aug 28 09:12:30 EDT 1997
    - fixed garbage collection bug; Ben Sugars.  Thanks to
      Michael Stevens <michael@imaginet.co.uk> for the patch.

0.17  Wed Aug 27 15:57:11 EDT 1997
    - fixed some bugs in &parse_argument_hash; Ben Sugars.

0.16  Mon Aug 11 16:10:54 EDT 1997
    - new shared memory segments now initialized with null
      values; Ben Sugars.

0.15  Fri Aug  8 15:45:29 EDT 1997
    - implemented locking using semaphores; Ben Sugars.

0.12  Thu Aug  7 14:47:42 EDT 1997
    - various bug fixes; Ben Sugars.

0.11  Wed Aug  6 10:14:49 EDT 1997
    - initial implementation of semaphores for versioning and
      caching; Ben Sugars.

0.10  Fri Aug  1 13:32:52 EDT 1997
    - can now tie both scalars and hashes of arbitrary length;
      Ben Sugars.

0.05  Wed Jul 30 15:02:31 EDT 1997
    - scalars can now be tied; Ben Sugars.

0.01  Wed Jul 30 09:00:53 1997
    - original version; created by h2xs 1.18.