[vbox-dev] IPerformanceCollector problem with VirtualBox PHP vboxServiceWrappers (v 3.1.0 and 3.1.2)

Joseph Smith joseph1962smith at yahoo.com
Sun Jan 17 04:25:56 GMT 2010


Hi James,
I have uncovered a problem with the IPerformanceCollector class (queryMetricsData method) that casuses a fatal error.
I am including the vbox-dev community as I believe the change I recommend below might help someone else.
First ... I am actually still using version 3.1.0 (I don't like to jump on the latest releases too quickly unless there are serious probs that force me to).
Anyway ... I encountered a problem with ver 3.1.0 where that version was trying to instantiate the abstract class 'VBox_ManagedObjectCollection' rather than the 'IPerformanceMetricCollection' class.  To work around this, I corrected this today in my local copy by changing from the abstract class to the 'IPerformanceMetricCollection' and all was
 well.
So I decided to go ahead and upgrade to ver 3.1.2.  Since the APIs did not change too much ... I decided to take the chance and do a quick test by using the 3.1.2 vboxServiceWrappers against my version 3.1.0 VirtualBox environment (again ... I don't like rushing into upgrading and figured the diff was not too big ...).
In doing this ... I have found a problem with version 3.1.2 vboxServiceWrappers.php.
In version 3.1.2, the queryMetricsData method, when returning the result set, attempts to instantiate an invalid collection (Line #6102):   'new $unknownCollection'.  This object is not defined and as a result is causing an error.  Interestingly, the name of the variable in the signature is called 'unknown' ... so I think that might be part of the problem.
Like in ver 3.1.0, I believe the correct object to instantiate is
 IPerformanceMetricCollection. 
I made that adjustment and as you might expect, that prevented the PHP fatal error.  This however uncovered another problem.  The return statement for ver 3.1.2 is not correct (does not match the API documentation).  Each of the return data elements are being type-cast incorrectly.  Ver 3.1.0 did have the correct type-cast.
Ver 3.1.2 (with my IPerformanceMetricCollection change) has the following:return array((int)$response->returnval, (string)$response->returnMetricNames, new IPerformanceMetricCollection ($this->connection, $response->returnObjects), (string)$response->returnUnits, (int)$response->returnScales, (int)$response->returnSequenceNumbers, (int)$response->returnDataIndices, (int)$response->returnDataLengths);
I believe it should be:return array((array)$response->returnval,
 (array)$response->returnMetricNames, new IPerformanceMetricCollection ($this->connection, (array)$response->returnObjects), (array)$response->returnUnits, (array)$response->returnScales, (array)$response->returnSequenceNumbers, (array)$response->returnDataIndices, (array)$response->returnDataLengths);
Notice ... the typecast for all the returned data elements are arrays and not string or int.

Thanks,Joe



      
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.virtualbox.org/pipermail/vbox-dev/attachments/20100116/6a284f40/attachment.html>


More information about the vbox-dev mailing list