Nette\Database masssssive memory leaks
- Filip Procházka
- Moderator | 4668
Nebudu tady brečet, že jsem zabil 5 dní hledáním chyby… Tak jo budu… 5 dní jsem hledal chybu ve svém dokonalém kódu a ona tam nebyla!!
V PDO bude nějaký hnusný error, protože když zakomentuju tenhle řádek, najednou vše funguje.
class Nette\Database\Statement extends \PDOStatement
{
protected function __construct(Connection $connection)
{
// $this->setFetchMode(PDO::FETCH_CLASS, 'Nette\Database\Row', array($this));
}
Destructor se nad řádkem podle všeho volá správně, ale paměť se neuvolní. Když ale PDO nepoužívá tuhle třídu, tak se paměť uvolňuje správně. Nemám už sílu ani hledat, jestli to není reportovaný bug v PHP. Jdu se opít, zdar.
$ php -v
PHP 5.3.11-dev (cli) (built: May 20 2012 15:54:01)
Zend Engine v2.3.0 with Xdebug v2.2.0
$ php -v
PHP 5.4.0 (cli) (built: Mar 27 2012 11:57:01)
Zend Engine v2.4.0
PS: tak jsem nakonec udělal test case https://gist.github.com/2771142
PS2: a reportoval jako bug PHPka https://bugs.php.net/bug.php?…
Editoval HosipLan (22. 5. 2012 22:14)
- jtousek
- Člen | 951
https://bugs.php.net/bug.php?…
Nevím jestli je to jeden bug nebo ne, tady je to hlášené s FETCH_INTO místo FETCH_CLASS.
Editoval jtousek (22. 5. 2012 21:20)
- David Grudl
- Nette Core | 8215
U PDO mě už nic nemůže překvapit. Třeba tuhle chybu jsem izoloval celý den.
- hrach
- Člen | 1838
Tož, uz je to přepracované. Zatím je to takový work in progress, dostavam se konecne k rozsahlejsim zmenam.
- tomask
- Člen | 9
Jak to izoluješ? Bohužel jsem taky narazil. V importním CLI skriptu potřebuji vložit několik desetitisíc řádků a přesně na volání Nette\Database\Statement s parametrem v konstruktoru (který se volá s každým insertem/dotazem) mi to po pár tisísích řádcích přeteče :/
Dost opruz, modely napsané v Nette\Database a pro tento ůčl nepoužitelné.
- Filip Procházka
- Moderator | 4668
Použil jsem hrachův fork, má v jedné z branchí tento leak opravený. Vyzkoušej, už netuším která to byla.
- spaze
- Generous Backer | 28
Aby vám to nebylo líto, tak jsem nad tímhle problémem taky teď spálil půl dne. Nebo vlastně půl noci. Ale ještěže mě napadlo použít ten Google.
Koukal jsem, že hrachův fix je už v masteru a milestone nastaven na 2.1, nějaká šance, že by se ty memleaky vyřešily už v 2.0.x?
Díky.
- David Grudl
- Nette Core | 8215
Jelikož si to vyžádalo kompletní překopání včetně BC breaků, tak to bude až ve 2.1. Soon!