X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperlxs.pod;h=facfcf91ab8a144d47b78ebfc69115d5b584a284;hb=e056e17d86381d9e7aef09f26f070da3695a94b4;hp=b3ba08f56a7f3ed431a50682964ae52314aaadc4;hpb=85ce96a160e902929b94338ada20cf46b265d595;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perlxs.pod b/pod/perlxs.pod index b3ba08f..facfcf9 100644 --- a/pod/perlxs.pod +++ b/pod/perlxs.pod @@ -554,7 +554,7 @@ exception happens if this C<;> terminates the line, then this C<;> is quietly ignored. The following code demonstrates how to supply initialization code for -function parameters. The initialization code is eval'd within double +function parameters. The initialization code is eval'ed within double quotes by the compiler before it is added to the output so anything which should be interpreted literally [mainly C<$>, C<@>, or C<\\>] must be protected with backslashes. The variables $var, $arg, @@ -1313,7 +1313,7 @@ this: In this case, the function will overload both of the three way comparison operators. For all overload operations using non-alpha -characters, you must type the parameter without quoting, seperating +characters, you must type the parameter without quoting, separating multiple overloads with whitespace. Note that "" (the stringify overload) should be entered as \"\" (i.e. escaped). @@ -1391,7 +1391,7 @@ C with offsets being C, C, C, C. Then one can use #define XSINTERFACE_FUNC_BYOFFSET(ret,cv,f) \ - ((XSINTERFACE_CVT(ret,))fp[CvXSUBANY(cv).any_i32]) + ((XSINTERFACE_CVT_ANON(ret))fp[CvXSUBANY(cv).any_i32]) #define XSINTERFACE_FUNC_BYOFFSET_set(cv,f) \ CvXSUBANY(cv).any_i32 = CAT2( f, _off ) @@ -1926,7 +1926,6 @@ Below is an example module that makes use of the macros. CODE: MY_CXT_CLONE; - B =over 5 @@ -2008,13 +2007,41 @@ comma, i.e. C<_aMY_CXT>, C, C<_pMY_CXT> and C. =item MY_CXT_CLONE By default, when a new interpreter is created as a copy of an existing one -(eg via C<new()>>), both interpreters share the same physical +(eg via C<create()>>), both interpreters share the same physical my_cxt_t structure. Calling C (typically via the package's C function), causes a byte-for-byte copy of the structure to be taken, and any future dMY_CXT will cause the copy to be accessed instead. +=item MY_CXT_INIT_INTERP(my_perl) + +=item dMY_CXT_INTERP(my_perl) + +These are versions of the macros which take an explicit interpreter as an +argument. + =back +Note that these macros will only work together within the I source +file; that is, a dMY_CTX in one source file will access a different structure +than a dMY_CTX in another source file. + +=head2 Thread-aware system interfaces + +Starting from Perl 5.8, in C/C++ level Perl knows how to wrap +system/library interfaces that have thread-aware versions +(e.g. getpwent_r()) into frontend macros (e.g. getpwent()) that +correctly handle the multithreaded interaction with the Perl +interpreter. This will happen transparently, the only thing +you need to do is to instantiate a Perl interpreter. + +This wrapping happens always when compiling Perl core source +(PERL_CORE is defined) or the Perl core extensions (PERL_EXT is +defined). When compiling XS code outside of Perl core the wrapping +does not take place. Note, however, that intermixing the _r-forms +(as Perl compiled for multithreaded operation will do) and the _r-less +forms is neither well-defined (inconsistent results, data corruption, +or even crashes become more likely), nor is it very portable. + =head1 EXAMPLES File C: Interface to some ONC+ RPC bind library functions.