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 <[EMAIL PROTECTED]> 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 = 0;
    double ymin = 0.0, ymax = 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) == FAILURE)
    {
        return;
    }
              if ( args->type != IS_ARRAY )
              {
php_error(E_WARNING, "2nd Variable passed to rrd_graph is not an
array!\n");
                      RETURN_FALSE;
              }

    args_arr = args->value.ht;
    argc = php_argc + 3;
    argv = (char **) emalloc(argc * sizeof(char *));

    argv[0] = estrdup("dummy");
    argv[1] = estrdup("graph");
    argv[2] = estrndup(file, file_len);


              for (i = 3; i < argc; i++)
              {
                      zval **dataptr;

if ( zend_hash_get_current_data(args_arr, (void *) &dataptr) ==
FAILURE )
                              continue;

                      entry = *dataptr;

                      if ( entry->type != IS_STRING )
                              convert_to_string(entry);

                      argv[i] = estrdup(entry->value.str.val);

                      if ( i < argc )
                              zend_hash_move_forward(args_arr);
              }

              optind = 0; opterr = 0;
#if HAVE_RRD_12X
if ( rrd_graph(argc-1, &argv[1], &calcpr, &xsize, &ysize, NULL,
&ymin, &ymax) != FAILURE )
              {
#else
if ( rrd_graph(argc-1, &argv[1], &calcpr, &xsize, &ysize) !=
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 = 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 = 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



--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to