Note why storing a reference as an integer in %^H is not threadsafe.
Nicholas Clark [Mon, 12 Feb 2007 10:52:28 +0000 (10:52 +0000)]
p4raw-id: //depot/perl@30221

pod/perlpragma.pod

index 12e8124..51292a8 100644 (file)
@@ -138,3 +138,10 @@ or complex structures, you should serialise them, for example with C<pack>.
 The deletion of a hash key from C<%^H> is recorded, and as ever can be
 distinguished from the existence of a key with value C<undef> with
 C<exists>.
+
+B<Don't> attempt to store references to data structures as integers which
+are retrieved via C<caller> and converted back, as this will not be threadsafe.
+Accesses would be to the structure without locking (which is not safe for
+Perl's scalars), and either the structure has to leak, or it has to be
+freed when its creating thread terminates, which may be before the optree
+referencing it is deleted, if other threads outlive it.