Re: PHP 4.0 Bug #7984 Updated: Apparent memory access problem after object assignment causes PWS to crash

From: Date: Mon, 08 Jan 2001 19:49:47 +0000
Subject: Re: PHP 4.0 Bug #7984 Updated: Apparent memory access problem after object assignment causes PWS to crash
References: 1  Groups: php.dev 
Request: Send a blank email to php-dev+get-43446@lists.php.net to get a copy of this message
I have the smallest configuration that I can get away with, all script driven. It requires mysql on your machine also. I would be willing to provide detailed instructions for reproducing this on a redhat/mandrake 6.2 system. It turns out to be easy to set up and crash (5, 10 minutes at most, assuming mysql already on the system). bug On 8 Jan 2001, Bug Database wrote: > ID: 7984 > Updated by: cynic > Reported By: bughuntr@ctelcom.net > Old-Status: Open > Status: Feedback > Bug Type: Reproduceable crash > Assigned To: > Comments: > > please, provide the shortest possible script reproducing the error. > > Previous Comments: > --------------------------------------------------------------------------- > > [2000-11-26 21:21:42] bughuntr@ctelcom.net > This is a _very_ complex script that heavily uses objects. The first few lines > are the web page printout. The next lines are the function that crashes the system. > It uses mysql and PWS on win98. ( It will later be used on linux. It is GPL, and is > a distributive monitoring system.) PWS crashes consistently at this point, and must be > restarted. > every few times, the win98 machine must be rebooted. > > the array_walk function is being called: > > array_walk($TestActionResult,"CheckTestActionResult"); > > The object definitions are: > > class MySQLPollConfig > { > var $configured; // if TRUE, this is configured > var $MySQLConnect; > var $poll_rate; > var $MySQLConnectCount; > function MySQLPollConfig() > { > $this->configured = FALSE; > $this->poll_rate = FALSE; > $this->MySQLConnect = 0; > $this->MySQLConnectCount = 0; > } > }; > > class AlarmInfoClass > { > var $HistoryID; // the ID in the History table > var $AlarmState;// the alarm id found > var $Status;// the current status ID of the alarm > var $Type; // type, either Success or Fail > var $MachineID; // the machine that the alarm belongs to > var $New; // if TRUE, this was just updated with new info > var $ID; // if in the database, this ID is non-zero > var $ServiceID; // the id of the service involved > function AlarmInfoClass() > {// make sure all variables exist > $this->HistoryID=0; > $this->AlarmState=0; > $this->Status=0; > $this->Type=0; > $this->MachineID=0; > $this->New=FALSE; > $this->ID=0; > $this->ServiceID=0; > } > }; > > class ActionResultClass > { > var $ServiceID; > var $MonitoredMachineID; > var $Result; > function ActionResultClass() > { > $this->ServiceID=0; > $this->MonitoredMachineID=0; > $this->Result = 0; > } > }; > > ------------------------------------------------------------- > the web page output. > -------------------------------------------------------------- > <!DOCTYPE HTML PUBLIC "-//SoftQuad Software//DTD HoTMetaL PRO 6.0::19990601::extensions > to HTML 4.0//EN" "hmpro6.dtd"> <HTML> <HEAD> <TITLE>MoM > execution test page</TITLE> <META HTTP-EQUIV="Content-Type" > CONTENT="text/html; charset=iso-8859-1"> </HEAD> <BODY > BGCOLOR="#FFFFFF"> <H1 ALIGN="center"><FONT FACE="Arial, > Helvetica, sans-serif" SIZE="+7">MoM</FONT></H1> <P> > <BR> > > <!--global.c--> > <!--momfuncs.c--> > <!--readconf.c--> > <!--setupfn.c--> > <!--momact.c--> > GetServiceInfo: No value for $MMValue->FKServiceID<BR> > GetTestActionInfo(0,0,Resource id #2): No value for FKServiceID<BR> > Error in Database!! No Service Entries scanned!<BR> > ----->defining debug in file mom.c at line 226<BR> > <BR><B>Function==MonitorMachines file momact.c line 323</B><BR> > walking MonitoredMachineArray<BR> > <BR><B>Function==RunTestAction(0, 0): file momact.c line 139</B><BR> > RunTestAction: No value for $MMValue->FKServiceID in file momact.c, line 146<BR> > <BR><B>Function==RunTestAction(Object, 2): file momact.c line > 139</B><BR> > <BR><B>Function==RunAction(4,2) file momact.c line 71</B><BR> > Running PHP Command String<BR> > $ExecString="echo "Test Sendmail!<BR>n"; return(SUCCESS);"<BR> > Test Sendmail!<BR> > $Result="1"<BR> > $TestActionResult["4"]=RunAction($ActionID,$MMKey)<BR>$ActionID = 4<BR> > -----------------------<BR> > For Object 'TesActionResult':<BR> > ServiceID -> 1<BR> > MonitoredMachineID -> 2<BR> > Result -> 1<BR> > -----------------------<BR> > <BR>walking TestActionArray<BR> > <BR><B>Function==CheckTestActionResult(0,0) file momact.c line > 198</B><BR> > Key 0 not used<BR> > <BR><B>Function==CheckTestActionResult(Object,4) file momact.c line > 198</B><BR> > key 4 for object Object > <BR>-----------------------<BR> > For Object 'ActionResult ($ARValue)':<BR> > ServiceID -> 1<BR> > MonitoredMachineID -> 2<BR> > Result -> 1<BR> > -----------------------<BR> > new action result!<BR> > $Alarm was NOT set<BR> > -----------------------<BR> > For Object 'ActionResult':<BR> > ServiceID -> 1<BR> > > > > '''''''''''''''''''''''''''''''''' > web page ended at last line before blank line > > '''''''''''''''''''''''''''''''' > > > > function CheckTestActionResult($ARValue,$ARKey) > { > global $MySQLConfig; // the mysql configurationinfo > global $AlarmType; > global $StatusType; > global $Service; > global $Alarm; > global $LastActionResult; > global $LastAlarm; > global $TestActionResult; > > if (defined("DEBUG")) > print("<BR><B>Function==CheckTestActionResult($ARValue,$ARKey) file > ".__FILE__." line ".__LINE__."</B><BR>n"); > > if ($ARKey == 0) > { > if (defined("DEBUG")) > echo "Key 0 not used<BR>n"; > return; > } > else > if (defined("DEBUG")) > echo "key $ARKey for object $ARValuen<BR>"; > > > if (defined("DEBUG")) > DisplayObject($ARValue,"ActionResult ($ARValue)"); > > > $DoWork = FALSE; > > > > if (!isset($LastActionResult["$ARKey"])) > { > if (defined("DEBUG")) > echo "new action result!<BR>n"; > $DoWork = TRUE;//something has changed > } > else > { > if (defined("DEBUG")) > echo "Check last action result<BR>n"; > if ($ARValue->Result != $LastActionResult["$ARKey"]->Result) > { > $DoWork = TRUE; > $LastActionResult["$ARKey"] = $ARValue; // save the object > } > } > > if ($DoWork)// only do this if something changed > { > $AlarmObj = new AlarmInfoClass; > // pick up the status, if it exists > if (isset($Alarm["$ARKey"])) > { > if (defined("DEBUG")) > echo "$Alarm was set<BR>n"; > $LastAlarm["$ARKey"] = $Alarm["$RKey"]; > } > else > if (defined("DEBUG")) > echo "$Alarm was NOT set<BR>n"; > > DisplayObject($ARValue,"ActionResult"); > exit; > /* > misc here > */ > } > > > ------------------------ > a gdb backtrace on windows???? can I do this???? > > > > --------------------------------------------------------------------------- > > > Full Bug description available at: http://bugs.php.net/?id=7984 >

« previous php.dev (#43446) next »