Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:22035 Return-Path: Mailing-List: contact internals-help@lists.php.net; run by ezmlm Delivered-To: mailing list internals@lists.php.net Received: (qmail 16825 invoked by uid 1010); 28 Feb 2006 13:35:38 -0000 Delivered-To: ezmlm-scan-internals@lists.php.net Delivered-To: ezmlm-internals@lists.php.net Received: (qmail 16810 invoked from network); 28 Feb 2006 13:35:38 -0000 Received: from unknown (HELO lists.php.net) (127.0.0.1) by localhost with SMTP; 28 Feb 2006 13:35:38 -0000 X-Host-Fingerprint: 64.233.162.199 zproxy.gmail.com Linux 2.4/2.6 Received: from ([64.233.162.199:38809] helo=zproxy.gmail.com) by pb1.pair.com (ecelerity 2.0 beta r(6323M)) with SMTP id 61/AA-25426-AA154044 for ; Tue, 28 Feb 2006 08:35:38 -0500 Received: by zproxy.gmail.com with SMTP id s1so1246060nze for ; Tue, 28 Feb 2006 05:35:36 -0800 (PST) DomainKey-Signature: a=rsa-sha1; q=dns; c=nofws; s=beta; d=gmail.com; h=received:message-id:date:from:to:subject:cc:in-reply-to:mime-version:content-type:content-transfer-encoding:content-disposition:references; b=aTP3QHEXqq9lMpL8Ng0xL9yDMkJjbY0lRRvd4sfwABaOFEv0jUBa4MkBNBZs89ZhzzA5Wvua8d7AMHXhsLM7yyUcqYzqhfPAxEN128VVaP5zpPXnXlpUmtLP0P2BbADftgyUT6HdgGfzYmNhIiYyzpcGjwOW3hGRilevtBFzl8g= Received: by 10.35.8.1 with SMTP id l1mr602709pyi; Tue, 28 Feb 2006 05:35:35 -0800 (PST) Received: by 10.35.41.17 with HTTP; Tue, 28 Feb 2006 05:35:35 -0800 (PST) Message-ID: <4e89b4260602280535j26952d7o52d971fa44e32f8b@mail.gmail.com> Date: Tue, 28 Feb 2006 08:35:35 -0500 To: "D. Walsh" Cc: PHP-DEV In-Reply-To: <689D721F-94B8-4078-B08B-5D4B89B90A42@daleenterprise.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline References: <8ADDACA1-2C4A-49EF-8DB5-C2529B2B892F@daleenterprise.com> <1416630C-340F-4D1F-A4D2-711286725A03@daleenterprise.com> <4e89b4260602240411g743e3164s9d2606fdf2aeb837@mail.gmail.com> <689D721F-94B8-4078-B08B-5D4B89B90A42@daleenterprise.com> Subject: Re: [PHP-DEV] extension and apache 2.x compatibility issue. From: kingwez@gmail.com ("Wez Furlong") If your code is portable, I'd suggest debugging it on linux. --Wez. On 2/26/06, D. Walsh wrote: > > On Feb 24, 2006, at 07:11 , Wez Furlong wrote: > > > My suggestion is to download, compile and use valgrind and see what > > problems that highlights in your code. > > Since you are specifically directing me to do this I will attempt to > get valgrind installed and working in Mac OSX, as soon as I have that > done I'll update you so we can proceed further. > > -- Dale > > > --Wez. > > > > On 2/23/06, D. Walsh wrote: > >> Anyone have any ideas or see the problem here??? > >> > >> On Feb 22, 2006, at 24:48 , D. Walsh wrote: > >> > >>> I had an issue with an extension that I previously posted to this > >>> list and it was suggested I update to the newer API which might > >>> provide a solution to the problem. > >>> > >>> Taking a somewhat safe approach I tackled converting the rrdtool > >>> extension first since it was similar in functionality and protocol > >>> to my ramdisk extension. > >>> > >>> Trying to convert to the new API wasn't as easy as it had been > >>> suggested/reported. > >>> > >>> Steph Fox and I worked on it for several days before we finally got > >>> it worked out. > >>> > >>> I tested the extension for the last week under Apache 1.3.33 and > >>> found that the extension seemed to take less time to perform it's > >>> functions which was well worth the effort to convert to the newer > >>> API so thank you for the kick in this area. > >>> > >>> I then compiled for Apache 2 and found that I was still > >>> experiencing the same issues so I'm sad to report that this did not > >>> correct the problem. > >>> > >>> I realize that hearing "it doesn't work" or "it failed" isn't > >>> descriptive so I'll try to provide a little more information on the > >>> problem. > >>> > >>> Bear in mind that I have stepped back in time a little and have > >>> gone with linking the RRDTool library in an attempt to remove as > >>> many unknown variables from the equation as I possibly could and > >>> allow testing with various version of the RRDTool library but the > >>> RRDTool extension Tobias and I will be submitting for bundling with > >>> PHP will not require linking to an external RRDTool library as it > >>> will be entirely self contained however, the ability to link to an > >>> external RRDTool library will be available provided we can get all > >>> of our ducks in a row and satisfy the PHP license requirements > >>> (which may already be the case). > >>> > >>> Building PHP for Apache 1.3, a php script calls the rrd_graph > >>> function with a string (filename), an array (data to process) and a > >>> long (the array count) and returns an array containing the > >>> generated output file details. > >>> > >>> PHP seems to pass the variables to the linked library function > >>> without any issues, generates the output file and returns an array > >>> of the details with success. > >>> > >>> > >>> Building PHP for Apache 2.0 and Apache 2.2, passing the same > >>> information should yield the same results but it doesn't. > >>> > >>> The output file is never generated, the library complains that the > >>> array being passed is incomplete and invalid and no array is > >>> returned. > >>> > >>> I've tried using both 1.0.x and 1.2.x versions of the RRDTool > >>> library which resulted in the same issue so I've ruled out the > >>> library function as the cause of the problem since they all worked > >>> as expected when building PHP for Apache 1.3. > >>> > >>> Here's the entire rrd_graph function currently being used in the > >>> testing phase, I've gone over the available API with Steph who > >>> provided a lot of time, insight and assistance in helping me > >>> convert to the new API so at this time I'm not sure what the issue > >>> is or how to resolve it so if someone has ideas or sees a problem > >>> I'd be most grateful to hear about it. > >>> > >>> ____________________________________________________________________ > >>> __ > >>> _______________________________ > >>> > >>> PHP_FUNCTION(rrd_graph) > >>> { > >>> char *file; > >>> zval *args, *entry, *p_calcpr; > >>> HashTable *args_arr; > >>> char **argv, **calcpr; > >>> long php_argc, argc; > >>> uint file_len; > >>> int xsize, ysize, i =3D 0; > >>> double ymin =3D 0.0, ymax =3D 0.0; > >>> > >>> > >>> if ( rrd_test_error() ) > >>> rrd_clear_error(); > >>> > >>> if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "sal", > >>> &file, &file_len, &args, &php_argc) =3D=3D FAILURE) > >>> { > >>> return; > >>> } > >>> if ( args->type !=3D IS_ARRAY ) > >>> { > >>> php_error(E_WARNING, "2nd Variable passed > >>> to rrd_graph is not an > >>> array!\n"); > >>> RETURN_FALSE; > >>> } > >>> > >>> args_arr =3D args->value.ht; > >>> argc =3D php_argc + 3; > >>> argv =3D (char **) emalloc(argc * sizeof(char *)); > >>> > >>> argv[0] =3D estrdup("dummy"); > >>> argv[1] =3D estrdup("graph"); > >>> argv[2] =3D estrndup(file, file_len); > >>> > >>> > >>> for (i =3D 3; i < argc; i++) > >>> { > >>> zval **dataptr; > >>> > >>> if ( zend_hash_get_current_data(args_arr, > >>> (void *) &dataptr) =3D=3D > >>> FAILURE ) > >>> continue; > >>> > >>> entry =3D *dataptr; > >>> > >>> if ( entry->type !=3D IS_STRING ) > >>> convert_to_string(entry); > >>> > >>> argv[i] =3D estrdup(entry->value.str.val); > >>> > >>> if ( i < argc ) > >>> zend_hash_move_forward(args_arr); > >>> } > >>> > >>> optind =3D 0; opterr =3D 0; > >>> #if HAVE_RRD_12X > >>> if ( rrd_graph(argc-1, &argv[1], &calcpr, &xsize, > >>> &ysize, NULL, > >>> &ymin, &ymax) !=3D FAILURE ) > >>> { > >>> #else > >>> if ( rrd_graph(argc-1, &argv[1], &calcpr, &xsize, > >>> &ysize) !=3D > >>> FAILURE ) > >>> { > >>> #endif > >>> array_init(return_value); > >>> add_assoc_long(return_value, "xsize", xsize); > >>> add_assoc_long(return_value, "ysize", ysize); > >>> > >>> MAKE_STD_ZVAL(p_calcpr); > >>> array_init(p_calcpr); > >>> > >>> if (calcpr) > >>> { > >>> for (i =3D 0; calcpr[i]; i++) > >>> { > >>> add_next_index_string > >>> (p_calcpr, calcpr[i], 1); > >>> free(calcpr[i]); > >>> } > >>> free(calcpr); > >>> } > >>> zend_hash_update(return_value->value.ht, > >>> "calcpr", sizeof > >>> ("calcpr"), > >>> (void *) > >>> &p_calcpr, sizeof(zval *), NULL); > >>> } > >>> else > >>> { > >>> RETVAL_FALSE; > >>> } > >>> for (i =3D 1; i < argc; i++) > >>> efree(argv[i]); > >>> > >>> efree(argv); > >>> return; > >>> } > >>> > >>> -- > >>> PHP Internals - PHP Runtime Development Mailing List > >>> To unsubscribe, visit: http://www.php.net/unsub.php > >>> > >>> > >> > >> -- > >> PHP Internals - PHP Runtime Development Mailing List > >> To unsubscribe, visit: http://www.php.net/unsub.php > >> > >> > > > > -- > > PHP Internals - PHP Runtime Development Mailing List > > To unsubscribe, visit: http://www.php.net/unsub.php > > > > > >