You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl@perl.apache.org by Manoj Bist <ma...@gmail.com> on 2007/08/13 08:33:03 UTC

Scripts works under CGI but not under mod_perl

Hi,

I created a perl binding for a third party "C "library using swig. This
works fine under CGI but consistently fails under mod_perl.
Is there a known set of calls(mulithreading etc.) that is not expected to
work under mod_perl?

I have gone through almost all the mod_perl caveats that I could google. I
have been struggling with this for quite some time.
I would really appreciate any insights/pointers/ideas on troubleshooting
this.

Thanks,

Manoj.

Re: Scripts works under CGI but not under mod_perl

Posted by Perrin Harkins <pe...@elem.com>.
On 8/13/07, Manoj Bist <ma...@gmail.com> wrote:
> Is there some recommended way to detect if STDOUT is being manipulated?

The source code is usually the easiest way.

> The library is using TCP sockets to communicate with the server.

That usually is not a problem under mod_perl.

> Is  there some way to debug apache/mod_perl in the debugger?

Sure.  You'll find information on debugging at both the perl and C level here:
http://modperlbook.org/html/ch21_01.html

- Perrin

Re: Scripts works under CGI but not under mod_perl

Posted by Manoj Bist <ma...@gmail.com>.
Hi Perrin,

Is there some recommended way to detect if STDOUT is being manipulated?
This is what I am doing.

1. Build a standalone binary that uses this lib.
2. Run this binary in the debugger and insert breakpoints in read, write,
open and close.

The library is using TCP sockets to communicate with the server.

Is  there some way to debug apache/mod_perl in the debugger?

Thanks a lot,

Manoj.


On 8/13/07, Perrin Harkins <pe...@elem.com> wrote:
>
> On 8/13/07, Manoj Bist <ma...@gmail.com> wrote:
> > Thanks for the response. The C library is a third party library which
> does
> > the following:
> >
> > - Connect to a server running on port 7000 on the local machine.
> > - Make an initialize call
> > <==============================This call is consistently
> > failing under mod_perl.
>
> Okay, so that's what you need to focus on.  Do you know if it's
> connecting over TCP sockets or pipes?  There may be issues if it's
> trying to manipulate STDOUT.
>
> > The startup.pl that we are using has only 5 lines.
>
> I don't see how this could cause you trouble, unless you are loading
> other things directly from httpd.conf.  It probably has to do with
> STDOUT.
>
> - Perrin
>

Re: Scripts works under CGI but not under mod_perl

Posted by Perrin Harkins <pe...@elem.com>.
On 8/13/07, Manoj Bist <ma...@gmail.com> wrote:
> Thanks for the response. The C library is a third party library which does
> the following:
>
> - Connect to a server running on port 7000 on the local machine.
> - Make an initialize call
> <==============================This call is consistently
> failing under mod_perl.

Okay, so that's what you need to focus on.  Do you know if it's
connecting over TCP sockets or pipes?  There may be issues if it's
trying to manipulate STDOUT.

> The startup.pl that we are using has only 5 lines.

I don't see how this could cause you trouble, unless you are loading
other things directly from httpd.conf.  It probably has to do with
STDOUT.

- Perrin

Re: Scripts works under CGI but not under mod_perl

Posted by Manoj Bist <ma...@gmail.com>.
 Hi Perrin,

Thanks for the response. The C library is a third party library which does
the following:

- Connect to a server running on port 7000 on the local machine.
- Make an initialize call <==============================This call is
consistently failing under mod_perl.
- Grab binary data returned by the server.

What is most baffling is that the same perl code works fine when run as a
standalone application or as CGI but consistently fails under mod_perl. The
parameters passed to these call are the following:

- a struct which contains a couple of  "character strings"
- pointer to a handle that would be filled up after the call.

I have tried running a standalone perl application that uses the perl
binding under valgrind. However it did not expose memory issues.

The startup.pl that we are using has only 5 lines. I have included it here.

 11     use ModPerl::Registry;
 12     use Apache2::Const;
 13     use CGI qw(-compile :all);
 14     use CGI::Carp ();
 15     1;

- Manoj.


On 8/13/07, Perrin Harkins <pe...@elem.com> wrote:
>
> On 8/13/07, Manoj Bist <ma...@gmail.com> wrote:
> > I created a perl binding for a third party "C "library using swig. This
> > works fine under CGI but consistently fails under mod_perl.
> > Is there a known set of calls(mulithreading etc.) that is not expected
> to
> > work under mod_perl?
>
> Modules with C code normally work fine with mod_perl.  The only
> generic problems I can think of are ones where you open sockets or
> files in startup.pl and then fork and try to share them.
>
> Can you tell us more about what the C library does and how it fails?
>
> - Perrin
>

Re: Scripts works under CGI but not under mod_perl

Posted by Perrin Harkins <pe...@elem.com>.
On 8/13/07, Manoj Bist <ma...@gmail.com> wrote:
> I created a perl binding for a third party "C "library using swig. This
> works fine under CGI but consistently fails under mod_perl.
> Is there a known set of calls(mulithreading etc.) that is not expected to
> work under mod_perl?

Modules with C code normally work fine with mod_perl.  The only
generic problems I can think of are ones where you open sockets or
files in startup.pl and then fork and try to share them.

Can you tell us more about what the C library does and how it fails?

- Perrin