diff options
author | redmatrix <git@macgirvin.com> | 2016-05-09 01:12:24 -0700 |
---|---|---|
committer | redmatrix <git@macgirvin.com> | 2016-05-09 01:12:24 -0700 |
commit | 6f486a3393fe33db70ef2f1684dd3b79768d1137 (patch) | |
tree | 4d6967687dcc9b1c9bbbdb443b0038146c31335a | |
parent | 94accd8a4c7500ee4f5c268fe7e84ad3ed9a6675 (diff) | |
download | volse-hubzilla-6f486a3393fe33db70ef2f1684dd3b79768d1137.tar.gz volse-hubzilla-6f486a3393fe33db70ef2f1684dd3b79768d1137.tar.bz2 volse-hubzilla-6f486a3393fe33db70ef2f1684dd3b79768d1137.zip |
prevent recursion in the database driver when debugging is enabled and the system config is not yet loaded - caused by calling get_config and making db calls within the logger function; which we then attempt to log...
-rw-r--r-- | Zotlabs/Module/Network.php | 4 | ||||
-rwxr-xr-x | include/dba/dba_driver.php | 23 | ||||
-rwxr-xr-x | include/dba/dba_mysqli.php | 8 | ||||
-rw-r--r-- | include/dba/dba_postgres.php | 4 |
4 files changed, 26 insertions, 13 deletions
diff --git a/Zotlabs/Module/Network.php b/Zotlabs/Module/Network.php index fdfa99c12..c88258a78 100644 --- a/Zotlabs/Module/Network.php +++ b/Zotlabs/Module/Network.php @@ -446,7 +446,7 @@ class Network extends \Zotlabs\Web\Controller { $ordering = "commented"; if($load) { - + // Fetch a page full of parent items for this page $r = q("SELECT distinct item.id AS item_id, $ordering FROM item @@ -469,7 +469,7 @@ class Network extends \Zotlabs\Web\Controller { ); $_SESSION['loadtime'] = datetime_convert(); } - + // Then fetch all the children of the parents that are on this page $parents_str = ''; $update_unseen = ''; diff --git a/include/dba/dba_driver.php b/include/dba/dba_driver.php index 3c5b0b67e..8e205a4aa 100755 --- a/include/dba/dba_driver.php +++ b/include/dba/dba_driver.php @@ -59,8 +59,9 @@ abstract class dba_driver { const NULL_DATE = '0000-00-00 00:00:00'; const UTC_NOW = 'UTC_TIMESTAMP()'; - protected $debug = 0; protected $db; + + public $debug = 0; public $connected = false; public $error = false; @@ -302,10 +303,10 @@ function q($sql) { $stmt = vsprintf($sql, $args); if($stmt === false) { if(version_compare(PHP_VERSION, '5.4.0') >= 0) - logger('dba: vsprintf error: ' . + db_logger('dba: vsprintf error: ' . print_r(debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT, 1), true),LOGGER_NORMAL,LOG_CRIT); else - logger('dba: vsprintf error: ' . print_r(debug_backtrace(), true),LOGGER_NORMAL,LOG_CRIT); + db_logger('dba: vsprintf error: ' . print_r(debug_backtrace(), true),LOGGER_NORMAL,LOG_CRIT); } return $db->q($stmt); } @@ -314,7 +315,7 @@ function q($sql) { * This will happen occasionally trying to store the * session data after abnormal program termination */ - logger('dba: no database: ' . print_r($args,true),LOGGER_NORMAL,LOG_CRIT); + db_logger('dba: no database: ' . print_r($args,true),LOGGER_NORMAL,LOG_CRIT); return false; } @@ -385,7 +386,19 @@ function db_getfunc($f) { if(isset($lookup[$f]) && isset($lookup[$f][ACTIVE_DBTYPE])) return $lookup[$f][ACTIVE_DBTYPE]; - logger('Unable to abstract DB function "'. $f . '" for dbtype ' . ACTIVE_DBTYPE, LOGGER_DEBUG, LOG_ERR); + db_logger('Unable to abstract DB function "'. $f . '" for dbtype ' . ACTIVE_DBTYPE, LOGGER_DEBUG, LOG_ERR); return $f; } +// The logger function may make DB calls internally to query the system logging parameters. +// This can cause a recursion if database debugging is enabled. +// So this function preserves the current database debugging state and then turns it off while +// doing the logger() call + +function db_logger($s,$level = LOGGER_NORMAL,$syslog = LOG_INFO) { + global $db; + $saved = $db->debug; + $db->debug = false; + logger($s,$level,$syslog); + $db->debug = $saved; +}
\ No newline at end of file diff --git a/include/dba/dba_mysqli.php b/include/dba/dba_mysqli.php index 57a7559a1..afd2aa642 100755 --- a/include/dba/dba_mysqli.php +++ b/include/dba/dba_mysqli.php @@ -38,7 +38,7 @@ class dba_mysqli extends dba_driver { if($this->error) { - logger('dba_mysqli: ERROR: ' . printable($sql) . "\n" . $this->error, LOGGER_NORMAL, LOG_ERR); + db_logger('dba_mysqli: ERROR: ' . printable($sql) . "\n" . $this->error, LOGGER_NORMAL, LOG_ERR); if(file_exists('dbfail.out')) { file_put_contents('dbfail.out', datetime_convert() . "\n" . printable($sql) . "\n" . $this->error . "\n", FILE_APPEND); } @@ -46,13 +46,13 @@ class dba_mysqli extends dba_driver { if(($result === true) || ($result === false)) { if($this->debug) { - logger('dba_mysqli: DEBUG: ' . printable($sql) . ' returns ' . (($result) ? 'true' : 'false'), LOGGER_NORMAL,(($result) ? LOG_INFO : LOG_ERR)); + db_logger('dba_mysqli: DEBUG: ' . printable($sql) . ' returns ' . (($result) ? 'true' : 'false'), LOGGER_NORMAL,(($result) ? LOG_INFO : LOG_ERR)); } return $result; } if($this->debug) { - logger('dba_mysqli: DEBUG: ' . printable($sql) . ' returned ' . $result->num_rows . ' results.', LOGGER_NORMAL, LOG_INFO); + db_logger('dba_mysqli: DEBUG: ' . printable($sql) . ' returned ' . $result->num_rows . ' results.', LOGGER_NORMAL, LOG_INFO); } $r = array(); @@ -61,7 +61,7 @@ class dba_mysqli extends dba_driver { $r[] = $x; $result->free_result(); if($this->debug) { - logger('dba_mysqli: ' . printable(print_r($r,true)), LOGGER_NORMAL, LOG_INFO); + db_logger('dba_mysqli: ' . printable(print_r($r,true)), LOGGER_NORMAL, LOG_INFO); } } return $r; diff --git a/include/dba/dba_postgres.php b/include/dba/dba_postgres.php index ba4366d13..03b29d703 100644 --- a/include/dba/dba_postgres.php +++ b/include/dba/dba_postgres.php @@ -50,7 +50,7 @@ class dba_postgres extends dba_driver { $this->error = pg_last_error($this->db); if($result === false || $this->error) { - //logger('dba_postgres: ' . printable($sql) . ' returned false.' . "\n" . $this->error); + //db_logger('dba_postgres: ' . printable($sql) . ' returned false.' . "\n" . $this->error); if(file_exists('dbfail.out')) file_put_contents('dbfail.out', datetime_convert() . "\n" . printable($sql) . ' returned false' . "\n" . $this->error . "\n", FILE_APPEND); } @@ -67,7 +67,7 @@ class dba_postgres extends dba_driver { $r[] = $x; pg_free_result($result); if($this->debug) - logger('dba_postgres: ' . printable(print_r($r,true))); + db_logger('dba_postgres: ' . printable(print_r($r,true))); } return $r; } |