Index: branches/5.2.x/core/units/admin/admin_events_handler.php =================================================================== diff -u -N -r16664 -r16770 --- branches/5.2.x/core/units/admin/admin_events_handler.php (.../admin_events_handler.php) (revision 16664) +++ branches/5.2.x/core/units/admin/admin_events_handler.php (.../admin_events_handler.php) (revision 16770) @@ -1,6 +1,6 @@ Application->ConfigValue('SemaphoreLifetimeInSeconds'); + + $sql = 'SELECT * + FROM ' . TABLE_PREFIX . 'Semaphores + WHERE Timestamp < ' . strtotime('-' . $semaphore_lifetime . ' seconds'); + $stuck_semaphores = $this->Conn->Query($sql, 'SemaphoreId'); + + if ( !$stuck_semaphores ) { + return; + } + + /** @var LanguagesItem $language */ + $language = $this->Application->recallObject('lang.current', null, array('skip_autoload' => true)); + $date_format = $language->GetDBField('DateFormat') . ' ' . $language->GetDBField('TimeFormat'); + + foreach ( $stuck_semaphores as $semaphore_id => $semaphore_data ) { + $log = $this->Application->log('Stuck semaphore detected (unit: ' . $semaphore_data['MainPrefix'] . ')'); + $log->setLogLevel(kLogger::LL_ERROR); + $log->addTrace(unserialize($semaphore_data['Backtrace'])); + $log->setUserData(implode(PHP_EOL, array( + 'Main Prefix: ' . $semaphore_data['MainPrefix'], + 'Main IDs: ' . $semaphore_data['MainIDs'], + 'Created On: ' . date($date_format, $semaphore_data['Timestamp']), + 'Deleted On: ' . date($date_format), + ))); + + $log->setLogField('LogHostname', $semaphore_data['Hostname']); + $log->setLogField('LogRequestSource', 1); // Web. + $log->setLogField('LogInterface', kLogger::LI_ADMIN); + $log->setLogField('LogRequestURI', $semaphore_data['RequestURI']); + $log->setLogField('LogUserId', $semaphore_data['UserId']); + $log->setLogField('IpAddress', $semaphore_data['IpAddress']); + $log->setLogField('LogSessionKey', $semaphore_data['SessionKey']); + + $log->write(); + + $sql = 'DELETE FROM ' . TABLE_PREFIX . 'Semaphores + WHERE SemaphoreId = ' . $semaphore_id; + $this->Conn->Query($sql); + } + } + }