Re: unexpected Apache::VMonitor output

[prev] [thread] [next] [Date index for 2005/01/29]

From: Stas Bekman
Subject: Re: unexpected Apache::VMonitor output
Date: 02:42 on 29 Jan 2005
Stas Bekman wrote:

>> I'm not sure if it's related, but this:
>>
>> ------------------------------------------
>> #!/usr/bin/perl -w
>> use strict;
>> $|++;
>> use Apache::Scoreboard;
>> my $image=Apache::Scoreboard->fetch("[a scoreboard url]");
>> for (my $parent = $image->parent; $parent; $parent = $parent->next) {
>>     my $server = $parent->server; #Apache::ServerScore object
>>     print $server->vhost,"\n";
>> }
>> ------------------------------------------
>>
>> still segfults on my machine.  VMonitor is working fine, though.
> 
> 
> Yup, I get it too. Blame the lack of the test suite. Hopefully we will 
> gradually create one. I'm starting with your test cases that you've 
> reported.

What happen is that when you call fetch, you get a copy of the image. 
Which works fine for most things, since they are inlined. The vhost record 
is however a pointer to another struct, which is not part of that image. 
so when it's attempted to be resolved outside of running Apache, it 
segfaults. It works fine under Apache::VMonitor since the latter runs 
under Apache, so the pointer is resolved w/o a problem.

For now the following simply disables vhosts for Apache::DummyScoreboard 
(which is the one used when modperl is not loaded).

Index: Scoreboard.xs
===================================================================
--- Scoreboard.xs       (revision 127)
+++ Scoreboard.xs       (working copy)
@@ -32,8 +32,10 @@
  #define server_score_client(s)          s->record.client
  #define server_score_request(s)         s->record.request

-#define server_score_vhost(s) \
-    s->record.vhostrec ? s->record.vhostrec->server_hostname : ""
+#define server_score_vhost(s)                           \
+    s->record.vhostrec && ap_scoreboard_image           \
+        ? s->record.vhostrec->server_hostname           \
+        : ""

  #define parent_score_pid(s) s->record.pid

I suppose we could copy the vhost record's string into:

typedef struct {
     parent_score record;
     int idx;
     scoreboard *image;
} Apache__parent_score;

e.g. by adding:

   char [128] vhost;

but it'll slow down the general case. So it probably requires some 
thinking. May be it could be optional and used only for external image 
fetching and referred to, if detected that we aren't running under Apache, 
e.g.:

ap_scoreboard_image
   ? (s->record.vhostrec ? s->record.vhostrec->server_hostname : "")
   : (s->vhost)

        -- 
        __________________________________________________________________
Stas Bekman            JAm_pH ------> Just Another mod_perl Hacker
http://stason.org/     mod_perl Guide ---> http://perl.apache.org
mailto:stas@xxxxxx.xxx http://use.perl.org http://apacheweek.com
http://modperlbook.org http://apache.org   http://ticketmaster.com

(message missing)

Re: unexpected Apache::VMonitor output
Todd Finney 10:38 on 14 Jan 2005

Re: unexpected Apache::VMonitor output
Stas Bekman 22:30 on 21 Jan 2005

Re: unexpected Apache::VMonitor output
Todd Finney 01:07 on 22 Jan 2005

Re: unexpected Apache::VMonitor output
Stas Bekman 01:37 on 22 Jan 2005

Re: unexpected Apache::VMonitor output
Todd Finney 01:54 on 22 Jan 2005

Re: unexpected Apache::VMonitor output
Stas Bekman 02:00 on 22 Jan 2005

Re: unexpected Apache::VMonitor output
Todd Finney 02:02 on 26 Jan 2005

Re: unexpected Apache::VMonitor output
Stas Bekman 02:18 on 29 Jan 2005

Re: unexpected Apache::VMonitor output
Todd Finney 02:43 on 29 Jan 2005

Re: unexpected Apache::VMonitor output
Stas Bekman 02:53 on 29 Jan 2005

Re: unexpected Apache::VMonitor output
Todd Finney 03:08 on 29 Jan 2005

Re: unexpected Apache::VMonitor output
Stas Bekman 03:16 on 29 Jan 2005

Re: unexpected Apache::VMonitor output
Stas Bekman 02:42 on 29 Jan 2005

Re: unexpected Apache::VMonitor output
Stas Bekman 02:48 on 29 Jan 2005

Generated at 12:39 on 05 Feb 2005 by mariachi v0.52