provide a sort of mutex lock around db logging so it can't possibly recurse. Previous attempts to do something similar using other methods haven't worked out satisfactorily.

This commit is contained in:
redmatrix 2016-05-31 16:16:54 -07:00
parent 701acf59e2
commit 00b4843425
2 changed files with 18 additions and 10 deletions

View File

@ -12,7 +12,7 @@ class DBA {
static public $dba = null; static public $dba = null;
static public $dbtype = null; static public $dbtype = null;
static public $logging = false;
/** /**
* @brief Returns the database driver object. * @brief Returns the database driver object.
@ -421,8 +421,13 @@ function db_getfunc($f) {
function db_logger($s,$level = LOGGER_NORMAL,$syslog = LOG_INFO) { function db_logger($s,$level = LOGGER_NORMAL,$syslog = LOG_INFO) {
if(\DBA::$logging)
return;
$saved = \DBA::$dba->debug; $saved = \DBA::$dba->debug;
\DBA::$dba->debug = false; \DBA::$dba->debug = false;
\DBA::$logging = true;
logger($s,$level,$syslog); logger($s,$level,$syslog);
\DBA::$logging = false;
\DBA::$dba->debug = $saved; \DBA::$dba->debug = $saved;
} }

View File

@ -300,15 +300,18 @@ function call_hooks($name, &$data = null) {
$func($data); $func($data);
else else
$func($a, $data); $func($a, $data);
} else { }
// The hook should be removed so we don't process it. else {
// But not until everybody gets through a timing issue
// related to git pull and update_r1169 // Don't do any DB write calls if we're currently logging a possibly failed DB call.
// q("DELETE FROM hook WHERE hook = '%s' AND file = '%s' AND fn = '%s'", if(! DBA::$logging) {
// dbesc($name), // The hook should be removed so we don't process it.
// dbesc($hook[0]), q("DELETE FROM hook WHERE hook = '%s' AND file = '%s' AND fn = '%s'",
// dbesc($origfn) dbesc($name),
// ); dbesc($hook[0]),
dbesc($origfn)
);
}
} }
} }
} }