]> git.vpit.fr Git - perl/modules/Lexical-Types.git/commitdiff
Introduce LT_FORKSAFE
authorVincent Pit <vince@profvince.com>
Mon, 3 Jan 2011 14:25:13 +0000 (15:25 +0100)
committerVincent Pit <vince@profvince.com>
Mon, 3 Jan 2011 14:25:13 +0000 (15:25 +0100)
Makefile.PL
Types.xs
lib/Lexical/Types.pm

index 2f43918b7e8765f6dce8d4e9cb1a4127171fe71c..8a8a746f38c049355303b1e5383b25a95998466c 100644 (file)
@@ -11,6 +11,11 @@ if ($^O eq 'MSWin32' && $^V lt v5.9.0) {
  push @DEFINES, '-DLT_MULTIPLICITY=0';
 }
 
+# Fork emulation got "fixed" in 5.10.1
+if ($^O eq 'MSWin32' && $^V lt v5.10.1) {
+ push @DEFINES, '-DLT_FORKSAFE=0';
+}
+
 @DEFINES = (DEFINE => join ' ', @DEFINES) if @DEFINES;
 
 my $dist = 'Lexical-Types';
index 27d5d435dde1c9650d9af67167d4325dba9f0eca..cf005cd34fd23c2e14f343950597da42925ef465 100644 (file)
--- a/Types.xs
+++ b/Types.xs
 
 /* ... Thread safety and multiplicity ...................................... */
 
+/* Safe unless stated otherwise in Makefile.PL */
+#ifndef LT_FORKSAFE
+# define LT_FORKSAFE 1
+#endif
+
 #ifndef LT_MULTIPLICITY
 # if defined(MULTIPLICITY) || defined(PERL_IMPLICIT_CONTEXT)
 #  define LT_MULTIPLICITY 1
@@ -833,6 +838,7 @@ BOOT:
 
   stash = gv_stashpvn(__PACKAGE__, __PACKAGE_LEN__, 1);
   newCONSTSUB(stash, "LT_THREADSAFE", newSVuv(LT_THREADSAFE));
+  newCONSTSUB(stash, "LT_FORKSAFE",   newSVuv(LT_FORKSAFE));
  }
 
  lt_setup();
index 026596f7ca9c59dcbf27a158e68f8d70d5424f48..ab54c250121ed2beb7570ade4b5580de5a4f3af7 100644 (file)
@@ -250,6 +250,11 @@ If you prefer to use constants rather than creating empty packages, you can repl
 
 True iff the module could have been built with thread-safety features enabled.
 
+=head2 C<LT_FORKSAFE>
+
+True iff this module could have been built with fork-safety features enabled.
+This will always be true except on Windows where it's false for perl 5.10.0 and below .
+
 =head1 CAVEATS
 
 The restrictions on the type (being either a defined package name or a constant) apply even if you use the C<'as'> option to redirect to another package, and are unlikely to find a workaround as this happens deep inside the lexer - far from the reach of an extension.