1=head1 NAME 2 3perlcall - Perl calling conventions from C 4 5=head1 DESCRIPTION 6 7The purpose of this document is to show you how to call Perl subroutines 8directly from C, i.e., how to write I<callbacks>. 9 10Apart from discussing the C interface provided by Perl for writing 11callbacks the document uses a series of examples to show how the 12interface actually works in practice. In addition some techniques for 13coding callbacks are covered. 14 15Examples where callbacks are necessary include 16 17=over 5 18 19=item * An Error Handler 20 21You have created an XSUB interface to an application's C API. 22 23A fairly common feature in applications is to allow you to define a C 24function that will be called whenever something nasty occurs. What we 25would like is to be able to specify a Perl subroutine that will be 26called instead. 27 28=item * An Event Driven Program 29 30The classic example of where callbacks are used is when writing an 31event driven program like for an X windows application. In this case 32you register functions to be called whenever specific events occur, 33e.g., a mouse button is pressed, the cursor moves into a window or a 34menu item is selected. 35 36=back 37 38Although the techniques described here are applicable when embedding 39Perl in a C program, this is not the primary goal of this document. 40There are other details that must be considered and are specific to 41embedding Perl. For details on embedding Perl in C refer to 42L<perlembed>. 43 44Before you launch yourself head first into the rest of this document, 45it would be a good idea to have read the following two documents - 46L<perlxs> and L<perlguts>. 47 48=head1 THE CALL_ FUNCTIONS 49 50Although this stuff is easier to explain using examples, you first need 51be aware of a few important definitions. 52 53Perl has a number of C functions that allow you to call Perl 54subroutines. They are 55 56 I32 call_sv(SV* sv, I32 flags) ; 57 I32 call_pv(char *subname, I32 flags) ; 58 I32 call_method(char *methname, I32 flags) ; 59 I32 call_argv(char *subname, I32 flags, register char **argv) ; 60 61The key function is I<call_sv>. All the other functions are 62fairly simple wrappers which make it easier to call Perl subroutines in 63special cases. At the end of the day they will all call I<call_sv> 64to invoke the Perl subroutine. 65 66All the I<call_*> functions have a C<flags> parameter which is 67used to pass a bit mask of options to Perl. This bit mask operates 68identically for each of the functions. The settings available in the 69bit mask are discussed in L<FLAG VALUES>. 70 71Each of the functions will now be discussed in turn. 72 73=over 5 74 75=item call_sv 76 77I<call_sv> takes two parameters, the first, C<sv>, is an SV*. 78This allows you to specify the Perl subroutine to be called either as a 79C string (which has first been converted to an SV) or a reference to a 80subroutine. The section, I<Using call_sv>, shows how you can make 81use of I<call_sv>. 82 83=item call_pv 84 85The function, I<call_pv>, is similar to I<call_sv> except it 86expects its first parameter to be a C char* which identifies the Perl 87subroutine you want to call, e.g., C<call_pv("fred", 0)>. If the 88subroutine you want to call is in another package, just include the 89package name in the string, e.g., C<"pkg::fred">. 90 91=item call_method 92 93The function I<call_method> is used to call a method from a Perl 94class. The parameter C<methname> corresponds to the name of the method 95to be called. Note that the class that the method belongs to is passed 96on the Perl stack rather than in the parameter list. This class can be 97either the name of the class (for a static method) or a reference to an 98object (for a virtual method). See L<perlobj> for more information on 99static and virtual methods and L<Using call_method> for an example 100of using I<call_method>. 101 102=item call_argv 103 104I<call_argv> calls the Perl subroutine specified by the C string 105stored in the C<subname> parameter. It also takes the usual C<flags> 106parameter. The final parameter, C<argv>, consists of a NULL terminated 107list of C strings to be passed as parameters to the Perl subroutine. 108See I<Using call_argv>. 109 110=back 111 112All the functions return an integer. This is a count of the number of 113items returned by the Perl subroutine. The actual items returned by the 114subroutine are stored on the Perl stack. 115 116As a general rule you should I<always> check the return value from 117these functions. Even if you are expecting only a particular number of 118values to be returned from the Perl subroutine, there is nothing to 119stop someone from doing something unexpected--don't say you haven't 120been warned. 121 122=head1 FLAG VALUES 123 124The C<flags> parameter in all the I<call_*> functions is a bit mask 125which can consist of any combination of the symbols defined below, 126OR'ed together. 127 128 129=head2 G_VOID 130 131Calls the Perl subroutine in a void context. 132 133This flag has 2 effects: 134 135=over 5 136 137=item 1. 138 139It indicates to the subroutine being called that it is executing in 140a void context (if it executes I<wantarray> the result will be the 141undefined value). 142 143=item 2. 144 145It ensures that nothing is actually returned from the subroutine. 146 147=back 148 149The value returned by the I<call_*> function indicates how many 150items have been returned by the Perl subroutine - in this case it will 151be 0. 152 153 154=head2 G_SCALAR 155 156Calls the Perl subroutine in a scalar context. This is the default 157context flag setting for all the I<call_*> functions. 158 159This flag has 2 effects: 160 161=over 5 162 163=item 1. 164 165It indicates to the subroutine being called that it is executing in a 166scalar context (if it executes I<wantarray> the result will be false). 167 168=item 2. 169 170It ensures that only a scalar is actually returned from the subroutine. 171The subroutine can, of course, ignore the I<wantarray> and return a 172list anyway. If so, then only the last element of the list will be 173returned. 174 175=back 176 177The value returned by the I<call_*> function indicates how many 178items have been returned by the Perl subroutine - in this case it will 179be either 0 or 1. 180 181If 0, then you have specified the G_DISCARD flag. 182 183If 1, then the item actually returned by the Perl subroutine will be 184stored on the Perl stack - the section I<Returning a Scalar> shows how 185to access this value on the stack. Remember that regardless of how 186many items the Perl subroutine returns, only the last one will be 187accessible from the stack - think of the case where only one value is 188returned as being a list with only one element. Any other items that 189were returned will not exist by the time control returns from the 190I<call_*> function. The section I<Returning a list in a scalar 191context> shows an example of this behavior. 192 193 194=head2 G_ARRAY 195 196Calls the Perl subroutine in a list context. 197 198As with G_SCALAR, this flag has 2 effects: 199 200=over 5 201 202=item 1. 203 204It indicates to the subroutine being called that it is executing in a 205list context (if it executes I<wantarray> the result will be true). 206 207 208=item 2. 209 210It ensures that all items returned from the subroutine will be 211accessible when control returns from the I<call_*> function. 212 213=back 214 215The value returned by the I<call_*> function indicates how many 216items have been returned by the Perl subroutine. 217 218If 0, then you have specified the G_DISCARD flag. 219 220If not 0, then it will be a count of the number of items returned by 221the subroutine. These items will be stored on the Perl stack. The 222section I<Returning a list of values> gives an example of using the 223G_ARRAY flag and the mechanics of accessing the returned items from the 224Perl stack. 225 226=head2 G_DISCARD 227 228By default, the I<call_*> functions place the items returned from 229by the Perl subroutine on the stack. If you are not interested in 230these items, then setting this flag will make Perl get rid of them 231automatically for you. Note that it is still possible to indicate a 232context to the Perl subroutine by using either G_SCALAR or G_ARRAY. 233 234If you do not set this flag then it is I<very> important that you make 235sure that any temporaries (i.e., parameters passed to the Perl 236subroutine and values returned from the subroutine) are disposed of 237yourself. The section I<Returning a Scalar> gives details of how to 238dispose of these temporaries explicitly and the section I<Using Perl to 239dispose of temporaries> discusses the specific circumstances where you 240can ignore the problem and let Perl deal with it for you. 241 242=head2 G_NOARGS 243 244Whenever a Perl subroutine is called using one of the I<call_*> 245functions, it is assumed by default that parameters are to be passed to 246the subroutine. If you are not passing any parameters to the Perl 247subroutine, you can save a bit of time by setting this flag. It has 248the effect of not creating the C<@_> array for the Perl subroutine. 249 250Although the functionality provided by this flag may seem 251straightforward, it should be used only if there is a good reason to do 252so. The reason for being cautious is that even if you have specified 253the G_NOARGS flag, it is still possible for the Perl subroutine that 254has been called to think that you have passed it parameters. 255 256In fact, what can happen is that the Perl subroutine you have called 257can access the C<@_> array from a previous Perl subroutine. This will 258occur when the code that is executing the I<call_*> function has 259itself been called from another Perl subroutine. The code below 260illustrates this 261 262 sub fred 263 { print "@_\n" } 264 265 sub joe 266 { &fred } 267 268 &joe(1,2,3) ; 269 270This will print 271 272 1 2 3 273 274What has happened is that C<fred> accesses the C<@_> array which 275belongs to C<joe>. 276 277 278=head2 G_EVAL 279 280It is possible for the Perl subroutine you are calling to terminate 281abnormally, e.g., by calling I<die> explicitly or by not actually 282existing. By default, when either of these events occurs, the 283process will terminate immediately. If you want to trap this 284type of event, specify the G_EVAL flag. It will put an I<eval { }> 285around the subroutine call. 286 287Whenever control returns from the I<call_*> function you need to 288check the C<$@> variable as you would in a normal Perl script. 289 290The value returned from the I<call_*> function is dependent on 291what other flags have been specified and whether an error has 292occurred. Here are all the different cases that can occur: 293 294=over 5 295 296=item * 297 298If the I<call_*> function returns normally, then the value 299returned is as specified in the previous sections. 300 301=item * 302 303If G_DISCARD is specified, the return value will always be 0. 304 305=item * 306 307If G_ARRAY is specified I<and> an error has occurred, the return value 308will always be 0. 309 310=item * 311 312If G_SCALAR is specified I<and> an error has occurred, the return value 313will be 1 and the value on the top of the stack will be I<undef>. This 314means that if you have already detected the error by checking C<$@> and 315you want the program to continue, you must remember to pop the I<undef> 316from the stack. 317 318=back 319 320See I<Using G_EVAL> for details on using G_EVAL. 321 322=head2 G_KEEPERR 323 324You may have noticed that using the G_EVAL flag described above will 325B<always> clear the C<$@> variable and set it to a string describing 326the error iff there was an error in the called code. This unqualified 327resetting of C<$@> can be problematic in the reliable identification of 328errors using the C<eval {}> mechanism, because the possibility exists 329that perl will call other code (end of block processing code, for 330example) between the time the error causes C<$@> to be set within 331C<eval {}>, and the subsequent statement which checks for the value of 332C<$@> gets executed in the user's script. 333 334This scenario will mostly be applicable to code that is meant to be 335called from within destructors, asynchronous callbacks, signal 336handlers, C<__DIE__> or C<__WARN__> hooks, and C<tie> functions. In 337such situations, you will not want to clear C<$@> at all, but simply to 338append any new errors to any existing value of C<$@>. 339 340The G_KEEPERR flag is meant to be used in conjunction with G_EVAL in 341I<call_*> functions that are used to implement such code. This flag 342has no effect when G_EVAL is not used. 343 344When G_KEEPERR is used, any errors in the called code will be prefixed 345with the string "\t(in cleanup)", and appended to the current value 346of C<$@>. 347 348The G_KEEPERR flag was introduced in Perl version 5.002. 349 350See I<Using G_KEEPERR> for an example of a situation that warrants the 351use of this flag. 352 353=head2 Determining the Context 354 355As mentioned above, you can determine the context of the currently 356executing subroutine in Perl with I<wantarray>. The equivalent test 357can be made in C by using the C<GIMME_V> macro, which returns 358C<G_ARRAY> if you have been called in a list context, C<G_SCALAR> if 359in a scalar context, or C<G_VOID> if in a void context (i.e. the 360return value will not be used). An older version of this macro is 361called C<GIMME>; in a void context it returns C<G_SCALAR> instead of 362C<G_VOID>. An example of using the C<GIMME_V> macro is shown in 363section I<Using GIMME_V>. 364 365=head1 KNOWN PROBLEMS 366 367This section outlines all known problems that exist in the 368I<call_*> functions. 369 370=over 5 371 372=item 1. 373 374If you are intending to make use of both the G_EVAL and G_SCALAR flags 375in your code, use a version of Perl greater than 5.000. There is a bug 376in version 5.000 of Perl which means that the combination of these two 377flags will not work as described in the section I<FLAG VALUES>. 378 379Specifically, if the two flags are used when calling a subroutine and 380that subroutine does not call I<die>, the value returned by 381I<call_*> will be wrong. 382 383 384=item 2. 385 386In Perl 5.000 and 5.001 there is a problem with using I<call_*> if 387the Perl sub you are calling attempts to trap a I<die>. 388 389The symptom of this problem is that the called Perl sub will continue 390to completion, but whenever it attempts to pass control back to the 391XSUB, the program will immediately terminate. 392 393For example, say you want to call this Perl sub 394 395 sub fred 396 { 397 eval { die "Fatal Error" ; } 398 print "Trapped error: $@\n" 399 if $@ ; 400 } 401 402via this XSUB 403 404 void 405 Call_fred() 406 CODE: 407 PUSHMARK(SP) ; 408 call_pv("fred", G_DISCARD|G_NOARGS) ; 409 fprintf(stderr, "back in Call_fred\n") ; 410 411When C<Call_fred> is executed it will print 412 413 Trapped error: Fatal Error 414 415As control never returns to C<Call_fred>, the C<"back in Call_fred"> 416string will not get printed. 417 418To work around this problem, you can either upgrade to Perl 5.002 or 419higher, or use the G_EVAL flag with I<call_*> as shown below 420 421 void 422 Call_fred() 423 CODE: 424 PUSHMARK(SP) ; 425 call_pv("fred", G_EVAL|G_DISCARD|G_NOARGS) ; 426 fprintf(stderr, "back in Call_fred\n") ; 427 428=back 429 430 431 432=head1 EXAMPLES 433 434Enough of the definition talk, let's have a few examples. 435 436Perl provides many macros to assist in accessing the Perl stack. 437Wherever possible, these macros should always be used when interfacing 438to Perl internals. We hope this should make the code less vulnerable 439to any changes made to Perl in the future. 440 441Another point worth noting is that in the first series of examples I 442have made use of only the I<call_pv> function. This has been done 443to keep the code simpler and ease you into the topic. Wherever 444possible, if the choice is between using I<call_pv> and 445I<call_sv>, you should always try to use I<call_sv>. See 446I<Using call_sv> for details. 447 448=head2 No Parameters, Nothing returned 449 450This first trivial example will call a Perl subroutine, I<PrintUID>, to 451print out the UID of the process. 452 453 sub PrintUID 454 { 455 print "UID is $<\n" ; 456 } 457 458and here is a C function to call it 459 460 static void 461 call_PrintUID() 462 { 463 dSP ; 464 465 PUSHMARK(SP) ; 466 call_pv("PrintUID", G_DISCARD|G_NOARGS) ; 467 } 468 469Simple, eh. 470 471A few points to note about this example. 472 473=over 5 474 475=item 1. 476 477Ignore C<dSP> and C<PUSHMARK(SP)> for now. They will be discussed in 478the next example. 479 480=item 2. 481 482We aren't passing any parameters to I<PrintUID> so G_NOARGS can be 483specified. 484 485=item 3. 486 487We aren't interested in anything returned from I<PrintUID>, so 488G_DISCARD is specified. Even if I<PrintUID> was changed to 489return some value(s), having specified G_DISCARD will mean that they 490will be wiped by the time control returns from I<call_pv>. 491 492=item 4. 493 494As I<call_pv> is being used, the Perl subroutine is specified as a 495C string. In this case the subroutine name has been 'hard-wired' into the 496code. 497 498=item 5. 499 500Because we specified G_DISCARD, it is not necessary to check the value 501returned from I<call_pv>. It will always be 0. 502 503=back 504 505=head2 Passing Parameters 506 507Now let's make a slightly more complex example. This time we want to 508call a Perl subroutine, C<LeftString>, which will take 2 parameters--a 509string ($s) and an integer ($n). The subroutine will simply 510print the first $n characters of the string. 511 512So the Perl subroutine would look like this 513 514 sub LeftString 515 { 516 my($s, $n) = @_ ; 517 print substr($s, 0, $n), "\n" ; 518 } 519 520The C function required to call I<LeftString> would look like this. 521 522 static void 523 call_LeftString(a, b) 524 char * a ; 525 int b ; 526 { 527 dSP ; 528 529 ENTER ; 530 SAVETMPS ; 531 532 PUSHMARK(SP) ; 533 XPUSHs(sv_2mortal(newSVpv(a, 0))); 534 XPUSHs(sv_2mortal(newSViv(b))); 535 PUTBACK ; 536 537 call_pv("LeftString", G_DISCARD); 538 539 FREETMPS ; 540 LEAVE ; 541 } 542 543Here are a few notes on the C function I<call_LeftString>. 544 545=over 5 546 547=item 1. 548 549Parameters are passed to the Perl subroutine using the Perl stack. 550This is the purpose of the code beginning with the line C<dSP> and 551ending with the line C<PUTBACK>. The C<dSP> declares a local copy 552of the stack pointer. This local copy should B<always> be accessed 553as C<SP>. 554 555=item 2. 556 557If you are going to put something onto the Perl stack, you need to know 558where to put it. This is the purpose of the macro C<dSP>--it declares 559and initializes a I<local> copy of the Perl stack pointer. 560 561All the other macros which will be used in this example require you to 562have used this macro. 563 564The exception to this rule is if you are calling a Perl subroutine 565directly from an XSUB function. In this case it is not necessary to 566use the C<dSP> macro explicitly--it will be declared for you 567automatically. 568 569=item 3. 570 571Any parameters to be pushed onto the stack should be bracketed by the 572C<PUSHMARK> and C<PUTBACK> macros. The purpose of these two macros, in 573this context, is to count the number of parameters you are 574pushing automatically. Then whenever Perl is creating the C<@_> array for the 575subroutine, it knows how big to make it. 576 577The C<PUSHMARK> macro tells Perl to make a mental note of the current 578stack pointer. Even if you aren't passing any parameters (like the 579example shown in the section I<No Parameters, Nothing returned>) you 580must still call the C<PUSHMARK> macro before you can call any of the 581I<call_*> functions--Perl still needs to know that there are no 582parameters. 583 584The C<PUTBACK> macro sets the global copy of the stack pointer to be 585the same as our local copy. If we didn't do this I<call_pv> 586wouldn't know where the two parameters we pushed were--remember that 587up to now all the stack pointer manipulation we have done is with our 588local copy, I<not> the global copy. 589 590=item 4. 591 592Next, we come to XPUSHs. This is where the parameters actually get 593pushed onto the stack. In this case we are pushing a string and an 594integer. 595 596See L<perlguts/"XSUBs and the Argument Stack"> for details 597on how the XPUSH macros work. 598 599=item 5. 600 601Because we created temporary values (by means of sv_2mortal() calls) 602we will have to tidy up the Perl stack and dispose of mortal SVs. 603 604This is the purpose of 605 606 ENTER ; 607 SAVETMPS ; 608 609at the start of the function, and 610 611 FREETMPS ; 612 LEAVE ; 613 614at the end. The C<ENTER>/C<SAVETMPS> pair creates a boundary for any 615temporaries we create. This means that the temporaries we get rid of 616will be limited to those which were created after these calls. 617 618The C<FREETMPS>/C<LEAVE> pair will get rid of any values returned by 619the Perl subroutine (see next example), plus it will also dump the 620mortal SVs we have created. Having C<ENTER>/C<SAVETMPS> at the 621beginning of the code makes sure that no other mortals are destroyed. 622 623Think of these macros as working a bit like using C<{> and C<}> in Perl 624to limit the scope of local variables. 625 626See the section I<Using Perl to dispose of temporaries> for details of 627an alternative to using these macros. 628 629=item 6. 630 631Finally, I<LeftString> can now be called via the I<call_pv> function. 632The only flag specified this time is G_DISCARD. Because we are passing 6332 parameters to the Perl subroutine this time, we have not specified 634G_NOARGS. 635 636=back 637 638=head2 Returning a Scalar 639 640Now for an example of dealing with the items returned from a Perl 641subroutine. 642 643Here is a Perl subroutine, I<Adder>, that takes 2 integer parameters 644and simply returns their sum. 645 646 sub Adder 647 { 648 my($a, $b) = @_ ; 649 $a + $b ; 650 } 651 652Because we are now concerned with the return value from I<Adder>, the C 653function required to call it is now a bit more complex. 654 655 static void 656 call_Adder(a, b) 657 int a ; 658 int b ; 659 { 660 dSP ; 661 int count ; 662 663 ENTER ; 664 SAVETMPS; 665 666 PUSHMARK(SP) ; 667 XPUSHs(sv_2mortal(newSViv(a))); 668 XPUSHs(sv_2mortal(newSViv(b))); 669 PUTBACK ; 670 671 count = call_pv("Adder", G_SCALAR); 672 673 SPAGAIN ; 674 675 if (count != 1) 676 croak("Big trouble\n") ; 677 678 printf ("The sum of %d and %d is %d\n", a, b, POPi) ; 679 680 PUTBACK ; 681 FREETMPS ; 682 LEAVE ; 683 } 684 685Points to note this time are 686 687=over 5 688 689=item 1. 690 691The only flag specified this time was G_SCALAR. That means the C<@_> 692array will be created and that the value returned by I<Adder> will 693still exist after the call to I<call_pv>. 694 695=item 2. 696 697The purpose of the macro C<SPAGAIN> is to refresh the local copy of the 698stack pointer. This is necessary because it is possible that the memory 699allocated to the Perl stack has been reallocated whilst in the 700I<call_pv> call. 701 702If you are making use of the Perl stack pointer in your code you must 703always refresh the local copy using SPAGAIN whenever you make use 704of the I<call_*> functions or any other Perl internal function. 705 706=item 3. 707 708Although only a single value was expected to be returned from I<Adder>, 709it is still good practice to check the return code from I<call_pv> 710anyway. 711 712Expecting a single value is not quite the same as knowing that there 713will be one. If someone modified I<Adder> to return a list and we 714didn't check for that possibility and take appropriate action the Perl 715stack would end up in an inconsistent state. That is something you 716I<really> don't want to happen ever. 717 718=item 4. 719 720The C<POPi> macro is used here to pop the return value from the stack. 721In this case we wanted an integer, so C<POPi> was used. 722 723 724Here is the complete list of POP macros available, along with the types 725they return. 726 727 POPs SV 728 POPp pointer 729 POPn double 730 POPi integer 731 POPl long 732 733=item 5. 734 735The final C<PUTBACK> is used to leave the Perl stack in a consistent 736state before exiting the function. This is necessary because when we 737popped the return value from the stack with C<POPi> it updated only our 738local copy of the stack pointer. Remember, C<PUTBACK> sets the global 739stack pointer to be the same as our local copy. 740 741=back 742 743 744=head2 Returning a list of values 745 746Now, let's extend the previous example to return both the sum of the 747parameters and the difference. 748 749Here is the Perl subroutine 750 751 sub AddSubtract 752 { 753 my($a, $b) = @_ ; 754 ($a+$b, $a-$b) ; 755 } 756 757and this is the C function 758 759 static void 760 call_AddSubtract(a, b) 761 int a ; 762 int b ; 763 { 764 dSP ; 765 int count ; 766 767 ENTER ; 768 SAVETMPS; 769 770 PUSHMARK(SP) ; 771 XPUSHs(sv_2mortal(newSViv(a))); 772 XPUSHs(sv_2mortal(newSViv(b))); 773 PUTBACK ; 774 775 count = call_pv("AddSubtract", G_ARRAY); 776 777 SPAGAIN ; 778 779 if (count != 2) 780 croak("Big trouble\n") ; 781 782 printf ("%d - %d = %d\n", a, b, POPi) ; 783 printf ("%d + %d = %d\n", a, b, POPi) ; 784 785 PUTBACK ; 786 FREETMPS ; 787 LEAVE ; 788 } 789 790If I<call_AddSubtract> is called like this 791 792 call_AddSubtract(7, 4) ; 793 794then here is the output 795 796 7 - 4 = 3 797 7 + 4 = 11 798 799Notes 800 801=over 5 802 803=item 1. 804 805We wanted list context, so G_ARRAY was used. 806 807=item 2. 808 809Not surprisingly C<POPi> is used twice this time because we were 810retrieving 2 values from the stack. The important thing to note is that 811when using the C<POP*> macros they come off the stack in I<reverse> 812order. 813 814=back 815 816=head2 Returning a list in a scalar context 817 818Say the Perl subroutine in the previous section was called in a scalar 819context, like this 820 821 static void 822 call_AddSubScalar(a, b) 823 int a ; 824 int b ; 825 { 826 dSP ; 827 int count ; 828 int i ; 829 830 ENTER ; 831 SAVETMPS; 832 833 PUSHMARK(SP) ; 834 XPUSHs(sv_2mortal(newSViv(a))); 835 XPUSHs(sv_2mortal(newSViv(b))); 836 PUTBACK ; 837 838 count = call_pv("AddSubtract", G_SCALAR); 839 840 SPAGAIN ; 841 842 printf ("Items Returned = %d\n", count) ; 843 844 for (i = 1 ; i <= count ; ++i) 845 printf ("Value %d = %d\n", i, POPi) ; 846 847 PUTBACK ; 848 FREETMPS ; 849 LEAVE ; 850 } 851 852The other modification made is that I<call_AddSubScalar> will print the 853number of items returned from the Perl subroutine and their value (for 854simplicity it assumes that they are integer). So if 855I<call_AddSubScalar> is called 856 857 call_AddSubScalar(7, 4) ; 858 859then the output will be 860 861 Items Returned = 1 862 Value 1 = 3 863 864In this case the main point to note is that only the last item in the 865list is returned from the subroutine, I<AddSubtract> actually made it back to 866I<call_AddSubScalar>. 867 868 869=head2 Returning Data from Perl via the parameter list 870 871It is also possible to return values directly via the parameter list - 872whether it is actually desirable to do it is another matter entirely. 873 874The Perl subroutine, I<Inc>, below takes 2 parameters and increments 875each directly. 876 877 sub Inc 878 { 879 ++ $_[0] ; 880 ++ $_[1] ; 881 } 882 883and here is a C function to call it. 884 885 static void 886 call_Inc(a, b) 887 int a ; 888 int b ; 889 { 890 dSP ; 891 int count ; 892 SV * sva ; 893 SV * svb ; 894 895 ENTER ; 896 SAVETMPS; 897 898 sva = sv_2mortal(newSViv(a)) ; 899 svb = sv_2mortal(newSViv(b)) ; 900 901 PUSHMARK(SP) ; 902 XPUSHs(sva); 903 XPUSHs(svb); 904 PUTBACK ; 905 906 count = call_pv("Inc", G_DISCARD); 907 908 if (count != 0) 909 croak ("call_Inc: expected 0 values from 'Inc', got %d\n", 910 count) ; 911 912 printf ("%d + 1 = %d\n", a, SvIV(sva)) ; 913 printf ("%d + 1 = %d\n", b, SvIV(svb)) ; 914 915 FREETMPS ; 916 LEAVE ; 917 } 918 919To be able to access the two parameters that were pushed onto the stack 920after they return from I<call_pv> it is necessary to make a note 921of their addresses--thus the two variables C<sva> and C<svb>. 922 923The reason this is necessary is that the area of the Perl stack which 924held them will very likely have been overwritten by something else by 925the time control returns from I<call_pv>. 926 927 928 929 930=head2 Using G_EVAL 931 932Now an example using G_EVAL. Below is a Perl subroutine which computes 933the difference of its 2 parameters. If this would result in a negative 934result, the subroutine calls I<die>. 935 936 sub Subtract 937 { 938 my ($a, $b) = @_ ; 939 940 die "death can be fatal\n" if $a < $b ; 941 942 $a - $b ; 943 } 944 945and some C to call it 946 947 static void 948 call_Subtract(a, b) 949 int a ; 950 int b ; 951 { 952 dSP ; 953 int count ; 954 955 ENTER ; 956 SAVETMPS; 957 958 PUSHMARK(SP) ; 959 XPUSHs(sv_2mortal(newSViv(a))); 960 XPUSHs(sv_2mortal(newSViv(b))); 961 PUTBACK ; 962 963 count = call_pv("Subtract", G_EVAL|G_SCALAR); 964 965 SPAGAIN ; 966 967 /* Check the eval first */ 968 if (SvTRUE(ERRSV)) 969 { 970 STRLEN n_a; 971 printf ("Uh oh - %s\n", SvPV(ERRSV, n_a)) ; 972 POPs ; 973 } 974 else 975 { 976 if (count != 1) 977 croak("call_Subtract: wanted 1 value from 'Subtract', got %d\n", 978 count) ; 979 980 printf ("%d - %d = %d\n", a, b, POPi) ; 981 } 982 983 PUTBACK ; 984 FREETMPS ; 985 LEAVE ; 986 } 987 988If I<call_Subtract> is called thus 989 990 call_Subtract(4, 5) 991 992the following will be printed 993 994 Uh oh - death can be fatal 995 996Notes 997 998=over 5 999 1000=item 1. 1001 1002We want to be able to catch the I<die> so we have used the G_EVAL 1003flag. Not specifying this flag would mean that the program would 1004terminate immediately at the I<die> statement in the subroutine 1005I<Subtract>. 1006 1007=item 2. 1008 1009The code 1010 1011 if (SvTRUE(ERRSV)) 1012 { 1013 STRLEN n_a; 1014 printf ("Uh oh - %s\n", SvPV(ERRSV, n_a)) ; 1015 POPs ; 1016 } 1017 1018is the direct equivalent of this bit of Perl 1019 1020 print "Uh oh - $@\n" if $@ ; 1021 1022C<PL_errgv> is a perl global of type C<GV *> that points to the 1023symbol table entry containing the error. C<ERRSV> therefore 1024refers to the C equivalent of C<$@>. 1025 1026=item 3. 1027 1028Note that the stack is popped using C<POPs> in the block where 1029C<SvTRUE(ERRSV)> is true. This is necessary because whenever a 1030I<call_*> function invoked with G_EVAL|G_SCALAR returns an error, 1031the top of the stack holds the value I<undef>. Because we want the 1032program to continue after detecting this error, it is essential that 1033the stack is tidied up by removing the I<undef>. 1034 1035=back 1036 1037 1038=head2 Using G_KEEPERR 1039 1040Consider this rather facetious example, where we have used an XS 1041version of the call_Subtract example above inside a destructor: 1042 1043 package Foo; 1044 sub new { bless {}, $_[0] } 1045 sub Subtract { 1046 my($a,$b) = @_; 1047 die "death can be fatal" if $a < $b ; 1048 $a - $b; 1049 } 1050 sub DESTROY { call_Subtract(5, 4); } 1051 sub foo { die "foo dies"; } 1052 1053 package main; 1054 eval { Foo->new->foo }; 1055 print "Saw: $@" if $@; # should be, but isn't 1056 1057This example will fail to recognize that an error occurred inside the 1058C<eval {}>. Here's why: the call_Subtract code got executed while perl 1059was cleaning up temporaries when exiting the eval block, and because 1060call_Subtract is implemented with I<call_pv> using the G_EVAL 1061flag, it promptly reset C<$@>. This results in the failure of the 1062outermost test for C<$@>, and thereby the failure of the error trap. 1063 1064Appending the G_KEEPERR flag, so that the I<call_pv> call in 1065call_Subtract reads: 1066 1067 count = call_pv("Subtract", G_EVAL|G_SCALAR|G_KEEPERR); 1068 1069will preserve the error and restore reliable error handling. 1070 1071=head2 Using call_sv 1072 1073In all the previous examples I have 'hard-wired' the name of the Perl 1074subroutine to be called from C. Most of the time though, it is more 1075convenient to be able to specify the name of the Perl subroutine from 1076within the Perl script. 1077 1078Consider the Perl code below 1079 1080 sub fred 1081 { 1082 print "Hello there\n" ; 1083 } 1084 1085 CallSubPV("fred") ; 1086 1087Here is a snippet of XSUB which defines I<CallSubPV>. 1088 1089 void 1090 CallSubPV(name) 1091 char * name 1092 CODE: 1093 PUSHMARK(SP) ; 1094 call_pv(name, G_DISCARD|G_NOARGS) ; 1095 1096That is fine as far as it goes. The thing is, the Perl subroutine 1097can be specified as only a string. For Perl 4 this was adequate, 1098but Perl 5 allows references to subroutines and anonymous subroutines. 1099This is where I<call_sv> is useful. 1100 1101The code below for I<CallSubSV> is identical to I<CallSubPV> except 1102that the C<name> parameter is now defined as an SV* and we use 1103I<call_sv> instead of I<call_pv>. 1104 1105 void 1106 CallSubSV(name) 1107 SV * name 1108 CODE: 1109 PUSHMARK(SP) ; 1110 call_sv(name, G_DISCARD|G_NOARGS) ; 1111 1112Because we are using an SV to call I<fred> the following can all be used 1113 1114 CallSubSV("fred") ; 1115 CallSubSV(\&fred) ; 1116 $ref = \&fred ; 1117 CallSubSV($ref) ; 1118 CallSubSV( sub { print "Hello there\n" } ) ; 1119 1120As you can see, I<call_sv> gives you much greater flexibility in 1121how you can specify the Perl subroutine. 1122 1123You should note that if it is necessary to store the SV (C<name> in the 1124example above) which corresponds to the Perl subroutine so that it can 1125be used later in the program, it not enough just to store a copy of the 1126pointer to the SV. Say the code above had been like this 1127 1128 static SV * rememberSub ; 1129 1130 void 1131 SaveSub1(name) 1132 SV * name 1133 CODE: 1134 rememberSub = name ; 1135 1136 void 1137 CallSavedSub1() 1138 CODE: 1139 PUSHMARK(SP) ; 1140 call_sv(rememberSub, G_DISCARD|G_NOARGS) ; 1141 1142The reason this is wrong is that by the time you come to use the 1143pointer C<rememberSub> in C<CallSavedSub1>, it may or may not still refer 1144to the Perl subroutine that was recorded in C<SaveSub1>. This is 1145particularly true for these cases 1146 1147 SaveSub1(\&fred) ; 1148 CallSavedSub1() ; 1149 1150 SaveSub1( sub { print "Hello there\n" } ) ; 1151 CallSavedSub1() ; 1152 1153By the time each of the C<SaveSub1> statements above have been executed, 1154the SV*s which corresponded to the parameters will no longer exist. 1155Expect an error message from Perl of the form 1156 1157 Can't use an undefined value as a subroutine reference at ... 1158 1159for each of the C<CallSavedSub1> lines. 1160 1161Similarly, with this code 1162 1163 $ref = \&fred ; 1164 SaveSub1($ref) ; 1165 $ref = 47 ; 1166 CallSavedSub1() ; 1167 1168you can expect one of these messages (which you actually get is dependent on 1169the version of Perl you are using) 1170 1171 Not a CODE reference at ... 1172 Undefined subroutine &main::47 called ... 1173 1174The variable $ref may have referred to the subroutine C<fred> 1175whenever the call to C<SaveSub1> was made but by the time 1176C<CallSavedSub1> gets called it now holds the number C<47>. Because we 1177saved only a pointer to the original SV in C<SaveSub1>, any changes to 1178$ref will be tracked by the pointer C<rememberSub>. This means that 1179whenever C<CallSavedSub1> gets called, it will attempt to execute the 1180code which is referenced by the SV* C<rememberSub>. In this case 1181though, it now refers to the integer C<47>, so expect Perl to complain 1182loudly. 1183 1184A similar but more subtle problem is illustrated with this code 1185 1186 $ref = \&fred ; 1187 SaveSub1($ref) ; 1188 $ref = \&joe ; 1189 CallSavedSub1() ; 1190 1191This time whenever C<CallSavedSub1> get called it will execute the Perl 1192subroutine C<joe> (assuming it exists) rather than C<fred> as was 1193originally requested in the call to C<SaveSub1>. 1194 1195To get around these problems it is necessary to take a full copy of the 1196SV. The code below shows C<SaveSub2> modified to do that 1197 1198 static SV * keepSub = (SV*)NULL ; 1199 1200 void 1201 SaveSub2(name) 1202 SV * name 1203 CODE: 1204 /* Take a copy of the callback */ 1205 if (keepSub == (SV*)NULL) 1206 /* First time, so create a new SV */ 1207 keepSub = newSVsv(name) ; 1208 else 1209 /* Been here before, so overwrite */ 1210 SvSetSV(keepSub, name) ; 1211 1212 void 1213 CallSavedSub2() 1214 CODE: 1215 PUSHMARK(SP) ; 1216 call_sv(keepSub, G_DISCARD|G_NOARGS) ; 1217 1218To avoid creating a new SV every time C<SaveSub2> is called, 1219the function first checks to see if it has been called before. If not, 1220then space for a new SV is allocated and the reference to the Perl 1221subroutine, C<name> is copied to the variable C<keepSub> in one 1222operation using C<newSVsv>. Thereafter, whenever C<SaveSub2> is called 1223the existing SV, C<keepSub>, is overwritten with the new value using 1224C<SvSetSV>. 1225 1226=head2 Using call_argv 1227 1228Here is a Perl subroutine which prints whatever parameters are passed 1229to it. 1230 1231 sub PrintList 1232 { 1233 my(@list) = @_ ; 1234 1235 foreach (@list) { print "$_\n" } 1236 } 1237 1238and here is an example of I<call_argv> which will call 1239I<PrintList>. 1240 1241 static char * words[] = {"alpha", "beta", "gamma", "delta", NULL} ; 1242 1243 static void 1244 call_PrintList() 1245 { 1246 dSP ; 1247 1248 call_argv("PrintList", G_DISCARD, words) ; 1249 } 1250 1251Note that it is not necessary to call C<PUSHMARK> in this instance. 1252This is because I<call_argv> will do it for you. 1253 1254=head2 Using call_method 1255 1256Consider the following Perl code 1257 1258 { 1259 package Mine ; 1260 1261 sub new 1262 { 1263 my($type) = shift ; 1264 bless [@_] 1265 } 1266 1267 sub Display 1268 { 1269 my ($self, $index) = @_ ; 1270 print "$index: $$self[$index]\n" ; 1271 } 1272 1273 sub PrintID 1274 { 1275 my($class) = @_ ; 1276 print "This is Class $class version 1.0\n" ; 1277 } 1278 } 1279 1280It implements just a very simple class to manage an array. Apart from 1281the constructor, C<new>, it declares methods, one static and one 1282virtual. The static method, C<PrintID>, prints out simply the class 1283name and a version number. The virtual method, C<Display>, prints out a 1284single element of the array. Here is an all Perl example of using it. 1285 1286 $a = new Mine ('red', 'green', 'blue') ; 1287 $a->Display(1) ; 1288 PrintID Mine; 1289 1290will print 1291 1292 1: green 1293 This is Class Mine version 1.0 1294 1295Calling a Perl method from C is fairly straightforward. The following 1296things are required 1297 1298=over 5 1299 1300=item * 1301 1302a reference to the object for a virtual method or the name of the class 1303for a static method. 1304 1305=item * 1306 1307the name of the method. 1308 1309=item * 1310 1311any other parameters specific to the method. 1312 1313=back 1314 1315Here is a simple XSUB which illustrates the mechanics of calling both 1316the C<PrintID> and C<Display> methods from C. 1317 1318 void 1319 call_Method(ref, method, index) 1320 SV * ref 1321 char * method 1322 int index 1323 CODE: 1324 PUSHMARK(SP); 1325 XPUSHs(ref); 1326 XPUSHs(sv_2mortal(newSViv(index))) ; 1327 PUTBACK; 1328 1329 call_method(method, G_DISCARD) ; 1330 1331 void 1332 call_PrintID(class, method) 1333 char * class 1334 char * method 1335 CODE: 1336 PUSHMARK(SP); 1337 XPUSHs(sv_2mortal(newSVpv(class, 0))) ; 1338 PUTBACK; 1339 1340 call_method(method, G_DISCARD) ; 1341 1342 1343So the methods C<PrintID> and C<Display> can be invoked like this 1344 1345 $a = new Mine ('red', 'green', 'blue') ; 1346 call_Method($a, 'Display', 1) ; 1347 call_PrintID('Mine', 'PrintID') ; 1348 1349The only thing to note is that in both the static and virtual methods, 1350the method name is not passed via the stack--it is used as the first 1351parameter to I<call_method>. 1352 1353=head2 Using GIMME_V 1354 1355Here is a trivial XSUB which prints the context in which it is 1356currently executing. 1357 1358 void 1359 PrintContext() 1360 CODE: 1361 I32 gimme = GIMME_V; 1362 if (gimme == G_VOID) 1363 printf ("Context is Void\n") ; 1364 else if (gimme == G_SCALAR) 1365 printf ("Context is Scalar\n") ; 1366 else 1367 printf ("Context is Array\n") ; 1368 1369and here is some Perl to test it 1370 1371 PrintContext ; 1372 $a = PrintContext ; 1373 @a = PrintContext ; 1374 1375The output from that will be 1376 1377 Context is Void 1378 Context is Scalar 1379 Context is Array 1380 1381=head2 Using Perl to dispose of temporaries 1382 1383In the examples given to date, any temporaries created in the callback 1384(i.e., parameters passed on the stack to the I<call_*> function or 1385values returned via the stack) have been freed by one of these methods 1386 1387=over 5 1388 1389=item * 1390 1391specifying the G_DISCARD flag with I<call_*>. 1392 1393=item * 1394 1395explicitly disposed of using the C<ENTER>/C<SAVETMPS> - 1396C<FREETMPS>/C<LEAVE> pairing. 1397 1398=back 1399 1400There is another method which can be used, namely letting Perl do it 1401for you automatically whenever it regains control after the callback 1402has terminated. This is done by simply not using the 1403 1404 ENTER ; 1405 SAVETMPS ; 1406 ... 1407 FREETMPS ; 1408 LEAVE ; 1409 1410sequence in the callback (and not, of course, specifying the G_DISCARD 1411flag). 1412 1413If you are going to use this method you have to be aware of a possible 1414memory leak which can arise under very specific circumstances. To 1415explain these circumstances you need to know a bit about the flow of 1416control between Perl and the callback routine. 1417 1418The examples given at the start of the document (an error handler and 1419an event driven program) are typical of the two main sorts of flow 1420control that you are likely to encounter with callbacks. There is a 1421very important distinction between them, so pay attention. 1422 1423In the first example, an error handler, the flow of control could be as 1424follows. You have created an interface to an external library. 1425Control can reach the external library like this 1426 1427 perl --> XSUB --> external library 1428 1429Whilst control is in the library, an error condition occurs. You have 1430previously set up a Perl callback to handle this situation, so it will 1431get executed. Once the callback has finished, control will drop back to 1432Perl again. Here is what the flow of control will be like in that 1433situation 1434 1435 perl --> XSUB --> external library 1436 ... 1437 error occurs 1438 ... 1439 external library --> call_* --> perl 1440 | 1441 perl <-- XSUB <-- external library <-- call_* <----+ 1442 1443After processing of the error using I<call_*> is completed, 1444control reverts back to Perl more or less immediately. 1445 1446In the diagram, the further right you go the more deeply nested the 1447scope is. It is only when control is back with perl on the extreme 1448left of the diagram that you will have dropped back to the enclosing 1449scope and any temporaries you have left hanging around will be freed. 1450 1451In the second example, an event driven program, the flow of control 1452will be more like this 1453 1454 perl --> XSUB --> event handler 1455 ... 1456 event handler --> call_* --> perl 1457 | 1458 event handler <-- call_* <----+ 1459 ... 1460 event handler --> call_* --> perl 1461 | 1462 event handler <-- call_* <----+ 1463 ... 1464 event handler --> call_* --> perl 1465 | 1466 event handler <-- call_* <----+ 1467 1468In this case the flow of control can consist of only the repeated 1469sequence 1470 1471 event handler --> call_* --> perl 1472 1473for practically the complete duration of the program. This means that 1474control may I<never> drop back to the surrounding scope in Perl at the 1475extreme left. 1476 1477So what is the big problem? Well, if you are expecting Perl to tidy up 1478those temporaries for you, you might be in for a long wait. For Perl 1479to dispose of your temporaries, control must drop back to the 1480enclosing scope at some stage. In the event driven scenario that may 1481never happen. This means that as time goes on, your program will 1482create more and more temporaries, none of which will ever be freed. As 1483each of these temporaries consumes some memory your program will 1484eventually consume all the available memory in your system--kapow! 1485 1486So here is the bottom line--if you are sure that control will revert 1487back to the enclosing Perl scope fairly quickly after the end of your 1488callback, then it isn't absolutely necessary to dispose explicitly of 1489any temporaries you may have created. Mind you, if you are at all 1490uncertain about what to do, it doesn't do any harm to tidy up anyway. 1491 1492 1493=head2 Strategies for storing Callback Context Information 1494 1495 1496Potentially one of the trickiest problems to overcome when designing a 1497callback interface can be figuring out how to store the mapping between 1498the C callback function and the Perl equivalent. 1499 1500To help understand why this can be a real problem first consider how a 1501callback is set up in an all C environment. Typically a C API will 1502provide a function to register a callback. This will expect a pointer 1503to a function as one of its parameters. Below is a call to a 1504hypothetical function C<register_fatal> which registers the C function 1505to get called when a fatal error occurs. 1506 1507 register_fatal(cb1) ; 1508 1509The single parameter C<cb1> is a pointer to a function, so you must 1510have defined C<cb1> in your code, say something like this 1511 1512 static void 1513 cb1() 1514 { 1515 printf ("Fatal Error\n") ; 1516 exit(1) ; 1517 } 1518 1519Now change that to call a Perl subroutine instead 1520 1521 static SV * callback = (SV*)NULL; 1522 1523 static void 1524 cb1() 1525 { 1526 dSP ; 1527 1528 PUSHMARK(SP) ; 1529 1530 /* Call the Perl sub to process the callback */ 1531 call_sv(callback, G_DISCARD) ; 1532 } 1533 1534 1535 void 1536 register_fatal(fn) 1537 SV * fn 1538 CODE: 1539 /* Remember the Perl sub */ 1540 if (callback == (SV*)NULL) 1541 callback = newSVsv(fn) ; 1542 else 1543 SvSetSV(callback, fn) ; 1544 1545 /* register the callback with the external library */ 1546 register_fatal(cb1) ; 1547 1548where the Perl equivalent of C<register_fatal> and the callback it 1549registers, C<pcb1>, might look like this 1550 1551 # Register the sub pcb1 1552 register_fatal(\&pcb1) ; 1553 1554 sub pcb1 1555 { 1556 die "I'm dying...\n" ; 1557 } 1558 1559The mapping between the C callback and the Perl equivalent is stored in 1560the global variable C<callback>. 1561 1562This will be adequate if you ever need to have only one callback 1563registered at any time. An example could be an error handler like the 1564code sketched out above. Remember though, repeated calls to 1565C<register_fatal> will replace the previously registered callback 1566function with the new one. 1567 1568Say for example you want to interface to a library which allows asynchronous 1569file i/o. In this case you may be able to register a callback whenever 1570a read operation has completed. To be of any use we want to be able to 1571call separate Perl subroutines for each file that is opened. As it 1572stands, the error handler example above would not be adequate as it 1573allows only a single callback to be defined at any time. What we 1574require is a means of storing the mapping between the opened file and 1575the Perl subroutine we want to be called for that file. 1576 1577Say the i/o library has a function C<asynch_read> which associates a C 1578function C<ProcessRead> with a file handle C<fh>--this assumes that it 1579has also provided some routine to open the file and so obtain the file 1580handle. 1581 1582 asynch_read(fh, ProcessRead) 1583 1584This may expect the C I<ProcessRead> function of this form 1585 1586 void 1587 ProcessRead(fh, buffer) 1588 int fh ; 1589 char * buffer ; 1590 { 1591 ... 1592 } 1593 1594To provide a Perl interface to this library we need to be able to map 1595between the C<fh> parameter and the Perl subroutine we want called. A 1596hash is a convenient mechanism for storing this mapping. The code 1597below shows a possible implementation 1598 1599 static HV * Mapping = (HV*)NULL ; 1600 1601 void 1602 asynch_read(fh, callback) 1603 int fh 1604 SV * callback 1605 CODE: 1606 /* If the hash doesn't already exist, create it */ 1607 if (Mapping == (HV*)NULL) 1608 Mapping = newHV() ; 1609 1610 /* Save the fh -> callback mapping */ 1611 hv_store(Mapping, (char*)&fh, sizeof(fh), newSVsv(callback), 0) ; 1612 1613 /* Register with the C Library */ 1614 asynch_read(fh, asynch_read_if) ; 1615 1616and C<asynch_read_if> could look like this 1617 1618 static void 1619 asynch_read_if(fh, buffer) 1620 int fh ; 1621 char * buffer ; 1622 { 1623 dSP ; 1624 SV ** sv ; 1625 1626 /* Get the callback associated with fh */ 1627 sv = hv_fetch(Mapping, (char*)&fh , sizeof(fh), FALSE) ; 1628 if (sv == (SV**)NULL) 1629 croak("Internal error...\n") ; 1630 1631 PUSHMARK(SP) ; 1632 XPUSHs(sv_2mortal(newSViv(fh))) ; 1633 XPUSHs(sv_2mortal(newSVpv(buffer, 0))) ; 1634 PUTBACK ; 1635 1636 /* Call the Perl sub */ 1637 call_sv(*sv, G_DISCARD) ; 1638 } 1639 1640For completeness, here is C<asynch_close>. This shows how to remove 1641the entry from the hash C<Mapping>. 1642 1643 void 1644 asynch_close(fh) 1645 int fh 1646 CODE: 1647 /* Remove the entry from the hash */ 1648 (void) hv_delete(Mapping, (char*)&fh, sizeof(fh), G_DISCARD) ; 1649 1650 /* Now call the real asynch_close */ 1651 asynch_close(fh) ; 1652 1653So the Perl interface would look like this 1654 1655 sub callback1 1656 { 1657 my($handle, $buffer) = @_ ; 1658 } 1659 1660 # Register the Perl callback 1661 asynch_read($fh, \&callback1) ; 1662 1663 asynch_close($fh) ; 1664 1665The mapping between the C callback and Perl is stored in the global 1666hash C<Mapping> this time. Using a hash has the distinct advantage that 1667it allows an unlimited number of callbacks to be registered. 1668 1669What if the interface provided by the C callback doesn't contain a 1670parameter which allows the file handle to Perl subroutine mapping? Say 1671in the asynchronous i/o package, the callback function gets passed only 1672the C<buffer> parameter like this 1673 1674 void 1675 ProcessRead(buffer) 1676 char * buffer ; 1677 { 1678 ... 1679 } 1680 1681Without the file handle there is no straightforward way to map from the 1682C callback to the Perl subroutine. 1683 1684In this case a possible way around this problem is to predefine a 1685series of C functions to act as the interface to Perl, thus 1686 1687 #define MAX_CB 3 1688 #define NULL_HANDLE -1 1689 typedef void (*FnMap)() ; 1690 1691 struct MapStruct { 1692 FnMap Function ; 1693 SV * PerlSub ; 1694 int Handle ; 1695 } ; 1696 1697 static void fn1() ; 1698 static void fn2() ; 1699 static void fn3() ; 1700 1701 static struct MapStruct Map [MAX_CB] = 1702 { 1703 { fn1, NULL, NULL_HANDLE }, 1704 { fn2, NULL, NULL_HANDLE }, 1705 { fn3, NULL, NULL_HANDLE } 1706 } ; 1707 1708 static void 1709 Pcb(index, buffer) 1710 int index ; 1711 char * buffer ; 1712 { 1713 dSP ; 1714 1715 PUSHMARK(SP) ; 1716 XPUSHs(sv_2mortal(newSVpv(buffer, 0))) ; 1717 PUTBACK ; 1718 1719 /* Call the Perl sub */ 1720 call_sv(Map[index].PerlSub, G_DISCARD) ; 1721 } 1722 1723 static void 1724 fn1(buffer) 1725 char * buffer ; 1726 { 1727 Pcb(0, buffer) ; 1728 } 1729 1730 static void 1731 fn2(buffer) 1732 char * buffer ; 1733 { 1734 Pcb(1, buffer) ; 1735 } 1736 1737 static void 1738 fn3(buffer) 1739 char * buffer ; 1740 { 1741 Pcb(2, buffer) ; 1742 } 1743 1744 void 1745 array_asynch_read(fh, callback) 1746 int fh 1747 SV * callback 1748 CODE: 1749 int index ; 1750 int null_index = MAX_CB ; 1751 1752 /* Find the same handle or an empty entry */ 1753 for (index = 0 ; index < MAX_CB ; ++index) 1754 { 1755 if (Map[index].Handle == fh) 1756 break ; 1757 1758 if (Map[index].Handle == NULL_HANDLE) 1759 null_index = index ; 1760 } 1761 1762 if (index == MAX_CB && null_index == MAX_CB) 1763 croak ("Too many callback functions registered\n") ; 1764 1765 if (index == MAX_CB) 1766 index = null_index ; 1767 1768 /* Save the file handle */ 1769 Map[index].Handle = fh ; 1770 1771 /* Remember the Perl sub */ 1772 if (Map[index].PerlSub == (SV*)NULL) 1773 Map[index].PerlSub = newSVsv(callback) ; 1774 else 1775 SvSetSV(Map[index].PerlSub, callback) ; 1776 1777 asynch_read(fh, Map[index].Function) ; 1778 1779 void 1780 array_asynch_close(fh) 1781 int fh 1782 CODE: 1783 int index ; 1784 1785 /* Find the file handle */ 1786 for (index = 0; index < MAX_CB ; ++ index) 1787 if (Map[index].Handle == fh) 1788 break ; 1789 1790 if (index == MAX_CB) 1791 croak ("could not close fh %d\n", fh) ; 1792 1793 Map[index].Handle = NULL_HANDLE ; 1794 SvREFCNT_dec(Map[index].PerlSub) ; 1795 Map[index].PerlSub = (SV*)NULL ; 1796 1797 asynch_close(fh) ; 1798 1799In this case the functions C<fn1>, C<fn2>, and C<fn3> are used to 1800remember the Perl subroutine to be called. Each of the functions holds 1801a separate hard-wired index which is used in the function C<Pcb> to 1802access the C<Map> array and actually call the Perl subroutine. 1803 1804There are some obvious disadvantages with this technique. 1805 1806Firstly, the code is considerably more complex than with the previous 1807example. 1808 1809Secondly, there is a hard-wired limit (in this case 3) to the number of 1810callbacks that can exist simultaneously. The only way to increase the 1811limit is by modifying the code to add more functions and then 1812recompiling. None the less, as long as the number of functions is 1813chosen with some care, it is still a workable solution and in some 1814cases is the only one available. 1815 1816To summarize, here are a number of possible methods for you to consider 1817for storing the mapping between C and the Perl callback 1818 1819=over 5 1820 1821=item 1. Ignore the problem - Allow only 1 callback 1822 1823For a lot of situations, like interfacing to an error handler, this may 1824be a perfectly adequate solution. 1825 1826=item 2. Create a sequence of callbacks - hard wired limit 1827 1828If it is impossible to tell from the parameters passed back from the C 1829callback what the context is, then you may need to create a sequence of C 1830callback interface functions, and store pointers to each in an array. 1831 1832=item 3. Use a parameter to map to the Perl callback 1833 1834A hash is an ideal mechanism to store the mapping between C and Perl. 1835 1836=back 1837 1838 1839=head2 Alternate Stack Manipulation 1840 1841 1842Although I have made use of only the C<POP*> macros to access values 1843returned from Perl subroutines, it is also possible to bypass these 1844macros and read the stack using the C<ST> macro (See L<perlxs> for a 1845full description of the C<ST> macro). 1846 1847Most of the time the C<POP*> macros should be adequate, the main 1848problem with them is that they force you to process the returned values 1849in sequence. This may not be the most suitable way to process the 1850values in some cases. What we want is to be able to access the stack in 1851a random order. The C<ST> macro as used when coding an XSUB is ideal 1852for this purpose. 1853 1854The code below is the example given in the section I<Returning a list 1855of values> recoded to use C<ST> instead of C<POP*>. 1856 1857 static void 1858 call_AddSubtract2(a, b) 1859 int a ; 1860 int b ; 1861 { 1862 dSP ; 1863 I32 ax ; 1864 int count ; 1865 1866 ENTER ; 1867 SAVETMPS; 1868 1869 PUSHMARK(SP) ; 1870 XPUSHs(sv_2mortal(newSViv(a))); 1871 XPUSHs(sv_2mortal(newSViv(b))); 1872 PUTBACK ; 1873 1874 count = call_pv("AddSubtract", G_ARRAY); 1875 1876 SPAGAIN ; 1877 SP -= count ; 1878 ax = (SP - PL_stack_base) + 1 ; 1879 1880 if (count != 2) 1881 croak("Big trouble\n") ; 1882 1883 printf ("%d + %d = %d\n", a, b, SvIV(ST(0))) ; 1884 printf ("%d - %d = %d\n", a, b, SvIV(ST(1))) ; 1885 1886 PUTBACK ; 1887 FREETMPS ; 1888 LEAVE ; 1889 } 1890 1891Notes 1892 1893=over 5 1894 1895=item 1. 1896 1897Notice that it was necessary to define the variable C<ax>. This is 1898because the C<ST> macro expects it to exist. If we were in an XSUB it 1899would not be necessary to define C<ax> as it is already defined for 1900you. 1901 1902=item 2. 1903 1904The code 1905 1906 SPAGAIN ; 1907 SP -= count ; 1908 ax = (SP - PL_stack_base) + 1 ; 1909 1910sets the stack up so that we can use the C<ST> macro. 1911 1912=item 3. 1913 1914Unlike the original coding of this example, the returned 1915values are not accessed in reverse order. So C<ST(0)> refers to the 1916first value returned by the Perl subroutine and C<ST(count-1)> 1917refers to the last. 1918 1919=back 1920 1921=head2 Creating and calling an anonymous subroutine in C 1922 1923As we've already shown, C<call_sv> can be used to invoke an 1924anonymous subroutine. However, our example showed a Perl script 1925invoking an XSUB to perform this operation. Let's see how it can be 1926done inside our C code: 1927 1928 ... 1929 1930 SV *cvrv = eval_pv("sub { print 'You will not find me cluttering any namespace!' }", TRUE); 1931 1932 ... 1933 1934 call_sv(cvrv, G_VOID|G_NOARGS); 1935 1936C<eval_pv> is used to compile the anonymous subroutine, which 1937will be the return value as well (read more about C<eval_pv> in 1938L<perlapi/eval_pv>). Once this code reference is in hand, it 1939can be mixed in with all the previous examples we've shown. 1940 1941=head1 SEE ALSO 1942 1943L<perlxs>, L<perlguts>, L<perlembed> 1944 1945=head1 AUTHOR 1946 1947Paul Marquess 1948 1949Special thanks to the following people who assisted in the creation of 1950the document. 1951 1952Jeff Okamoto, Tim Bunce, Nick Gianniotis, Steve Kelem, Gurusamy Sarathy 1953and Larry Wall. 1954 1955=head1 DATE 1956 1957Version 1.3, 14th Apr 1997 1958