No Code Attached Yet bug
avatar bcordis
bcordis
14 Apr 2026

What happened?

  1. Enable Site → Global Configuration → Debug System.
  2. In the System - Debug plugin, enable "Query Explains".
  3. Trigger any request that causes session_regenerate_id() to run
    (e.g. login/logout), which closes the session DB handler and fires
    a DB disconnect before the request completes.

Version

6.1

Expected result

No error; the query explains the collected or skipped items cleanly.

Actual result

Fatal error:
Call to a member function getLogs() on null
at plugins/system/debug/src/Extension/Debug.php:490
Debug->onAfterDisconnect()
...DatabaseDriver->disconnect()
Session\Handler\DatabaseHandler->close()
session_regenerate_id()

System Information

  • Joomla: 6.1.0 (also present on 6.1-dev HEAD)
  • PHP: 8.5.2
  • DB: MySQL

Additional Comments

Analysis

Debug::__construct() assigns $this->queryMonitor = $this->getDatabase()->getMonitor().
DatabaseDriver::getMonitor() returns null when no monitor is attached
(which is legitimate — monitors are optional). The onAfterDisconnect()
guard only checks JDEBUG, not whether $this->queryMonitor was set, so
line 490 calls getLogs() on null whenever the disconnect event fires
with debug on but no monitor present (notably during session_regenerate_id
via Session\Handler\DatabaseHandler::close()).

Proposed fix

Add a null guard on $this->queryMonitor in the query_explains
branch of onAfterDisconnect():

if ($this->queryMonitor && $this->params->get('query_explains') && \in_array($db->getServerType(), ['mysql', 'postgresql'], true)) {
                                                                                                                                                   
Happy to open a PR against 6.1-dev if desired.

Votes

# of Users Experiencing Issue
1/1
Average Importance Score
5.00

avatar bcordis bcordis - open - 14 Apr 2026
avatar joomla-cms-bot joomla-cms-bot - change - 14 Apr 2026
Labels Added: No Code Attached Yet bug
avatar joomla-cms-bot joomla-cms-bot - labeled - 14 Apr 2026
avatar bcordis
bcordis - comment - 14 Apr 2026

489 - if ($this->params->get('query_explains') && \in_array($db->getServerType(), ['mysql', 'postgresql'], true)) {
489 + if ($this->queryMonitor && $this->params->get('query_explains') && \in_array($db->getServerType(), ['mysql', 'postgresql'],
+ true)) {

avatar bcordis bcordis - change - 14 Apr 2026
The description was changed
avatar bcordis bcordis - edited - 14 Apr 2026
avatar BeginnerJoomlaCom
BeginnerJoomlaCom - comment - 15 Apr 2026

Issue #47526 related?

avatar Fedik Fedik - close - 15 Apr 2026
avatar Fedik
Fedik - comment - 15 Apr 2026

The same as:

avatar Fedik Fedik - change - 15 Apr 2026
Status New Closed
Closed_Date 0000-00-00 00:00:00 2026-04-15 15:08:23
Closed_By Fedik

Add a Comment

Login with GitHub to post a comment