subtle bug
mmcdougall - June 9, 2009 - 17:26
| Project: | Drupal For Firebug |
| Version: | 6.x-1.x-dev |
| Component: | Code |
| Category: | support request |
| Priority: | normal |
| Assigned: | Unassigned |
| Status: | closed |
Jump to:
Description
There's a subtle bug in your code (d5 and d6 versions):
/**
* Implementation of hook_exit()
*/
function drupalforfirebug_exit() {
// Garbage Collection
global $dfp_runtime;
unset($dfp_runtime);
}should be changed to:
/**
* Implementation of hook_exit()
*/
function drupalforfirebug_exit() {
// Garbage Collection
global $dfp_runtime;
unset($_GLOBALS['dfp_runtime']);
}Your code only unsets the local variable $dfp_runtime, so in your case it achieves nothing.
See the PHP documentation for the unset() function which says::
"The behavior of unset() inside of a function can vary depending on what type of variable you are attempting to destroy.
If a globalized variable is unset() inside of a function, only the local variable is destroyed. The variable in the calling environment will retain the same value as before unset() was called."
(Passing $dfp_runtime by reference does not work either).
However I think the unset() in this code is OK, since you are removing an array element:
/**
* Output Function to Return the Results of the Log
*/
function drupalforfirebug_get($panetype) {
global $dfp_runtime;
$output = '';
if (isset($dfp_runtime['firebug_messages'][$panetype])) {
foreach($dfp_runtime['firebug_messages'][$panetype] as $message) {
$output .= '<div>'. $message .'</div>';
}
unset($dfp_runtime['firebug_messages'][$panetype]);
return $output;
}
}Marc

#1
Correction, should be changed to:
/*** Implementation of hook_exit()
*/
function drupalforfirebug_exit() {
// Garbage Collection
unset($_GLOBALS['dfp_runtime']);
}
Marc
#2
Thanks! Just committed to CVS.
#3
Automatically closed -- issue fixed for 2 weeks with no activity.