1 Fri Jun 7 23:55:41 BST 2002 Nicholas Clark
5 Bug fix from Radu Greab <radu@netsoft.ro> (plus regression test)
6 to fix a recently introduced bug detected by Dave Rolsky.
7 Bug was that for a non threaded build, the class information was
8 being lost at freeze time on the first object with a STORABLE_freeze
9 hook. Consequentially the object was not blessed at all when thawed.
10 (The presence (or lack) of STORABLE_thaw was irrelevant; this was
11 a store-time data lost bug, caused by failure to initialize internal
13 The bug was introduced as development perl change 16442 (on
14 2002/05/07), so has been present since 2.00.
15 Patches to introduce more regression tests to reduce the chance of
16 a reoccurance of this sort of goof are always welcome.
18 Thu May 30 20:31:08 BST 2002 Nicholas Clark <nick@ccl4.org>
20 Version 2.03 Header changes on 5.6.x on Unix where IV is long long
22 5.6.x introduced the ability to have IVs as long long. However,
23 Configure still defined BYTEORDER based on the size of a long.
24 Storable uses the BYTEORDER value as part of the header, but
25 doesn't explicity store sizeof(IV) anywhere in the header.
26 Hence on 5.6.x built with IV as long long on a platform that
27 uses Configure (ie most things except VMS and Windows) headers
28 are identical for the different IV sizes, despite the files
29 containing some fields based on sizeof(IV)
31 5.8.0 is consistent; all platforms have BYTEORDER in config.h
32 based on sizeof(IV) rather than sizeof(long). This means that
33 the value of BYTEORDER will change from (say) 4321 to 87654321
34 between 5.6.1 and 5.8.0 built with the same options to Configure
35 on the same machine. This means that the Storable header will
36 differ, and the two versions will wrongly thing that they are
39 For the benefit of long term consistency, Storable now
40 implements the 5.8.0 BYTEORDER policy on 5.6.x. This means that
41 2.03 onwards default to be incompatible with 2.02 and earlier
42 (ie the large 1.0.x installed base) on the same 5.6.x perl.
44 To allow interworking, a new variable
45 $Storable::interwork_56_64bit is introduced. It defaults to
46 false. Set it to true to read and write old format files. Don't
47 use it unless you have existing stored data written with 5.6.x
48 that you couldn't otherwise read, or you need to interwork with
49 a machine running older Storable on a 5.6.x with long long IVs
50 (i.e., you probably don't need to use it).
52 Sat May 25 22:38:39 BST 2002 Nicholas Clark <nick@ccl4.org>
56 Rewrite Storable.xs so that the file header structure for write_magic
57 is built at compile time, and check_magic attempts to the header in
58 blocks rather than byte per byte. These changes make the compiled
59 extension 2.25% smaller, but are not significant enough to give a
62 Thu May 23 22:50:41 BST 2002 Nicholas Clark <nick@ccl4.org>
66 - New regression tests integer.t
67 - Add code to safely store large unsigned integers.
68 - Change code not to attempt to store large integers (ie > 32 bits)
69 in network order as 32 bits.
71 *Never* underestimate the value of a pathological test suite carefully
72 crafted with maximum malice before writing a line of real code. It
73 prevents crafty bugs from stowing away in your released code.
74 It's much less embarrassing to find them before you ship.
75 (Well, never underestimate it if you ever want to work for me)
77 Fri May 17 22:48:59 BST 2002 Nicholas Clark <nick@ccl4.org>
79 Version 2.0, binary format 2.5 (but writes format 2.4 on pre 5.7.3)
81 The perl5 porters have decided to make sure that Storable still
82 builds on pre-5.8 perls, and make the 5.8 version available on CPAN.
83 The VERSION is now 2.0, and it passes all tests on 5.005_03, 5.6.1
84 and 5.6.1 with threads. On 5.6.0 t/downgrade.t fails tests 34 and 37,
85 due to a bug in 5.6.0 - upgrade to 5.6.1.
87 Jarkko and I have collated the list of changes the perl5 porters have
88 from the perl5 Changes file:
90 - data features of upcoming perl 5.8.0 are supported: Unicode hash
91 keys (Unicode hash values have been supported since Storable 1.0.1)
92 and "restricted hashes" (readonly hashes and hash entries)
93 - a newer version of perl can now be used to serialize data which is
94 not supported in earlier perls: Storable will attempt to do the
95 right thing for as long as possible, croaking only when safe data
96 conversion simply isn't possible. Alternatively earlier perls can
97 opt to have a lossy downgrade data instead of croaking
98 - when built with perls pre 5.7.3 this Storable writes out files
99 with binary format 2.4, the same format as Storable 1.0.8 onwards.
100 This should mean that this Storable will inter-operate seamlessly
101 with any Storable 1.0.8 or newer on perls pre 5.7.3
102 - dclone() now works with empty string scalar objects
103 - retrieving of large hashes is now more efficient
104 - more routines autosplit out of the main module, so Storable should
105 load slightly more quickly
106 - better documentation
107 - the internal context objects are now freed explicitly, rather than
108 relying on thread or process exit
109 - bugs fixed in debugging trace code affecting builds made with 64 bit
111 - code tidy-ups to allow clean compiles with more warning options
112 turned on avoid problems with $@ getting corrupted on 5.005_03 if
113 Carp wasn't already loaded
114 - added &show_file_magic, so you can add to /etc/magic and teach
115 Unix's file command about Storable files
117 We plan to keep Storable on CPAN in sync with the Perl core, so
118 if you encounter bugs or other problems building or using Storable,
119 please let us know at perl5-porters@perl.org
122 Sat Dec 1 14:37:54 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
124 This is the LAST maintenance release of the Storable module.
125 Indeed, Storable is now part of perl 5.8, and will be maintained
126 as part of Perl. The CPAN module will remain available there
127 for people running pre-5.8 perls.
129 Avoid requiring Fcntl upfront, useful to embedded runtimes.
130 Use an eval {} for testing, instead of making Storable.pm
131 simply fail its compilation in the BEGIN block.
133 store_fd() will now correctly autoflush file if needed.
135 Tue Aug 28 23:53:20 MEST 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
137 Fixed truncation race with lock_retrieve() in lock_store().
138 The file has to be truncated only once the exclusive lock is held.
140 Removed spurious debugging messages in .xs file.
142 Sun Jul 1 13:27:32 MEST 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
144 Systematically use "=over 4" for POD linters.
145 Apparently, POD linters are much stricter than would
146 otherwise be needed, but that's OK.
148 Fixed memory corruption on croaks during thaw(). Thanks
149 to Claudio Garcia for reproducing this bug and providing the
150 code to exercise it. Added test cases for this bug, adapted
153 Made code compile cleanly with -Wall (from Jarkko Hietaniemi).
155 Changed tagnum and classnum from I32 to IV in context. Also
158 Thu Mar 15 01:22:32 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
160 Last version was wrongly compiling with assertions on, due
161 to an edit glitch. That did not cause any problem (apart from
162 a slight performance loss) excepted on Win* platforms, where the
163 assertion code does not compile.
165 Sat Feb 17 13:37:37 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
169 Forgot to increase version number at previous patch (there were
170 two of them, which is why we jump from 1.0.8 to 1.0.10).
172 Sat Feb 17 13:35:00 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
174 Version 1.0.8, binary format 2.4.
176 Fixed incorrect error message.
178 Now bless objects ASAP at retrieve time, which is meant to fix
181 * Indirect references to overloaded object were not able to
182 restore overloading if the object was not blessed yet,
183 which was possible since blessing occurred only after the
186 * Storable hooks asking for serialization of blessed ref could
187 get un-blessed refs at retrieval time, for the very same
190 The fix implemented here was suggested by Nick Ing-Simmons.
192 Added support for blessed ref to tied structures. This is the
193 cause for the binary format change.
195 Added EBCDIC version of the compatibility test with 0.6.11,
198 Added tests for the new features, and to make sure the bugs they
199 are meant to fix are indeed fixed.
201 Wed Jan 3 10:43:18 MET 2001 Raphael Manfredi <Raphael_Manfredi@pobox.com>
203 Removed spurious 'clean' entry in Makefile.PL.
205 Added CAN_FLOCK to determine whether we can flock() or not,
206 by inspecting Perl's configuration parameters, as determined
209 Trace offending package when overloading cannot be restored
212 Made context cleanup safer to avoid dup freeing, mostly in the
213 presence of repeated exceptions during store/retrieve (which can
214 cause memory leaks anyway, so it's just additional safety, not a
217 Sun Nov 5 18:23:48 MET 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
221 Fixed severe "object lost" bug for STORABLE_freeze returns,
222 when refs to lexicals, taken within the hook, were to be
223 serialized by Storable. Enhanced the t/recurse.t test to
224 stress hook a little more with refs to lexicals.
226 Thu Oct 26 19:14:38 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
230 Documented that store() and retrieve() can return undef.
231 That is, the error reporting is not always made via exceptions,
232 as the paragraph on error reporting was implying.
234 Auto requires module of blessed ref when STORABLE_thaw misses.
235 When the Storable engine looks for the STORABLE_thaw hook and
236 does not find it, it now tries to require the package into which
237 the blessed reference is.
239 Just check $^O, in t/lock.t: there's no need to pull the whole
240 Config module for that.
242 Mon Oct 23 20:03:49 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
246 Protected calls to flock() for DOS platform: apparently, the
247 flock/fcnlt emulation is reported to be broken on that
250 Added logcarp emulation if they don't have Log::Agent, since
251 we now use it to carp when lock_store/lock_retrieve is used
254 Fri Sep 29 21:52:29 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
258 Avoid using "tainted" and "dirty" since Perl remaps them via
259 cpp (i.e. #define). This is deeply harmful when threading
260 is enabled. This concerned both the context structure and
261 local variable and argument names. Brrr..., scary!
263 Thu Sep 28 23:46:39 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
267 Fixed spelling in README.
269 Added lock_store, lock_nstore, and lock_retrieve (advisory locking)
270 after a proposal from Erik Haugan <erik@solbors.no>.
272 Perls before 5.004_04 lack newSVpvn, added remapping in XS.
274 Fixed stupid typo in the t/utf8.t test.
276 Sun Sep 17 18:51:10 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
278 Version 1.0.1, binary format 2.3.
280 Documented that doubles are stored stringified by nstore().
282 Added Salvador Ortiz Garcia in CREDITS section, He identified
283 a bug in the store hooks and proposed the right fix: the class
284 id was allocated too soon. His bug case was also added to
285 the regression test suite.
287 Now only taint retrieved data when source was tainted. A bug
288 discovered by Marc Lehmann.
290 Added support for UTF-8 strings, a contribution of Marc Lehmann.
291 This is normally only activated in post-5.6 perls.
293 Thu Aug 31 23:06:06 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
295 First official release Storable 1.0, for inclusion in perl 5.7.0.
296 The license scheme is now compatible with Perl's.
298 Thu Aug 24 01:02:02 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
300 ANSI-fied most of the code, preparing for Perl core integration.
301 The next version of Storable will be 0.8, and will be integrated
302 into the Perl core (development branch).
304 Dispatch tables were moved upfront to relieve some compilers,
305 especially on AIX and Windows platforms.
307 Merged 64-bit fixes from perl5-porters.
309 Mon Aug 14 09:22:04 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
311 Added a refcnt dec in retrieve_tied_key(): sv_magic() increases
312 the refcnt on the mg_ptr as well.
314 Removed spurious dependency to Devel::Peek, which was used for
315 testing only in t/tied_items.t. Thanks to Conrad Heiney
316 <conrad@fringehead.org> for spotting it first.
318 Sun Aug 13 22:12:59 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
320 Marc Lehmann kindly contributed code to add overloading support
321 and to handle references to tied variables.
323 Rewrote leading blurb about compatibility to make it clearer what
324 "backward compatibility" is about: when I say 0.7 is backward
325 compatible with 0.6, it means the revision 0.7 can read files
328 Mention new Clone(3) extension in SEE ALSO.
330 Was wrongly optimizing for "undef" values in hashes by not
331 fully recursing: as a result, tied "undef" values were incorrectly
334 Sun Jul 30 12:59:17 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
336 First revision of Storable 0.7.
338 The serializing format is new, known as version 2.0. It is fully
339 backward compatible with 0.6. Earlier formats are deprecated and
340 have not even been tested: next version will drop pre-0.6 format.
342 Changes since 0.6@11:
344 - Moved interface to the "beta" status. Some tiny parts are still
345 subject to change, but nothing important enough to warrant an "alpha"
348 - Slightly reduced the size of the Storable image by factorizing
349 object class names and removing final object storage notification due
350 to a redesign of the blessed object storing.
352 - Classes can now redefine how they wish their instances to be serialized
353 and/or deep cloned. Serializing hooks are written in Perl code.
355 - The engine is now fully re-entrant.
357 Sun Apr 2 23:47:50 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
359 Added provision to detect more recent binary formats, since
360 the new upcoming Storable-0.7 will use a different format.
361 In order to prevent attempting the de-serialization of newer
362 formats by older versions, I'm adding this now to the 0.6 series.
364 I'm expecting this revision to be the last of the 0.6 series.
365 Unless it does not work with perl 5.6, which I don't use yet,
366 and therefore against which I cannot test.
368 Wed Mar 29 19:55:21 MEST 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
370 Added note about format incompatibilities with old versions
371 (i.e. pre 0.5@9 formats, which cannot be understood as there
372 was no versionning information in the file by then).
374 Protect all $@ variables when eval {} used, to avoid corrupting
375 it when store/retrieve is called within an exception handler.
377 Mistakenly included "patchlevel.h" instead of <patchlevel.h>,
378 preventing Perl's patchlevel from being included, which is
379 needed starting from 5.6.
381 Tue May 12 09:15:15 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
383 Fixed shared "undef" bug in hashes, which did not remain shared
384 through store/retrieve.
386 Thu Feb 10 19:48:16 MET 2000 Raphael Manfredi <Raphael_Manfredi@pobox.com>
388 added last_op_in_netorder() predicate
389 documented last_op_in_netorder()
390 added tests for the new last_op_in_netorder() predicate
392 Wed Oct 20 19:07:36 MEST 1999 Raphael Manfredi <Raphael_Manfredi@pobox.com>
394 Forgot to update VERSION
396 Tue Oct 19 21:25:02 MEST 1999 Raphael Manfredi <Raphael_Manfredi@pobox.com>
398 Added mention of japanese translation for the manual page.
400 Fixed typo in macro that made threaded code not compilable,
401 especially on Win32 platforms.
403 Changed detection of older perls (pre-5.005) by testing PATCHLEVEL
404 directly instead of relying on internal symbols.
406 Tue Sep 14 22:13:28 MEST 1999 Raphael Manfredi <Raphael_Manfredi@pobox.com>
408 Integrated "thread-safe" patch from Murray Nesbitt.
409 Note that this may not be very efficient for threaded code,
410 see comment in the code.
412 Try to avoid compilation warning on 64-bit CPUs. Can't test it,
413 since I don't have access to such machines.
415 Mon Jul 12 14:37:19 METDST 1999 Raphael Manfredi <Raphael_Manfredi@pobox.com>
417 changed my e-mail to pobox.
419 mentionned it is not thread-safe.
421 updated version number.
423 uses new internal PL_* naming convention.
425 Fri Jul 3 13:38:16 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
427 Updated benchmark figures due to recent optimizations done in
428 store(): tagnums are now stored as-is in the hash table, so
429 no surrounding SV is created. And the "shared keys" mode for
430 hash table was turned off.
432 Fixed backward compatibility (wrt 0.5@9) for retrieval of
433 blessed refs. That old version did something wrong, but the
434 bugfix prevented correct retrieval of the old format.
436 Mon Jun 22 11:00:48 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
438 Changed benchmark figures.
440 Adjust refcnt of tied objects after calling sv_magic() to avoid
441 memory leaks. Contributed by Jeff Gresham.
443 Fri Jun 12 11:50:04 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
445 Added workaround for persistent LVALUE-ness in perl5.004. All
446 scalars tagged as being an lvalue are handled as if they were
447 not an lvalue at all. Added test for that LVALUE bug workaround.
449 Now handles Perl immortal scalars explicitely, by storing &sv_yes
450 as such, explicitely.
452 Retrieval of non-immortal undef cannot be shared. Previous
453 version was over-optimizing by not creating a separate SV for
454 all undefined scalars seen.
456 Thu Jun 4 17:21:51 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
458 Baseline for Storable-0.6@0.
460 This version introduces a binary incompatibility in the generated
461 binary image, which is more compact than older ones by approximatively
462 15%, depending on the exact degree of sharing in your structures.
464 The good news is that your older images can still be retrieved with
465 this version, i.e. backward compatibility is preserved. This version
466 of Storable can only generate new binaries however.
468 Another good news is that the retrieval of data structure is
469 significantly quicker than before, because a Perl array is used
470 instead of a hash table to keep track of retrieved objects, and
471 also because the image being smaller, less I/O function calls are
474 Tue May 12 09:15:15 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
476 Version number now got from Storable.pm directly.
478 Fixed overzealous sv_type() optimization, which would make
479 Storable fail when faced with an "upgraded" SV to the PVIV
480 or PVNV kind containing a reference.
482 Thu Apr 30 15:11:30 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
484 Extended the SYNOPSIS section to give quick overview of the
485 routines and their signature.
487 Optimized sv_type() to avoid flags checking when not needed, i.e.
488 when their type makes it impossible for them to be refs or tied.
489 This slightly increases throughput by a few percents when refs
490 and tied variables are marginal occurrences in your data.
492 Stubs for XS now use OutputStream and InputStream file types to
493 make it work when the given file is actually a socket. Perl
494 makes a distinction for sockets in its internal I/O structures
495 by having both a read and a write structure, whereas plain files
498 Tue Jun 3 09:41:33 METDST 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
500 Thanks to a contribution from Benjamin A. Holzman, Storable is now
501 able to correctly serialize tied SVs, i.e. tied arrays, hashes
504 Thu Apr 9 18:07:51 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
506 I said SvPOK() had changed to SvPOKp(), but that was a lie...
508 Wed Apr 8 13:14:29 METDST 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
510 Wrote sizeof(SV *) instead of sizeof(I32) when portable, which
511 in effect mangled the object tags and prevented portability
512 accross 32/64 bit architectures!
514 Wed Mar 25 14:57:02 MET 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
516 Added code example for store_fd() and retrieve_fd() in the
517 man page, to emphasize that file descriptors must be passed as
518 globs, not as plain strings.
520 Cannot use SV addresses as tag when using nstore() on LP64. This
521 was the cause of problems when creating a storable image on an
522 LP64 machine and retrieving it on an ILP32 system, which is
523 exactly what nstore() is meant for...
525 However, we continue to use SV addresses as tags for plain store(),
526 because benchamarking shows that it saves up to 8% of the store
527 time, and store() is meant to be fast at the expense of lack
530 This means there will be approximately an 8% degradation of
531 performance for nstore(), but it's now working as expected.
532 That cost may vary on your machine of course, since it is
533 solely caused by the memory allocation overhead used to create
534 unique SV tags for each distinct stored SV.
536 Tue Jan 20 09:21:53 MET 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
538 Don't use any '_' in version number.
540 Tue Jan 13 17:51:50 MET 1998 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
542 Updated version number.
544 added binmode() calls for systems where it matters.
546 Be sure to pass globs, not plain file strings, to C routines,
547 so that Storable can be used under the Perl debugger.
549 Wed Nov 5 10:53:22 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
551 Fix memory leaks on seen hash table and returned SV refs.
553 Storable did not work properly when tainting enabled.
555 Fixed "Allocation too large" messages in freeze/thaw and added.
556 proper regression test in t/freeze.t.
558 Tue Jun 3 09:41:33 METDST 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
560 Updated version number
562 Added freeze/thaw interface and dclone.
564 Fri May 16 10:45:47 METDST 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
566 Forgot that AutoLoader does not export its own AUTOLOAD.
569 use AutoLoader 'AUTOLOAD';
571 but that would not be backward compatible. So the export is
574 Tue Mar 25 11:21:32 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
576 Empty scalar strings are now "defined" at retrieval time.
578 New test to ensure an empty string is defined when retrieved.
580 Thu Feb 27 16:32:44 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
582 Updated version number
584 Declare VERSION as being used
586 Fixed a typo in the PerlIO_putc remapping.
587 PerlIO_read and perlIO_write inverted size/nb_items.
588 (only relevant for pre-perl5.004 versions)
590 Thu Feb 27 15:58:31 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
592 Updated version number
594 Added VERSION identification
596 Allow build with perl5.003, which is ante perlIO time
598 Mon Jan 13 17:53:18 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
602 Wed Jan 22 15:19:56 MET 1997 Raphael Manfredi <Raphael_Manfredi@grenoble.hp.com>
604 Updated version number in Makefile.PL.
606 Added "thanks to" section to README.
608 Documented new forgive_me variable.
612 Added forgive_me support to allow store() of data structures
613 containing non-storable items like CODE refs.