Bug #79735 [Opn->Fbk]: OPcache causes "Call to undefined method" errors in exception_handler etc.
Edit report at https://bugs.php.net/bug.php?id=79735&edit=1
ID: 79735
Updated by: cmb@php.net
Reported by: ca at lsp dot net
Summary: OPcache causes "Call to undefined method" errors in
exception_handler etc.
-Status: Open
+Status: Feedback
Type: Bug
Package: opcache
Operating System: Windows 10
PHP Version: 7.3.19
-Assigned To:
+Assigned To: cmb
Block user comment: N
Private report: N
New Comment:
> Those Ajax requests always happen in the same order.
Can you please specify which Ajax requests exactly?
Previous Comments:
------------------------------------------------------------------------
[2020-06-25 14:56:10] ca at lsp dot net
To give more context:
The failing method call happens in TimeDataCollector::collect():
<https://github.com/maximebf/php-debugbar/blob/v1.16.3/src/DebugBar/DataCollector/TimeDataCollector.php#L214>
The called method is DataCollector::getDataFormatter():
<https://github.com/maximebf/php-debugbar/blob/v1.16.3/src/DebugBar/DataCollector/DataCollector.php#L69-L75>
(Note that TimeDataCollector extends DataCollector.)
------------------------------------------------------------------------
[2020-06-25 14:27:10] ca at lsp dot net
I'm unable to reproduce this issue with PHP 7.4.0 - 7.4.7.
------------------------------------------------------------------------
[2020-06-25 14:01:01] ca at lsp dot net
I'm able to reproduce the issue consistently with two (specific) concurrent Ajax requests
(handled by PHP via Apache's mod_php):
* Those Ajax requests always happen in the same order.
* The error always occurs in the same (second) request.
* The error does not occur, if the first request is blocked via the Firefox DevTools.
Both Ajax requests call PHP Debug Bar's [1] sendDataInHeaders() method inside a
header_register_callback(), but only the second Ajax request causes the error:
```
Error thrown with message "Call to undefined method
DebugBar\DataCollector\TimeDataCollector::getDataFormatter()"
Stacktrace:
#7 Error in C:\***\vendor\maximebf\debugbar\src\DebugBar\DataCollector\TimeDataCollector.php:214
#6 DebugBar\DataCollector\TimeDataCollector:collect in
C:\***\vendor\maximebf\debugbar\src\DebugBar\DebugBar.php:238
#5 DebugBar\DebugBar:collect in C:\***\vendor\maximebf\debugbar\src\DebugBar\DebugBar.php:265
#4 DebugBar\DebugBar:getData in C:\***\vendor\maximebf\debugbar\src\DebugBar\DebugBar.php:321
#3 DebugBar\DebugBar:sendDataInHeaders in C:\***\src\***\DebugBar.php:353
#2 ***\DebugBar:***\Bar\{closure} in C:\***\src\***\AjaxResponse.php:29
#1 ***\Ajax:sendResponse in C:\***\src\***\***.php:2958
#0 ***\***:*** in C:\***\***.php:20
```
(Disabling OPcache also fixes the issue, of course.)
[1] <https://github.com/maximebf/php-debugbar>
------------------------------------------------------------------------
[2020-06-25 13:41:49] ca at lsp dot net
Related To: Bug #79729
------------------------------------------------------------------------
[2020-06-25 13:29:15] ca at lsp dot net
In 7.3.9, PHP exits in that case with status 3221225477 right after an opcache_reset()
call, and with status 1 if the cache is populated (according to the Apache 2.4.43 error log).
(In 7.3.10 and later, PHP doesn't exit, see above.)
------------------------------------------------------------------------
The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
https://bugs.php.net/bug.php?id=79735
--
Edit this bug report at https://bugs.php.net/bug.php?id=79735&edit=1
Thread (7 messages)