[FFI] Segmentation fault when calling callback function
Offen
Dieses Issue hat noch niemand übernommen.
Bug
Extension: ffi
Status: Needs Triage
- Vorherrschende Sprache
- C
- Sterne
- 40.4k
- Forks
- 8.1k
- Ø Merge
- 2 T. 13 Std.
- Gemergte PRs (30 T.)
- 96
Beschreibung
Description
The following code:
<?php
class Test {
public $lib;
public function __construct() {
$this->lib = \FFI::cdef("extern void setCloseSessionCallback(void(*fun)(unsigned long cid));
extern void testCloseSessionCallback();
", "./libsomelib.so");
}
}
$tclass = new Test();
$tclass->lib->setCloseSessionCallback(function($cid){
echo "ok\n";
});
$tclass->lib->testCloseSessionCallback(); //this function creates new std::thread from c++ stl, sleeps 2 seconds and calls function passed to setCloseSessionCallback
while(true); //prevent php script from completion because testCloseSessionCallback running in other thread
Resulted in this output:
segmentation fault (core dumped)
But I expected this output instead:
ok
gdb backtrace:

PHP Version
PHP 8.0.21 (zts) with Zend OPcache v8.0.21
Operating System
Manjaro Linux
Beitragsleitfaden
Erste Schritte
- Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
- Forke das Repository und arbeite in einem Branch.
- Öffne einen Pull Request, der die Issue-Nummer nennt.
Rechercherichtung
Beginne mit der PHP FFI-Reproduktion im Issue, einschließlich des über libsomelib.so registrierten Callbacks und des C++-Threads, der ihn aufruft. Verwende beim Testen des PHP 8.0.21 ZTS-Setups unter Manjaro Linux den bereitgestellten gdb-Backtrace. Fertig ist die Aufgabe, wenn der Callback "ok" ohne einen segmentation fault ausgibt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Bewertung
- Tech-Stack
- cpp, php
- Bereich
- backend
- Issue-Typ
- Bug
- Schwierigkeit
- 4/5
- Geschätzter Aufwand
- 3-5 Tage
- Aktivitätsstatus
- Veraltet
- Klarheit
- Größtenteils klar
- Anfängerfreundlichkeit
- 35/100