1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268
|
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.
|