You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@httpd.apache.org by Doug MacEachern <do...@osf.org> on 1996/05/02 01:20:29 UTC

mod_perl testing

It's not quite there yet, but enough is there for testing.  If you get a
chance to look at it, I'd really like hear how it goes, problems, feedback,
etc.  This is the work that Gisle Aas started a little while back, which I
have picked up recently.  There's half-decent documentation that explains more.

You can grab it at:
http://www.osf.org/~dougm/perl/mod_perl.tar.gz

While I'm here, and you're there, if anyone would like to check out
mod_auth_dbi 
(authenticate via Perl's DBI module)
http://www.osf.org/~dougm/perl/mod_auth_dbi.tar.gz

Here are some issues I've scribbled down:

o *** We're leaking!! ***
Andrew McRae <mc...@internet.com> pointed this out to me,
I've attached his sample leaker below, watch it grow!
I tried to set perl_destruct_level, to make extra sure everything
is cleaned-up, this dumped core on me.
Anyone know what's happening here?
Andrew or myself will run this by the perl5porters.
I hope this is simple fix, or that I'm just imagining things...

o the client is not hooked up to the script's STDIN/STDOUT
  I had this working against 1.0.5 sources, but then the io scheme
  changed in 1.1bx.  I'll get back to this.

o Makefile.tmpl needs cleaning

o Currently, we keep the 'Authorization' header from the script.

  opinions?

o Should we have an Apache.pm file?  Currently mod_perl does the 'bootstrap
Apache'.  

o Some methods such as $r->set_content_type could stand to loose the set_ prefix
  provided then return a value.

  $ct = $r->content_type; #get it
  $r->content_type("text/html"); #set it
  
  opinions?

o Add other methods would be handy to have.

o Other stuff I'm not thinking of...

Cheers,
-Doug

---8<---- leak.c

#include <stdio.h>

#include <EXTERN.h>
#include <perl.h>

PerlInterpreter *my_perl;
char *my_argv[] = { "", "-e", "sub leaker { my(@a) = 1..10_000 }" };

void leak(void) {
  my_perl = perl_alloc();
  perl_construct( my_perl );
  
  perl_parse(my_perl, NULL, 3, my_argv, NULL);

  perl_call_pv("leaker", G_DISCARD|G_NOARGS);

  /* perl_destruct_level = 2; */
  perl_destruct(my_perl);
  perl_free(my_perl);
}


int main(int argc, char** argv, char **envp) {
  int count;

  for (count = 1; count <= 10; count++) {
    printf("Step %d...\n", count);
    leak();
    printf("    done\n");
    sleep(5);
  }
}